8  콘볼루션 연산

학습 목표
  • 커널(Kernel/Filter)의 개념과 역할을 이해한다
  • 콘볼루션 연산의 절차를 단계별로 직접 계산할 수 있다
  • 연산 결과인 특성 맵(Feature Map)의 의미를 설명할 수 있다
  • 커널 크기, 스트라이드, 패딩이 출력 크기에 미치는 영향을 계산할 수 있다
  • 3차원(컬러) 이미지에 대한 콘볼루션 연산을 이해한다
  • 여러 커널이 여러 특성 맵을 만드는 원리를 설명할 수 있다

8.1 콘볼루션이란?

8.1.1 왜 콘볼루션인가?

Ch05에서 완전연결 신경망의 두 가지 문제를 확인했다: 공간 정보 손실파라미터 폭발.

이 두 문제를 동시에 해결하는 연산이 콘볼루션(Convolution)이다. 핵심 아이디어는 이미지 전체를 한 번에 처리하는 대신, 작은 창(커널)으로 이미지를 훑으면서 국소적 패턴을 감지하는 것이다.

8.1.2 커널 (Kernel)

정의: 커널 (Kernel / Filter)

이미지 내에 존재하는 특정 패턴(특성)을 포착하기 위한 작은 행렬.

  • 크기는 보통 정사각형: \(k \times k\) (예: \(3 \times 3\), \(5 \times 5\))
  • 커널의 값(가중치)은 학습을 통해 결정된다
  • 하나의 커널은 하나의 특성을 감지한다

예를 들어, 다음은 \(3 \times 3\) 커널이다:

\[\mathbf{K} = \begin{bmatrix} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 1 \end{bmatrix}\]

이 커널은 이미지에서 대각선 패턴에 반응한다 — 대각 위치(1이 있는 곳)의 밝은 픽셀이 많을수록 큰 값을 출력한다.


8.2 콘볼루션 연산 과정

8.2.1 단계별 수행

콘볼루션은 커널을 이미지의 왼쪽 위부터 오른쪽 아래 방향으로 한 칸씩 이동하면서, 겹치는 영역의 원소별 곱의 합(element-wise product → sum)을 계산하는 연산이다.

인터랙티브 — 슬라이더로 커널 이동 단계를 확인해 보세요

5×5 이미지 위를 3×3 커널이 훑어가며 특성 맵을 만드는 과정을 단계별로 확인할 수 있습니다.

위 예시에서 9개 스텝이 완료되면 \(3 \times 3\) 특성 맵(Feature Map)이 만들어진다.

\[\text{Feature Map} = \begin{bmatrix} 4 & 3 & 4 \\ 2 & 4 & 3 \\ 2 & 3 & 4 \end{bmatrix}\]

8.2.2 특성 맵의 의미

정의: 특성 맵 (Feature Map)

이미지와 커널의 콘볼루션 연산 결과로 얻어진 2차원 행렬.

  • Feature Map의 값이 클수록, 해당 위치가 커널의 패턴과 잘 일치한다는 의미
  • 콘볼루션 결과를 또 하나의 이미지로 생각할 수 있다

커널이 다르면 포착하는 특성도 달라진다:

커널 종류 효과
선명화(Sharpen) 경계를 강조하여 이미지를 또렷하게
에지 검출(Edge Detect) 밝기가 급변하는 경계선만 추출
블러(Blur) 주변 픽셀의 평균으로 이미지를 부드럽게

8.2.3 손계산 예시 — 에지 검출 커널

“커널이 패턴을 감지한다”를 눈으로 확인해 보자. 왼쪽 절반은 밝고(\(10\)) 오른쪽 절반은 어두운(\(0\)) 이미지에, 세로 에지 검출 커널을 적용한다.

\[\text{이미지} = \begin{bmatrix} 10 & 10 & 0 & 0 & 0 \\ 10 & 10 & 0 & 0 & 0 \\ 10 & 10 & 0 & 0 & 0 \\ 10 & 10 & 0 & 0 & 0 \\ 10 & 10 & 0 & 0 & 0 \end{bmatrix}, \qquad \mathbf{K}_{\text{edge}} = \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \end{bmatrix} \quad\Longrightarrow\quad \text{특성 맵} = \begin{bmatrix} 30 & 30 & 0 \\ 30 & 30 & 0 \\ 30 & 30 & 0 \end{bmatrix}\]

