1. 개요

심층 신경망의 등장은 복잡한 비선형 모델의 구현이 가능해졌다는 점과 함께 계층적인 지식을 체계적으로 처리할 수 있게 됐다는 점에서 큰 의의가 있습니다.

컨벌루션 신경망 Convolutional neural network (이하 컨브넷)은 영상 인식에 특화된 심층 신경망입니다. 정보(영상)을 계층적으로 깊게 처리했을 때 얼마나 대단한 성능 개선이 가능한 지를 보여주는 대표적인 사례입니다. 컨브넷은 1980~90년대에 개발된 오래된 기술이지만, 지금은 컴퓨터 비전 분야에서 빼놓을 수 없을 정도로 많이 쓰입니다.


2. 컨브넷의 구조

컨브넷은 단순히 은닉 계층을 추가해 깊게 만든 신경망이 아닙니다. 컨브넷은 뇌의 시각피질이 이미지를 처리하고 인식하는 원리를 차용한 신경망입니다.

기본적으로 영상 인식은 분류 문제에 해당됩니다. 예를 들어 사진을 보고 고양이인지 개인지 인식해내는 문제는 해당 사진을 개와 고양이 중 어느 범주로 분류할 지와 같은 문제입니다. 글자를 인식하는 문제도 마찬가지입니다. 이러한 이유로 영상 인식에 사용되는 컨브넷의 출력층은 다범주 분류 신경망으로 구성하는 게 일반적입니다.

그동안은 특징 추출기를 주로 해당 분야의 전문가가 수작업으로 설계했기 때문에, 비용과 시간이 많이 들고 성능이 들쭉날쭉한 문제가 있었습니다. 즉 특징 추출기의 설계는 머신러닝과 별개로 진행되었습니다.

컨브넷은 이러한 특징 추출기를 수작업으로 설계하지 않고 신경망의 학습 과정에 포함시켜 일괄 처리합니다. 구체적으로 컨브넷에는 특수한 형태의 신경망으로 구성된 특징 추출기가 포함되어 있는데, 이 신경망의 가중치도 학습을 통해 결정됩니다. 이렇게 사람이 직접 설계하던 특징 추출 작업을 자동화시킨 점이 컨브넷의 가장 큰 특징이자 강점입니다.

컨브넷은 특징 추출 신경망이 깊을수록(층을 더 많이 쌓을수록) 대체로 영상 인식 성능도 더 좋아진다고 합니다. 대신 그만큼 신경망의 계층 구조가 깊기 때문에 학습시키기가 어렵습니다. 실용성이 없다는 이유로 컨브넷이 오랫동안 잊혀졌던 이유이기도 합니다.

좀 더 구체적으로 살펴보면, 컨브넷은 입력 이미지의 특징을 추출하는 신경망특정 이미지를 입력 받아 분류를 판별하는 신경망 으로 구성되어 있습니다.

conv-nn

입력된 원본 이미지는 앞쪽의 특징 추출 신경망을 먼저 통과합니다. 여기서 추출된 이미지의 특징 신호는 뒤쪽의 분류 신경망에 다시 입력됩니다. 분류 신경망은 이미지의 특징을 토대로 이미지의 최동 범주를 분류해 출력합니다.

컨브넷의 특징 추출 신경망은 컨벌루션 계층 convolutional layer 과 풀링 계층을 차례로 쌓은 형태로 되어 있습니다. 컨벌루션 계층은 이름 그대로 컨벌루션 연산을 통해 입력 이미지를 변환하는 역할 을 합니다. 일종의 디지털 필터들을 모아 놓은 계층이라고 이해하면 됩니다. 풀링 계층은 주위의 픽셀을 묶어서 하나의 대표 픽셀로 바꿉니다. 즉 풀링 계층은 이미지의 차원을 축소하는 역할을 합니다. 한편 컨브넷은 주로 이미지를 대상으로 하기 때문에 컨벌루션과 풀링 계층의 연산이 개념적으로 2차원상에서 이루어집니다. 컨브넷이 기존의 신경망과 다른 점 중의 하나입니다.

요약해보겠습니다. 컨브넷은 특징 추출 신경망과 분류 신경망을 직렬로 연결한 구조로 되어 있습니다. 학습 과정을 통해 분류 신경망뿐만 아니라 특징 추출 신경망의 가중치들도 학습됩니다. 특징 추출 신경망은 컨벌루션 계층과 풀링 계층을 연달아 여러 층으로 쌓은 형태로 되어있습니다. 컨벌루션 계층은 컨벌루션 연산을 통해 이미지를 변환하고 풀링 계층은 이미지의 차원을 줄이는 역할을 합니다. 분류 신경망으로는 대개 일반적인 구조의 다범주 분류 신경망이 사용됩니다.


