Artificial Intelligence Theory : 합성곱 신경망(Convolutional Neural Network)
이미지와 완전 연결 신경망
지금까지 다룬 신경망은 한 층의 모든 노드가 다음 층의 모든 노드와 연결된 완전 연결 신경망(Fully Connected Network)이었습니다. 입력이 몇 개의 숫자로 이루어진 표 형태의 데이터라면 이 구조로 충분합니다. 그러나 이미지를 입력으로 쓰려 하면 곧바로 문제가 드러납니다.
크기가 \(224 \times 224\)인 컬러 이미지는 픽셀마다 빨강, 초록, 파랑의 세 값을 가지므로 입력이 \(224 \times 224 \times 3 = 150{,}528\)개입니다. 이것을 노드 1,000개의 은닉층에 완전 연결하면, 첫 번째 층 하나에만 약 1억 5천만 개의 가중치가 필요합니다. 매개변수가 이렇게 많으면 학습에 막대한 데이터와 연산이 필요하고, 과대적합도 쉽게 일어납니다.
더 근본적인 문제는 완전 연결 신경망이 이미지의 구조를 무시한다는 점입니다. 이미지를 한 줄의 숫자로 펼치는 순간, 위아래로 붙어 있던 픽셀이 서로 멀리 떨어지고 이웃 관계가 사라집니다. 또한 고양이가 이미지의 왼쪽에 있을 때와 오른쪽에 있을 때가 완전히 다른 입력 노드로 들어오므로, 같은 고양이를 위치마다 따로 학습해야 합니다.
이미지에는 두 가지 중요한 성질이 있습니다. 첫째, 의미 있는 패턴은 가까운 픽셀들 사이에서 나타납니다. 가장자리나 모서리는 이웃한 몇 개의 픽셀만 보면 알 수 있습니다. 둘째, 같은 패턴은 이미지의 어느 위치에서나 같은 의미를 가집니다. 왼쪽 위의 세로 가장자리와 오른쪽 아래의 세로 가장자리는 같은 방식으로 찾을 수 있습니다. 합성곱 신경망(Convolutional Neural Network, CNN)은 이 두 성질을 구조에 직접 반영한 신경망입니다.
합성곱(Convolution)
합성곱 신경망의 핵심 연산은 합성곱(Convolution)입니다. 작은 크기의 가중치 행렬을 이미지 위에서 한 칸씩 미끄러뜨리면서, 겹치는 위치의 값끼리 곱해 모두 더합니다. 이 작은 가중치 행렬을 커널(Kernel) 또는 필터(Filter)라 하며, 합성곱의 결과로 만들어지는 새로운 2차원 배열을 특징 맵(Feature Map)이라 합니다.
다음과 같은 \(4 \times 4\) 입력에 \(3 \times 3\) 커널을 적용해 보겠습니다.
\[\text{입력} = \begin{bmatrix} 1 & 2 & 0 & 1 \\ 0 & 1 & 3 & 1 \\ 2 & 1 & 0 & 0 \\ 1 & 0 & 1 & 2 \end{bmatrix}, \qquad \text{커널} = \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \end{bmatrix}\]커널을 입력의 왼쪽 위에 겹치면, 왼쪽 열의 값 1, 0, 2에는 1이 곱해지고 오른쪽 열의 값 0, 3, 0에는 -1이 곱해지며 가운데 열은 0이 곱해집니다. 따라서 결과는 \((1 + 0 + 2) - (0 + 3 + 0) = 0\)입니다. 커널을 오른쪽으로 한 칸 옮기면 \((2 + 1 + 1) - (1 + 1 + 0) = 2\)가 되며, 같은 방식으로 아래 두 위치까지 계산하면 결과는 다음과 같습니다.
\[\text{특징 맵} = \begin{bmatrix} 0 & 2 \\ -1 & -1 \end{bmatrix}\]이 커널은 왼쪽이 밝고 오른쪽이 어두운 곳에서 큰 값을 냅니다. 즉, 세로 방향의 가장자리를 찾는 커널입니다. 컴퓨터 비전 이론에서 다룬 가장자리 검출 필터가 바로 이런 커널이며, 전통적인 영상 처리에서는 사람이 이 값을 직접 설계했습니다. 합성곱 신경망은 커널의 값을 가중치로 두고 학습합니다. 어떤 패턴을 찾아야 분류에 도움이 되는지를 데이터에서 스스로 배우는 것입니다.
- Tip : 수학에서 정의하는 합성곱은 커널을 뒤집은 뒤 곱하지만, 딥러닝에서는 뒤집지 않고 그대로 곱하는
교차 상관(Cross-Correlation)을 사용하면서도 관례적으로 합성곱이라 부릅니다. 커널의 값을 학습하므로, 뒤집힌 커널을 학습하면 결과가 같아 실질적인 차이가 없습니다.
합성곱의 두 가지 원리
합성곱은 앞에서 말한 이미지의 두 성질을 두 가지 원리로 구현합니다.
첫 번째는 지역 연결(Local Connectivity)입니다. 특징 맵의 값 하나는 입력 전체가 아니라 커널 크기만큼의 좁은 영역에만 연결됩니다. \(3 \times 3\) 커널이라면 입력의 9개 픽셀만 봅니다. 가까운 픽셀 사이의 패턴을 찾는다는 성질을 그대로 반영한 것입니다.
두 번째는 가중치 공유(Parameter Sharing)입니다. 커널 하나가 이미지의 모든 위치에서 같은 가중치로 사용됩니다. 왼쪽 위의 가장자리를 찾는 가중치와 오른쪽 아래의 가장자리를 찾는 가중치가 같습니다. 덕분에 매개변수의 수가 이미지 크기와 무관해지며, 한 위치에서 배운 패턴을 모든 위치에서 활용할 수 있습니다.
두 원리의 효과는 매개변수 수에서 극적으로 나타납니다. 컬러 이미지에 \(3 \times 3\) 커널 64개를 적용하는 합성곱 층의 매개변수는 커널마다 \(3 \times 3 \times 3 = 27\)개의 가중치와 편향 1개이므로, 모두 합쳐 \(64 \times 28 = 1{,}792\)개입니다. 같은 이미지를 완전 연결 층에 넣을 때의 1억 5천만 개와 비교하면 8만 분의 1 수준입니다.
가중치 공유는 또 하나의 중요한 성질을 낳습니다. 입력에서 물체가 오른쪽으로 두 칸 이동하면, 특징 맵에서도 그 반응이 오른쪽으로 두 칸 이동합니다. 이를 이동 등변성(Translation Equivariance)이라 합니다. 물체가 어디에 있든 같은 커널이 같은 방식으로 반응하므로, 위치마다 따로 학습할 필요가 없습니다.
패딩과 스트라이드
앞의 예에서 \(4 \times 4\) 입력은 합성곱 후 \(2 \times 2\)로 줄어들었습니다. 커널이 입력 밖으로 나갈 수 없으므로 가장자리에서 커널 크기만큼 크기가 줄어드는 것입니다. 층을 여러 번 쌓으면 특징 맵이 빠르게 작아지고, 가장자리 픽셀은 가운데 픽셀보다 적은 횟수만 계산에 참여하게 됩니다.
패딩(Padding)은 입력의 가장자리를 0과 같은 값으로 둘러싸 크기를 키운 뒤 합성곱을 적용하는 것입니다. \(3 \times 3\) 커널이라면 사방에 한 칸씩 패딩을 넣어 입력과 출력의 크기를 같게 만들 수 있습니다.
스트라이드(Stride)는 커널을 몇 칸씩 이동할지를 정합니다. 스트라이드가 1이면 한 칸씩, 2이면 두 칸씩 건너뛰며 계산하므로 출력의 가로세로가 약 절반이 됩니다. 연산량을 줄이고 특징 맵의 크기를 의도적으로 줄일 때 사용합니다.
입력 크기를 \(W\), 커널 크기를 \(K\), 패딩을 \(P\), 스트라이드를 \(S\)라 하면 출력의 크기는 다음과 같습니다.
\[\text{출력 크기} = \left\lfloor \frac{W - K + 2P}{S} \right\rfloor + 1\]\(224 \times 224\) 입력에 \(3 \times 3\) 커널, 패딩 1, 스트라이드 1을 적용하면 \((224 - 3 + 2) / 1 + 1 = 224\)로 크기가 유지됩니다. 스트라이드만 2로 바꾸면 \(\lfloor 223 / 2 \rfloor + 1 = 112\)로 절반이 됩니다.
채널(Channel)
컬러 이미지는 빨강, 초록, 파랑의 세 장의 2차원 배열로 이루어져 있으며, 이 각각을 채널(Channel)이라 합니다. 합성곱의 커널도 입력의 채널 수만큼 깊이를 가집니다. 컬러 이미지에 적용하는 \(3 \times 3\) 커널은 실제로는 \(3 \times 3 \times 3\) 크기이며, 세 채널의 결과를 모두 더해 하나의 특징 맵을 만듭니다.
한 층에는 보통 여러 개의 커널을 둡니다. 세로 가장자리를 찾는 커널, 가로 가장자리를 찾는 커널, 특정 색을 찾는 커널이 각각 하나의 특징 맵을 만들고, 이 특징 맵들이 쌓여 다음 층의 입력 채널이 됩니다. 커널이 64개라면 출력은 64채널이 됩니다. 입력 채널이 \(C_{\text{in}}\), 출력 채널이 \(C_{\text{out}}\), 커널 크기가 \(K \times K\)인 합성곱 층의 매개변수 수는 \(K \times K \times C_{\text{in}} \times C_{\text{out}} + C_{\text{out}}\)입니다.
1×1 합성곱(1×1 Convolution)은 이 원리를 활용한 특별한 경우입니다. 커널이 공간적으로는 한 픽셀만 보므로 이웃 관계는 보지 않지만, 채널 방향으로는 모든 값을 섞습니다. 256채널의 특징 맵에 \(1 \times 1\) 커널 64개를 적용하면 공간 크기는 그대로 두고 채널을 64개로 줄일 수 있어, 깊은 신경망에서 연산량을 줄이는 데 널리 쓰입니다.
풀링(Pooling)
풀링(Pooling)은 특징 맵을 작은 구역으로 나누고, 각 구역을 하나의 대표값으로 요약해 크기를 줄이는 연산입니다. 구역의 최댓값을 고르는 최대 풀링(Max Pooling)과 평균을 구하는 평균 풀링(Average Pooling)이 있으며, \(2 \times 2\) 구역에 스트라이드 2를 적용하면 가로세로가 절반이 됩니다.
최대 풀링은 “이 구역 어딘가에 해당 패턴이 있었는가”만 남기고, 정확히 어느 픽셀이었는지는 버립니다. 그래서 물체가 한두 픽셀 움직여도 결과가 거의 바뀌지 않는 작은 위치 변화에 대한 둔감함을 만들어 줍니다. 분류에서는 고양이의 귀가 정확히 어디 있는지보다 귀가 있다는 사실이 중요하므로 이 성질이 유리합니다. 풀링에는 학습할 가중치가 없다는 점도 특징입니다.
신경망의 마지막 부분에서는 각 채널의 특징 맵 전체를 평균해 채널마다 숫자 하나를 남기는 전역 평균 풀링(Global Average Pooling)을 자주 사용합니다. 특징 맵을 그대로 펼쳐 완전 연결 층에 넣는 것보다 매개변수가 훨씬 적고, 입력 이미지의 크기가 달라도 같은 길이의 벡터를 얻을 수 있습니다.
- Tip : 최근의 신경망은 풀링 대신 스트라이드가 2인 합성곱으로 크기를 줄이는 경우도 많습니다. 크기를 줄이는 방식까지 학습할 수 있기 때문입니다. 다만 분류 직전의 전역 평균 풀링은 여전히 널리 쓰입니다.
수용 영역과 계층적 특징
합성곱 층 하나는 \(3 \times 3\)처럼 좁은 영역만 봅니다. 그러나 층을 쌓으면 상황이 달라집니다. 두 번째 층의 값 하나는 첫 번째 층의 \(3 \times 3\) 영역을 보고, 그 각각은 다시 입력의 \(3 \times 3\) 영역을 보므로, 결국 입력의 \(5 \times 5\) 영역에 영향을 받습니다. 출력의 값 하나가 영향을 받는 입력 영역을 수용 영역(Receptive Field)이라 하며, \(3 \times 3\) 합성곱을 쌓을 때마다 가로세로로 2씩 넓어집니다. 풀링이나 스트라이드로 크기를 줄이면 수용 영역은 훨씬 빠르게 넓어집니다.
수용 영역이 넓어지면서 각 층이 찾는 패턴도 달라집니다. 학습된 합성곱 신경망을 들여다보면, 첫 층의 커널은 가장자리나 색의 변화 같은 단순한 패턴에 반응합니다. 중간 층은 이들을 조합해 모서리, 곡선, 반복되는 무늬 같은 질감과 부분에 반응하고, 깊은 층은 눈, 바퀴, 얼굴처럼 물체의 부분이나 전체에 반응합니다. 사람이 단계를 설계하지 않았는데도, 단순한 특징에서 복잡한 특징으로 올라가는 계층적 특징(Hierarchical Feature)이 학습을 통해 저절로 나타납니다.
큰 커널 하나보다 작은 커널 여러 개를 쌓는 것이 유리하다는 점도 여기서 나옵니다. \(3 \times 3\) 합성곱 두 층은 \(5 \times 5\) 합성곱 한 층과 같은 수용 영역을 가지지만, 매개변수는 채널 수의 제곱당 18개로 25개보다 적습니다. 세 층이면 \(7 \times 7\)과 같은 영역을 27개 대 49개로 다룹니다. 게다가 층 사이마다 활성화 함수가 들어가므로 더 복잡한 패턴을 표현할 수 있습니다.
대표적인 구조
합성곱 신경망의 발전은 대체로 더 깊게 쌓는 방법을 찾아온 과정입니다.
LeNet: 1998년 르쿤(Yann LeCun) 연구진이 손글씨 숫자 인식을 위해 발표했습니다. 합성곱과 풀링을 번갈아 쌓고 마지막에 완전 연결 층을 두는 기본 구조를 확립했으며, 실제로 수표의 숫자를 읽는 데 사용되었습니다.AlexNet: 2012년 크리젭스키(Alex Krizhevsky), 수츠케버(Ilya Sutskever), 힌턴(Geoffrey Hinton)이 발표했습니다. 대규모 이미지 분류 대회인 ImageNet에서 기존 방법보다 오류율을 크게 낮추며 딥러닝의 시대를 열었습니다. ReLU 활성화 함수, 드롭아웃, 두 개의 GPU를 활용한 학습이 핵심이었습니다.VGGNet: 2014년 옥스퍼드 대학교에서 발표했습니다. 모든 합성곱을 \(3 \times 3\)으로 통일하고 16~19층까지 쌓아, 작은 커널을 깊게 쌓는 것이 효과적임을 보였습니다.ResNet: 2015년 허카이밍(Kaiming He) 연구진이 발표했습니다. 층을 단순히 더 쌓으면 오히려 학습 오차가 커지는 문제를잔차 연결(Residual Connection)로 해결해, 152층까지 깊게 쌓는 데 성공했습니다.
잔차 연결은 층의 출력에 입력을 그대로 더하는 구조입니다. 층이 계산하는 함수를 \(F(x)\)라 하면 출력은 \(F(x) + x\)가 됩니다. 층이 할 일이 없다면 \(F(x) = 0\)만 학습하면 입력이 그대로 전달되므로, 층을 추가해도 성능이 나빠지지 않습니다. 또한 역전파할 때 더하기 경로를 따라 기울기가 줄어들지 않고 앞쪽 층까지 전달되므로, 가중치 초기화나 배치 정규화만으로는 어려웠던 매우 깊은 신경망의 학습이 가능해졌습니다. 잔차 연결은 이후 트랜스포머를 비롯한 거의 모든 깊은 신경망의 기본 요소가 되었습니다.
합성곱 신경망의 활용
합성곱 신경망은 이미지 분류에서 출발했지만, 특징을 추출하는 부분을 그대로 두고 마지막 부분만 바꾸면 다양한 과제에 적용할 수 있습니다. 물체의 위치를 상자로 찾는 객체 검출(Object Detection), 픽셀마다 범주를 정하는 이미지 분할, 얼굴 인식 등이 모두 합성곱 신경망으로 특징을 추출한 뒤 과제에 맞는 출력 층을 붙이는 방식으로 발전했습니다.
대량의 이미지로 미리 학습한 합성곱 신경망은 앞쪽 층에 가장자리와 질감 같은 범용적인 특징을 이미 학습하고 있습니다. 그래서 데이터가 적은 새 과제에서도 이 신경망을 출발점으로 삼아 마지막 몇 층만 다시 학습하면 좋은 성능을 얻을 수 있으며, 이를 전이 학습(Transfer Learning)이라 합니다.
합성곱은 이미지가 아닌 데이터에도 쓰입니다. 음성이나 센서 신호처럼 시간 축을 따라 이어지는 데이터에는 커널이 한 방향으로만 움직이는 1차원 합성곱을, 의료 영상의 CT처럼 부피가 있는 데이터에는 3차원 합성곱을 적용합니다. 가까운 값들 사이에 의미 있는 패턴이 있고 그 패턴이 위치와 무관하게 나타나는 데이터라면 어디든 합성곱이 효과적입니다.
- Tip : 최근에는 이미지를 작은 조각으로 나누어 트랜스포머로 처리하는
비전 트랜스포머(Vision Transformer)도 널리 쓰입니다. 데이터가 매우 많을 때는 합성곱 신경망과 비슷하거나 더 나은 성능을 내지만, 지역성과 가중치 공유라는 가정을 구조에 넣지 않으므로 데이터가 적을 때는 합성곱 신경망이 유리한 경우가 많습니다.
합성곱 신경망 정리
| 구성 요소 | 역할 | 학습 가중치 | 특징 |
|---|---|---|---|
| 합성곱 층 | 지역 패턴을 찾아 특징 맵 생성 | 있음 | 지역 연결과 가중치 공유 |
| 패딩 | 가장자리를 채워 크기 유지 | 없음 | 가장자리 정보 보존 |
| 스트라이드 | 커널 이동 간격 조절 | 없음 | 크기와 연산량 감소 |
| 1×1 합성곱 | 채널 방향으로 값을 섞음 | 있음 | 채널 수 조절, 연산량 감소 |
| 최대 풀링 | 구역의 최댓값으로 요약 | 없음 | 작은 위치 변화에 둔감 |
| 전역 평균 풀링 | 채널마다 평균 하나로 요약 | 없음 | 매개변수 감소, 입력 크기 무관 |
| 잔차 연결 | 입력을 출력에 더함 | 없음 | 매우 깊은 신경망의 학습 가능 |
합성곱 신경망은 데이터에 대한 가정을 구조에 담아 성공한 대표적인 사례입니다. 이미지의 패턴은 지역적이고 위치와 무관하다는 가정을 지역 연결과 가중치 공유로 구현함으로써, 완전 연결 신경망보다 훨씬 적은 매개변수로 훨씬 좋은 성능을 냈습니다.
이러한 가정을 귀납적 편향(Inductive Bias)이라 합니다. 데이터의 성질에 맞는 귀납적 편향은 적은 데이터로도 빠르게 학습하게 해 주지만, 가정이 맞지 않는 데이터에서는 오히려 제약이 됩니다. 신경망 구조를 고르는 일은 결국 데이터에 어떤 가정을 둘 것인가를 정하는 일입니다.
- Writer by : 윤대희
댓글 남기기