맨 왼쪽 위 칸의 계산을 직접 따라가면 (패치의 각 열 값: \(10, 10, 0\)):

\[\underbrace{(10 \times 1 + 10 \times 0 + 0 \times (-1))}_{\text{1행}} + \underbrace{(\cdots)}_{\text{2행}} + \underbrace{(\cdots)}_{\text{3행}} = 10 \times 3 = 30\]

특성 맵을 읽어 보자. 값이 큰 곳(30)은 밝음→어두움의 경계가 지나가는 위치이고, 밝기가 균일한 오른쪽 영역(0)에서는 커널이 반응하지 않았다. “왼쪽은 밝고 오른쪽은 어두운 곳”이라는 패턴을 이 커널이 정확히 감지한 것이다.

핵심: 옛날 컴퓨터 비전에서는 이런 커널을 사람이 직접 설계했다. CNN의 혁신은 커널의 값을 학습 데이터로부터 자동으로 학습한다는 것이다 — 어떤 패턴이 유용한지를 데이터가 스스로 결정한다.

8.2.4 여러 커널 = 여러 특성

하나의 커널은 하나의 특성만 감지한다. 이미지에서 다양한 특성을 동시에 포착하려면, 여러 개의 커널을 같은 이미지에 적용한다.

\[\text{이미지} \overset{\text{커널}_1}{\longrightarrow} \text{특성 맵}_1, \quad \text{이미지} \overset{\text{커널}_2}{\longrightarrow} \text{특성 맵}_2, \quad \cdots\]

\(K\)개의 커널을 사용하면 \(K\)개의 특성 맵이 생성된다.


8.3 Ch05의 두 문제는 어떻게 풀렸나

이 장 첫머리에서 콘볼루션이 FC의 두 문제를 해결한다고 했다. 이제 확인할 수 있다.

8.3.1 문제 1 해결 — 가중치 공유 (Weight Sharing)

위의 단계별 인터랙티브를 다시 보자. 커널이 9번 이동하는 동안, 커널 안의 9개 값은 한 번도 바뀌지 않았다.

Ch05의 “같은 패턴, 다른 위치” 실험에서 FC는 패턴이 한 칸만 이동해도 전혀 다른 노드·가중치가 처음부터 다시 배워야 했다. 콘볼루션은 정반대다 — 같은 가중치(커널)가 모든 위치를 순회하므로, 왼쪽에서 학습한 패턴 감지기가 오른쪽에서도 그대로 작동한다. 패턴이 어디에 있든 같은 방법으로 찾는 것이다.

8.3.2 문제 2 해결 — 파라미터 절약

커널 하나의 파라미터 수는 커널 크기가 전부다: \(K \times K \times C + 1\) (가중치 + 편향 1개). Ch05에서 본 FC와 직접 비교해 보자 (입력: \(224 \times 224 \times 3\) 컬러 이미지).

방식 구성 첫 층의 파라미터 수
FC 입력 150,528 노드 → 은닉 256 노드 $150{,}528 + 256 = $ 약 3,850만 개
콘볼루션 \(3 \times 3 \times 3\) 커널 32개 $(3 + 1) = $ 896개

약 4만 배 차이다. 게다가 콘볼루션의 파라미터 수는 커널 크기와 개수로만 결정되므로, 이미지가 아무리 커져도 늘어나지 않는다.

커널 안의 각 값은 Ch02 퍼셉트론의 가중치 \(w\)와 완전히 같은, 학습되는 파라미터다. 콘볼루션은 “작은 영역만 보는 퍼셉트론 하나를 모든 위치에서 재사용하는 것”이라고 요약할 수 있다.


8.4 콘볼루션 파라미터

8.4.1 출력 크기 공식

콘볼루션의 출력(특성 맵) 크기는 세 가지 파라미터에 의해 결정된다.

\[\text{출력 크기} = \left\lfloor \frac{N - K + 2P}{S} \right\rfloor + 1\]

  • \(N\): 입력 이미지 크기
  • \(K\): 커널 크기
  • \(P\): 패딩 (Padding)
  • \(S\): 스트라이드 (Stride)

