2016년 3월 19일 토요일

[머신러닝] CNN(Convolution Neural Network)

Why CNN?




 이미지 인식과 같은 분야에서 MLP(Multi-Layer Perceptron) 또는 multi-layered neural network를 사용하게 되면 MLP는 모든 입력이 위치와 상관없이 동일한 수준의 중요도를 갖는다고 본다. 그렇기 때문에 이를 이용해 fully-connected neural network를 구성하게 되면 파라미터의 크기가 엄청나게 커지는 문제가 생긴다. 이에 대한 해결책으로 탄생한 것이 바로 CNN이다.


Receptive Field


 수용영역이란 외부 자극이 전체 영향을 끼치는 것이 아니라 특정 영역에만 영향을 준다는 뜻이다. 손가락으로 몸의 여러 부분을 찔러 보았을 때 그것을 느낄 수 있는 범위가 제한적이라는 것을 생각하면 될 것이다. 그리고 어디를 찌르느냐에 따라 느끼는 영역의 크기가 다를 것이다.

 마찬가지로 영상에서 특정 위치에 있는 픽셀들은 그 주변에 있는 일부 픽셀들 하고만 correlation이 높고 거리가 멀어질수록 그 영향은 감소하게 된다. 이를 이용해 영상이나 이미지를 해석하여 "인식 알고리즘"을 수행하고자 할 경우 영상 전체 영역에 대해 서로 동일한 중요도를 부여하여 처리하는 대신에 특정 범위를 한정해 처리를 하면 훨씬 효과적일 것이라 짐작 할 수 있다. 이를 영상에만 한정하는 것이 아니라 locality를 갖는 모든 신호들에 유사하게 적용할 수있다는 아이디어에 기반하여 출현한 것이 CNN이다.

convolution이란?


 영상 처리 분야에서 convolution은 주로 filter 연산에 사용되며 영상으로부터 특정 feature들을 추출하기 위한 필터를 구현할 때 convolution을 사용한다. 즉 3 by 3 또는 그 이상의 window 혹은 mask를 영상 전체에 대해 반복적으로 수행을 하게 되면, 그 mask의 계수 값들의 따라 적정한 결과를 얻을 수 있다.

 아래 그림을 보면 왼쪽의 전체 이미지에서 노란 부분이 현재 convolution이 일어나고 있는 영역이며, 빨간 글자는 convolution의 kernel에 해당하고, 노란 영역의 mask에 대해 연산을 수행하면 결과는 오른쪽 처럼 4가 나오며 노란 윈도우 영역을 오른쪽으로 이동시켜 다시 결과를 구하면 3이 되며 계속 이동을 시키면서 연산을 하면 최종적인 결과를 얻을 수 있다.





CNN의 특징



CNN에서 Convoutional이 붙은 이유는 convolutional 신경망 연산을 한다는 뜻이며, CNN은 기존 multi-layered neural network에 비해 아래와 같은 중요한 특징을 갖는다


 Locality

 CNN은 수용영역과 유사하게 local 정보를 활용한다. 공간적으로 인접한 신호들에 대한 correlation관계를 비선형 필터를 적용하여 추출해 내는데 이러한 필터를 여러 개 적용하면 다양한 local 특징을 추출해 낼 수 있게 된다.

 Shared Weight

 동일한 계수를 갖는 filter를 영상 전체에 반복적으로 적용함으로서 변수의 수를 획기적으로 줄일 수 있으며, topology 변화에 무관한 항상성을 얻을 수 있게된다.



CNN의 구조


 CNN은 일반적으로 3종류의 계층을 가지고 있다.


  1. Convolution layer : Convolution feature를 추출하는 layer로 의미있는 특징들을 추출하기 위한 층이다.
  2. Pooling layer : 이미지의 특성상 많은 픽셀이 존재하기 때문에 feature를 줄이기 위해 subsampling을 하는 층이다.
  3. Feedforward layer : convolution layer와 pooling layer에서 나온 feature를 이용해서 분류를 하는 층이다.

 CNN 처리 과정은 단순하게 분류기로 구성 된 것이 아니라 특징을 추출하는 단계가 포함되어 있기 때문에, raw image에 대해 직접 operation이 가능하며, 기존 알고리즘과 달리 별도의 전처리 단계를 필요로하지 않는다. 특징 추출과 topology invariance를 얻기 위해 filter와 sub-sampling을 거치며 이 과정을 반복적으로 수행하여 local feature로부터 global 를 얻어낸다.

 대부분의 영상 인식 알고리즘에서는 특징을 추출하기 위해 filter를 사용한다. 보통 5 by 5 나 3 by 3 필터를 사용하는데 필터에 사용하는 계수들의 값에 따라 각각 다른 특징을 얻을 수 가 있다. 일반적으로 이 계수들은 특정 목적에 따라 고정이 되지만 CNN에서 사용하는 계수들은 학습을 통해 결정 된다는 점이 다르다.

 CNN에서는 max-pooling 방식의 sub-sampling 과정을 거친다. 간단히 설명하자면 각 window에서 가장 큰 자극만을 선택하는 것이다. 이 과정(convolution + sub-sampling) 과정을 여러변 거치게 되면 이미지 전체를 대표할 수 있는 global한 특징을 얻을 수 있게 된다. 이렇게 얻은 특징을 학습 시키면 topology 변화에 강인한 인식 능력을 갖게 된다.











댓글 1개:

  1. 내용 공부하려고 아래 링크에 퍼갔습니다. 감사합니다.
    http://blog.naver.com/danny602/221162086695

    답글삭제