3. 컨벌루션 계층

컨벌루션 계층은 입력 이미지에서 고유한 특징을 부각시킨 이미지를 새로 만들어내는 역할 을 합니다. 이러한 이미지를 ‘특징 맵(feature map)’이라고 부릅니다. 컨벌루션 계층은 일반적인 신경망의 계층과는 구조와 작동 방식이 많이 다릅니다. 이 계층의 노드들은 연결 가중치와 가중합 등 신경망의 일반적인 개념을 사용하지 않습니다. 대신 입력 이미지를 다른 이미지로 변환하는 필터들이 들어 있습니다. 여기서는 이 필터를 ‘컨벌루션 필터’라고 부르겠습니다. 컨벌루션 필터로 입력 이미지를 처리하면 특징 맵을 얻을 수 있습니다.

그럼 컨벌루션 필터에 관해 구체적으로 알아보겠습니다. 컨벌루션 계층에서 쓰이는 필터의 정체는 2차원 행렬입니다. 보통 5x5 행렬이나 3x3 행렬이 주로 쓰이는데 요즘엔 1x1 행렬로 된 컨벌루션 필터를 사용하는 경우도 있습니다. 앞 절에서 이미 설명했듯이 컨브넷에서 필터 행렬의 값은 신경망의 학습 과정을 통해 결정됩니다. 즉 이 필터 행렬의 값은 학습을 통해 계속 바뀝니다. 일반 신경망에서 학습을 통해 노드의 연결 가중치를 갱신하는 것과 비슷합니다.

컨벌루션 연산은 2차원 상에서 이뤄지는 연산이라 글로 설명하기는 어렵지만, 개념과 계산 과정은 생각보다 간단합니다. 다음 그림은 컨벌루션 계층이 어떤 식으로 작동하는지 보여주고 있습니다.

conv-layer

컨벌루션 계층은 입력 이미지와 컨벌루션 필터를 연산해 특징 맵을 얻어 냅니다. 컨벌루션 계층에서 추출할 특징은 컨벌루션 필터에 학습되어 있습니다. 즉 어떤 컨벌루션 필터를 사용하느냐에 따라 컨벌루션 계층에서 추출해내는 특징이 결정됩니다.

컨벌루션 필터로 처리된 특징 맵은 활성함수를 거쳐 최종 출력됩니다. 컨벌루션 계층의 활성함수는 기존 신경망에서 사용되는 활성함수와 다르지 않습니다. 요즘엔 ReLU 함수가 많이 사용되지만, 시그모이드 함수나 tanh 함수를 쓰는 경우도 있습니다.


4. 풀링 계층

풀링 계층은 이미지의 크기를 줄이는 역할을 합니다. 구체적으로 풀링 계층은 입력 이미지에서 특정 영역에 있는 픽셀들을 묶어서 하나의 대표 값으로 축소 합니다. 풀링은 기존의 이미지 처리에서도 많이 쓰이는 전형적인 기법입니다.

풀링 계층의 연산을 위해서는 입력 이미지에서 풀링할 픽셀을 어떻게 선택할 지와 이 픽셀의 대표값을 어떻게 결정할 것인지를 정해야 합니다. 픽셀들을 몇 개씩 묶을 지는 다루는 문제에 따라 다른데, 보통은 정방 행렬 square matrix 행태로 픽셀들을 선택합니다. 선택한 픽셀들로부터 하나의 대표 값을 계산하는 연산으로는 보통 평균값이나 최대값을 많이 사용합니다.

pooling-layer

사실 수학적으로 풀링은 일종의 컨벌루션 연산입니다. 컨벌루션 계층과 달리 컨벌루션 필터가 고정되어 있고, 이 필터와 원본 이미지를 컨벌루션하는 영역이 겹치지 않는다는 정도만 다릅니다.

풀링 계층은 입력 이미지에서 인식 대상이 한 쪽으로 치우쳐 있거나 돌아가 있어도 어느 정도 보상해주는 역할을 합니다. 예를 들어 고양이가 중앙에서 벗어나 있는 사진을 입력해도 풀링 게층에서 치우침을 어느 정도 보상하기 때문에 제대로 인식하는 데 도움이 됩니다. 또한 풀링 계층은 이미지의 크기를 줄여 주어, 계산량을 줄이고 과적합을 방지하는 데도 도움이 됩니다.


Reference

Deep Learning for Beginners