합성곱 신경망을 정확하게 구현하려면 부분 데이터를 추출하는 과정에 좀 더 복잡한 단계가 필요하다. 더 자세히 설명하면 2×2 형태로 추출한 데이터를 어떤 값(필터, filter)으로 곱하고 특징적인 값을 찾아내는 과정이 필요하다. 이때 추출한 데이터를 필터와 곱할 때 합성곱 연산을 한다. 그래서 이 신경망 이름이 합성곱 신경망이다. 이러한 합성곱 연산을 사용하면 이미지의 어떤 (국소) 영역에 어떤 특징과 패턴이 있는지 알아낼 수 있다.
[예제] 합성곱(Convolution) 4×4 연산 (CNN 상세절차 포함)
[참고] 합성곱층 출력 크기 공식
합성곱 연산을 거친 뒤 만들어지는 특성 맵의 크기는 입력 크기, 필터 크기, 패딩, 스트라이드에 따라 정해지며, 다음 공식으로 계산할 수 있다.
\[ \text{출력 크기} = \dfrac{W - F + 2P}{S} + 1 \]
여기서 W는 입력 데이터(가로 또는 세로)의 크기, F는 필터(커널)의 크기, P는 패딩(padding)의 크기, S는 스트라이드(stride)이다.
예를 들어 입력 크기 W=7, 필터 크기 F=3, 패딩 P=0, 스트라이드 S=1이라면
\[ \dfrac{7-3+0}{1}+1 = 4+1 = 5 \]
가 되어, 7×7 입력에 3×3 필터를 패딩 없이 스트라이드 1로 적용하면 5×5 크기의 특성 맵이 만들어진다. 만약 패딩 P=1을 적용한다면
\[ \dfrac{7-3+2}{1}+1 = 6+1 = 7 \]
이 되어 입력과 동일한 7×7 크기의 특성 맵을 유지할 수 있다. 이처럼 패딩은 합성곱 연산을 거치면서 특성 맵의 크기가 점점 줄어드는 것을 막아 주는 역할을 한다. (참고로 앞서 살펴본 풀링층의 출력 크기 공식은 패딩을 사용하지 않는 경우가 많아 $P=0$을 대입한 형태로 쓰인다.)
[예제] 최대 풀링(Max Pooling) 연산
최대 풀링(Max Pooling)은 필터(윈도우) 영역 안에서 가장 큰 값 하나만 골라 다음 층으로 전달하는 연산이다. 예를 들어 아래와 같이 5×5 크기의 특징 맵(feature map)에 필터(filter) 크기 2×2, 보폭(stride) 1, 패딩(padding) 없음 조건으로 최대 풀링을 적용한다고 하자.
필터(2×2 윈도우)를 보폭(stride) 1칸씩 이동시키면서, 각 윈도우 안의 값들 중 최댓값만을 뽑아 출력값으로 삼는다. 예를 들어 그림에서 (가) 위치에 해당하는 2×2 윈도우의 값이 다음과 같다고 하자.
\[ \begin{pmatrix} 4 & 6 \\ 4 & 7 \end{pmatrix} \]
이 4개의 값(4, 6, 4, 7) 중 최댓값은 6이므로, (가) 위치의 출력값은 6이 된다. 이처럼 필터 크기가 2×2, 보폭이 1이면, $n \times n$ 크기의 입력 특징 맵은 최대 풀링을 거쳐 $(n-1) \times (n-1)$ 크기로 축소된다.
[참고] Flatten과 전역 평균 풀링(Global Average Pooling, GAP)
합성곱층과 풀링층을 거치면 특성 맵은 높이 × 너비 × 채널 형태의 3차원 데이터로 남아 있다. 이 데이터를 완전연결층에 입력하려면 1차원 벡터로 바꾸어 주는 과정이 필요한데, 이때 대표적으로 사용하는 방법이 Flatten과 전역 평균 풀링(Global Average Pooling, GAP)이다.
정리하면, Flatten은 정보를 거의 그대로 유지하는 대신 파라미터 수가 많아지고, GAP는 정보를 압축하는 대신 파라미터 수를 크게 줄여 과적합을 억제한다. 이러한 이유로 최근의 CNN 구조(예: ResNet, MobileNet 등)에서는 완전연결층 앞에 Flatten 대신 GAP를 사용하는 경우가 많다.
Q. CNN의 풀링(pooling) 연산에 대한 설명으로 옳지 않은 것은?
정답 ④ 합성곱 신경망
해설
CNN의 풀링층에 대한 설명을 하나씩 확인해 보자.
① 풀링층은 특징 맵의 공간적 크기를 줄여 이후 층의 연산량과 파라미터 수를 감소시킨다는 설명으로, 옳다.
② 최대 풀링은 영역 내 최댓값을, 평균 풀링은 영역 내 평균값을 대표값으로 취한다는 설명으로, 옳다.
③ 전역 평균 풀링은 채널별 특징 맵 전체를 하나의 값으로 축약하여, Flatten과 완전연결층을 사용하는 방식보다 파라미터 수를 크게 줄이고 과적합 위험을 낮추는 데 도움이 된다는 설명으로, 옳다.
④ 출력 크기 공식 \( \left( \dfrac{W-F}{S} \right) + 1 \)에 \( W=8,\ F=2,\ S=1 \)을 대입하면 \[ \dfrac{8-2}{1} + 1 = 6 + 1 = 7 \] 이 되어, 출력은 7×7이다. 4×4가 되려면 스트라이드가 2여야 한다. "스트라이드 1인 2×2 최대 풀링의 출력이 4×4가 된다"는 설명은 옳지 않다.
따라서 옳지 않은 것은 ④이다.
지금까지 배운 CNN을 정리하면 다음과 같다. 일반적인 인공신경망 모델은 완전연결층으로 이루어져 있다.
문제는 완전연결층 특성상 1차원 데이터만 입력으로 받는다는 것이다. 컬러 사진 데이터는 3차원 데이터이므로, 3차원 데이터를 완전연결층으로 구성된 신경망으로 학습시키려면 3차원의 데이터를 1차원으로 평면화시켜야 한다. 이때 이미지에 대한 공간 정보가 유실되어 특징을 잘 추출하지 못하면 학습에 비효율적일 수 있는데, CNN은 이러한 문제를 해결할 수 있는 모델이다.