Conv Layer

인간은 이미지를 보고 즉각적으로 고양이, 자동차, 사람의 얼굴을 인식한다.
그렇다면 기계는 어떻게 이미지 속의 복잡한 패턴과 객체를 보고 이해할 수 있을까?
이 질문의 핵심에 바로 합성곱 신경망(Convolutional Neural Network, CNN)과 그 심장부인 합성곱(Convolutional) 레이어가 있다.

수많은 픽셀의 집합인 이미지를 처리하는 데 특화된 Conv 레이어는, 데이터로부터 직접 특징(feature)을 학습하여 이미지를 효과적으로 분석하는 강력한 도구이다.

정의

Conv 레이어는 입력된 이미지 데이터에 필터(Filter) 또는 커널(Kernel)이라 불리는 작은 행렬을 순차적으로 적용하여 이미지의 특징을 추출하는 연산을 수행한다.
마치 돋보기를 들고 이미지를 구석구석 훑으며 특정 무늬를 찾아내는 것과 같다. 이 과정을 통해 생성된 결과를 특징 맵(Feature Map)이라고 부른다.

결론적으로 Conv 레이어의 역할은 원본 이미지로부터 윤곽선, 질감, 색상 패턴과 같은 저수준 특징(low-level feature)부터 눈, 코, 입과 같은 고수준 특징(high-level feature)까지 점진적으로 추출하는 것이다.

3. Conv 레이어의 작동 원리와 수학적 정의

Conv 레이어가 일반 신경망보다 이미지 처리에 효과적인 이유는 필터를 이용한 독특한 연산 방식에 있다.

합성곱 연산의 수식

합성곱 연산은 수학적으로 필터(커널)를 입력 이미지의 특정 영역 위에 올리고, 대응하는 원소끼리 곱한 뒤 모두 더하는 Element-wise product 후 Sum 과정이다.
이를 수식으로 표현하면 다음과 같다.

\[O(i, j) = (I * K)(i, j) = \sum_{m=0}^{k_h-1} \sum_{n=0}^{k_w-1} I(i+m, j+n) \cdot K(m, n)\]
  • $O(i, j)$: 출력 특징 맵(Feature Map)의 $(i, j)$ 위치의 값.
  • $I$: 입력 이미지 또는 이전 레이어로부터의 입력 특징 맵.
  • $K$: 커널(Kernel) 또는 필터. 이 커널의 값들이 학습되는 가중치(weight)이다.
  • $k_h, k_w$: 커널의 높이(height)와 너비(width).
  • $\sum$: 합산 기호. 모든 원소의 곱셈 결과를 더하는 것을 의미한다.
  • $I(i+m, j+n)$: 입력 맵에서 커널과 겹쳐지는 부분의 값.
  • $K(m, n)$: 커널의 $(m, n)$ 위치의 값.

간단히 말해, 이 수식은 커널을 이미지의 $(i, j)$ 위치부터 겹쳐놓고, 모든 겹치는 픽셀 값과 커널 가중치를 곱해서 더한 값이 바로 출력 맵의 한 픽셀 값 $O(i, j)$가 된다는 것을 의미한다.

연산 과정의 증명 (예시)

수식만으로는 직관적으로 와닿지 않을 수 있다.
다음은 간단한 예시를 통해 연산 과정을 증명하는 과정이다.

입력 이미지(I)가 4x4이고, 커널(K)이 3x3이라고 가정하자. (Stride=1, Padding=0)

\[I = \begin{pmatrix} 1 & 2 & 3 & 0 \\ 4 & 5 & 6 & 1 \\ 7 & 8 & 9 & 2 \\ 1 & 0 & 1 & 3 \end{pmatrix} \quad K = \begin{pmatrix} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 1 \end{pmatrix}\]

1. 출력 특징 맵의 첫 번째 값, O(0, 0) 계산:
입력 이미지의 좌측 상단 3x3 영역과 커널을 연산한다.

\(\text{영역} * K = \begin{pmatrix} \mathbf{1} & \mathbf{2} & \mathbf{3} \\ \mathbf{4} & \mathbf{5} & \mathbf{6} \\ \mathbf{7} & \mathbf{8} & \mathbf{9} \end{pmatrix} * \begin{pmatrix} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 1 \end{pmatrix}\) \(= (1\cdot1) + (2\cdot0) + (3\cdot1) + (4\cdot0) + (5\cdot1) + (6\cdot0) + (7\cdot1) + (8\cdot0) + (9\cdot1)\) \(= 1 + 0 + 3 + 0 + 5 + 0 + 7 + 0 + 9 = \mathbf{25}\) 따라서, $O(0, 0) = 25$ 이다.

