Machine Learning with Tensorflow) 6. Convolutional Neural Network


기존 Multi-Layered Neural Network에서는 2차원 영상이 갖는 공간적인 특징들을 무시하는 단점들이 있었다. 영상뿐만 아니라, 한 포인트에서 갖는 특정한 값이 그 포인트의 주변 환경과는 전혀 상관없이 계산된다는 것이었다.

이를 해결하기 위해 지능적인 훈련 데이터를 직접 생성해 Training Set에 넣어줘야하는 단점도 있었다.

결과적으로 이는 기계를 학습하는데에 있어 더 많은 비용을 소모하게 했다.


이를 해결하기 위해 각각의 포인트들을 일일히 확인하는 것이 아니라 그 주변 일부 픽셀들의 correlation을 relate시키는 기법을 개발하였는데, 그것이 바로 CNN이다.

이는 특정 point에서의 feature를 추출하는 것이 아니라, 특정 window에서의 feature를 추출하는 것이기 때문에 보다 더 인간(?)의 지능스러운 특징을 닮게 된 것이다!


먼저, 영상 처리의 예시를 보도록 하자.


우리가 2차원 영상을 바라볼 때, 특정 물체의 가장자리를 알아볼 때, 갑작스런 색의 변화를 통해 알아보곤 한다. 이 점을 이용하여 Laplace를 이용하여 영상 처리를 하면 위와 같은 3x3 Laplace 영상이 나온다. 이는 아기 사진의 가장 자리들만 추출한 것이다.

즉, CNN은 가장자리 뿐만 아니라 특정 물체들을 분류할 수 있는 일종의 Hint Feature들을 알아서 뽑을 수 있는 것이다.!



예를 들어 3x3 Window로 feature들을 추출한다고 생각해보자. 그 window들의 pixel들에는 각기 다른 weight들이 있기 때문에 각자 다른 feature들이 추출될 수 밖에 없다.

예를 들어, [ [1, 0, 1], [0, 1, 0], [1, 0, 1] ]을 가진 일종의 filter를 가지고 사진들을 훑는다고 생각하면 편할 것이다.

5x5 image를 3x3 window로 훑을 경우, 우리가 얻을 수 있는 정보는 3x3 feature일 것이다. 사진과 같이 맨처음에 window로 훑을 경우 나오는 1행 1열의 feature는 4가 될 것이다.

 이 때, convolution 내에서 겹치는 pixel들을 배제해줘도 classification하는 데에 문제가 없다고 판단하면, 궁극적으로 feature size를 줄여 계산의 양을 줄일 수 있다.

이 작업은 subsampling이라고 한다. convolution을 통해 나온 feature들을, 다시 window를 이용해 window 내에서 가장 큰 값만 뽑아낸다는 지, 특정 방법을 이용해 subsampling한다.

예를 들어 image 처리일 경우, 우리 눈에는 자극적인 부분만 잘 들어오기 때문에 max-pooling을 이용하면 오히려 우리 눈과 유사한 feature들을 추출할 수 있다.


이러한 작업들을 여러번 하여 convolution 작업들을 여러 번 겹치게 할 수도 있다.

물론 기계가 어떠한 feature들을 어떻게 뽑아내는지 모르기 때문에 black-box와 같은 문제점을 가지고 있다.


아래의 코드는 CNN을 이용하여 MNIST를 구현한 코드이다.







댓글

가장 많이 본 글