CNN (1) | CNN의 개요 | 패스트캠퍼스챌린지 30일차
CNN은 주로 이미지를 처리하는데 사용하는 딥러닝 네트워크의 한 종류이다. (물론 CNN을 통해 자연어처리를 할 수 있다. 이는 특히 띄어쓰기나 형태 분석과 같이 토큰 시퀀스의 패턴을 인식하는데 사용된다. Kakao의 형태소분석기--문장을 형태소단위로 분절하고 품사를 결정한다--인 khaiii는 CNN만을 사용하였고, CNN과 RNN의 한 종류인 GRU를 결합한 띄어쓰기 모델도 개발되어 있다.) 딥러닝이 이미지 분석에 큰 강점을 띌 수 있다는 점은 뇌가 시각 신호를 처리하는 과정이 딥러닝과 마찬가지로 계층적이라는 것에서--즉 단순한 feature로 부터 복잡한 feature를 뽑아 이를 매핑해 결과를 내보낸다라는 점에서-- 기대되었다. 물론 CNN이 인간 시각 정보 처리와 완전히 일치하지는 않는다. 대표적으로 이미지크기의 경우 일반적인 CNN은 정해진 픽셀값으로 고정되어 있으나, 우리는 정해진 픽셀값에 구애받지 않고 이미지를 인식한다.
Convolution layer의 개념은 Neocognitron에서 주장되었다. 다음에 LeNet이 여기에 backpropagation을 덧붙여 머신러닝의 영역으로 불러왔고, 이후 AlexNet에서 이를 깊게 쌓아 딥러닝의 영역으로 불러왔다.
CNN은 convolution layer와 pooling layer, 그리고 fully-connected layer(dense layer, multi-layer perceptron)으로 구성된다. Convolution layer는 국소적으로 연결되어 있고, 파라미터를 공유한다는 특징을 가지고 있다. 즉, 하나의 인공 뉴런이 이미지 전체로부터 입력을 받는 대신 근처의 이미지로부터만 입력을 받으며, 비슷하다고 판단되는 부분에 대해서는 파라미터 공유를 통해 효율성을 높인다. Convolution이라는 개념 자체는 filter(딥러닝에 있어서는 흔히 kernel이라고도 부른다)가 이미지 입력 전체에 순차적으로 적용된다는 뜻이다.
애독하는 블로그인 Towards Data Science에서 제시한 이런 gif를 보면 쉽게 이해가 될 것이다. 여기서는 3x3 커널이 5x5 이미지에 순차적으로 적용되었다. 이러한 Convolution layer에는 stride, filter size, dilation rate, padding 등의 파라미터가 적용된다. Stride는 필터가 몇 칸 씩 띄워 가며 적용될 것인가를 결정한다. Dilation rate는 필터 사이의 간격이다. Padding은 입력 이미지 주변을 0 등의 정해진 상수로 채워 감싸는(padding) 방식이다.
개념상 1x1 convolution은 아무것도 안 할 것 같지만, 자주 사용된다. 이는 이러한 layer가 채널 수를 줄일 수 있기 떄문이다. 채널은 이미지의 색상 등을 표현하는 장치인데, 채널 수가 줄어든다는 것은 layer가 추가됨에도 불구하고 파라미터의 수를 줄일 수 있다는 뜻이 된다. 결과적으로는 채널을 좁히고 넓혀 bottleneck 효과를 볼 수 있다.
다음은 pooling layer이다. 이는 차원을 감소시키는 역할을 한다. 차원이 감소하니 파라미터는 줄어들고, 이에 따라 과적합도 줄어드는 반면 효율성은 늘어난다. Padding은 convolution 결과의 일부나 전체에 대해 최댓값/최솟값만을 취하거나, 평균을 취하는 등으로 이루어진다. 다만, 최근에는 pooling이 이미지의 맥락이라고 할 수 있는 정보를 뭉개버린다는 지적이 나오고 있어서, capsulenet과 같은 대안이 제안되고 있다.
이러한 결과는 익히 봐 왔던 fully-connected layer를 통해 변환된다. 이미지 분류 문제라면 분류하는 클래스 수에 따라 softmax 등을 취해 확률로 변환할 것이다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다. https://bit.ly/37BpXiC