8.4.2 커널 크기 (Kernel Size)

커널이 패턴을 얼마나 넓은 영역에서 감지할 것인가를 결정한다.

5×5 이미지 커널 크기 특성 맵 크기
5×5 2×2 4×4
5×5 3×3 3×3
5×5 4×4 2×2

커널이 클수록 넓은 영역의 패턴을 감지하지만, 출력 크기는 줄어든다.

8.4.3 스트라이드 (Stride)

정의: 스트라이드 (Stride)

커널이 한 번에 몇 칸씩 이동하는지를 결정하는 수.

  • Stride = 1 → 한 픽셀씩 이동 (기본값)
  • Stride = 2 → 두 픽셀씩 이동 → 출력 크기가 절반으로 감소

8.4.4 패딩 (Padding)

정의: 패딩 (Padding)

이미지 테두리에 0(또는 다른 값)을 추가하여 크기를 확장하는 기법.

  • Padding = 1, Stride = 1, Kernel = 3이면 → 입력과 같은 크기의 특성 맵 출력
  • 패딩이 없으면 콘볼루션을 반복할수록 크기가 계속 줄어든다
인터랙티브 — 커널 크기, 스트라이드, 패딩을 조절하여 출력 크기를 확인하세요

8.5 3차원 이미지의 콘볼루션

8.5.1 컬러 이미지와 3D 커널

Ch05에서 컬러 이미지는 \(H \times W \times 3\) (RGB)임을 배웠다. 3차원 이미지에 콘볼루션을 적용하려면 커널도 3차원이어야 한다.

\[\text{이미지}: 5 \times 5 \times 3 \quad \overset{3 \times 3 \times 3 \text{ 커널}}{\longrightarrow} \quad \text{특성 맵}: 3 \times 3 \times \mathbf{1}\]

핵심: 커널의 채널 수 = 입력 이미지의 채널 수

5×5×3 이미지 3×3×3 커널 (1개) 3×3×1 특성 맵 커널이 K개이면 3×3×3, K개 → K개 특성 맵

연산 과정:

  1. R 채널: 이미지의 R 채널과 커널의 R 채널로 콘볼루션 → \(3 \times 3\) 결과
  2. G 채널: 이미지의 G 채널과 커널의 G 채널로 콘볼루션 → \(3 \times 3\) 결과
  3. B 채널: 이미지의 B 채널과 커널의 B 채널로 콘볼루션 → \(3 \times 3\) 결과
  4. 세 결과를 원소별로 합산 → 최종 \(3 \times 3 \times 1\) 특성 맵

핵심: 하나의 3D 커널은 하나의 2D 특성 맵을 만든다. \(K\)개의 커널을 사용하면 출력은 \(3 \times 3 \times K\)가 된다.

8.5.2 출력 채널 수 = 커널 개수

입력 커널 구성 출력
\(5 \times 5 \times 3\) \(3 \times 3 \times 3\) 커널 1개 \(3 \times 3 \times \mathbf{1}\)
\(5 \times 5 \times 3\) \(3 \times 3 \times 3\) 커널 2개 \(3 \times 3 \times \mathbf{2}\)
\(5 \times 5 \times 3\) \(3 \times 3 \times 3\) 커널 32개 \(3 \times 3 \times \mathbf{32}\)

이렇게 만들어진 출력은 다시 다음 콘볼루션 층의 입력이 된다. 이것이 CNN에서 층을 깊이 쌓을 수 있는 원리다.


8.6 정리

핵심 내용 요약
콘볼루션 커널을 이미지 위에서 훑으며 원소별 곱의 합을 계산하는 연산
커널 특정 패턴을 감지하는 작은 가중치 행렬 (학습으로 결정)
특성 맵 콘볼루션의 출력 — 값이 클수록 해당 패턴과 일치
출력 크기 \(\lfloor(N - K + 2P) / S\rfloor + 1\)
3D 콘볼루션 채널별로 콘볼루션 후 합산 → 1개 커널 = 1개 특성 맵

다음 장 예고: 콘볼루션 층에 활성화 함수, 풀링, 완전연결층을 결합하여 완전한 CNN(Convolutional Neural Network)을 구성하고, 대표적인 CNN 아키텍처들을 살펴본다.