2. 출력 특징 맵의 다음 값, O(0, 1) 계산:
커널을 오른쪽으로 한 칸(Stride=1) 이동하여 동일한 연산을 반복한다.
\(\text{영역} * K = \begin{pmatrix} \mathbf{2} & \mathbf{3} & \mathbf{0} \\ \mathbf{5} & \mathbf{6} & \mathbf{1} \\ \mathbf{8} & \mathbf{9} & \mathbf{2} \end{pmatrix} * \begin{pmatrix} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 1 \end{pmatrix}\) \(= (2\cdot1) + (3\cdot0) + (0\cdot1) + (5\cdot0) + (6\cdot1) + (1\cdot0) + (8\cdot1) + (9\cdot0) + (2\cdot1)\) \(= 2 + 0 + 0 + 0 + 6 + 0 + 8 + 0 + 2 = \mathbf{18}\) 따라서, $O(0, 1) = 18$ 이다. 이 과정을 모든 영역에 대해 반복하면 최종 특징 맵 $O$를 얻는다.

스트라이드, 패딩과 출력 크기 계산

스트라이드(Stride)와 패딩(Padding)은 출력 특징 맵의 크기를 결정하는 중요한 하이퍼파라미터이다.
출력 크기는 다음 공식으로 계산할 수 있다.

\[O_{size} = \frac{I_{size} - K_{size} + 2P}{S} + 1\]
  • $O_{size}$: 출력 특징 맵의 크기 (너비 또는 높이).
  • $I_{size}$: 입력 이미지의 크기.
  • $K_{size}$: 커널의 크기.
  • $P$: 패딩(Padding)의 크기. (예: $P=1$이면 이미지 가장자리에 1픽셀 두께의 0이 채워짐)
  • $S$: 스트라이드(Stride)의 크기.

예를 들어, 224x224 크기의 이미지($I_{size}=224$)에 3x3 커널($K_{size}=3$)을 Stride 1($S=1$), Padding 1($P=1$)로 적용하면, 출력 크기는 다음과 같다.
\(O_{size} = \frac{224 - 3 + 2(1)}{1} + 1 = 224\) 출력 크기는 입력과 동일한 224x224가 된다. 이처럼 패딩은 주로 출력 크기를 조절하거나 입력과 같게 유지하기 위해 사용된다.

CNN에서의 역할: 공간적 계층 구조의 학습

Conv 레이어의 진정한 힘은 여러 층으로 쌓였을 때 나타난다.
CNN은 얕은 층과 깊은 층이 각각 다른 역할을 수행하는 계층적 특징 학습(Hierarchical Feature Learning) 구조를 가진다.

얕은 층 (Shallow Layers) : 초기 Conv 레이어들은 주로 이미지의 원초적인 특징을 학습한다. 예를 들어, 수평선, 수직선, 대각선과 같은 간단한 윤곽선(Edge)이나 특정 색상(Color) 패턴을 감지한다.

깊은 층 (Deep Layers) : 뒤따르는 Conv 레이어들은 이전 층에서 추출된 간단한 특징들을 조합하여 더 복잡하고 추상적인 특징을 학습한다. 윤곽선들이 모여 눈이나 코의 형태를 이루고, 이러한 형태들이 다시 모여 사람의 얼굴 전체를 인식하게 된다.

이러한 구조 덕분에 CNN은 이미지의 공간적 위계(Spatial Hierarchy)를 효과적으로 학습할 수 있으며, 객체의 위치가 조금 변하더라도 동일한 객체로 인식하는 능력을 갖추게 된다.

결론

Conv 레이어는 이미지 인식을 위한 CNN의 핵심 구성 요소이다.
수학적으로 정의된 합성곱 연산을 통해 이미지의 특징을 추출하고, 파라미터 공유를 통해 학습 효율성을 극대화하며, 여러 층을 쌓아 공간적 계층 구조를 학습한다.
이러한 특성 덕분에 Conv 레이어는 오늘날 컴퓨터 비전 분야에서 객체 탐지, 이미지 분할 등 수많은 태스크를 해결하는 데 없어서는 안 될 표준적인 기술로 자리 잡고 있다.