CNN Basics 이해: Convolution과 Pooling은 무엇을 하는가

난이도: 중급

태그: foundations,cnn,convolution,pooling

CNN은 "이미지 전체를 한 번에 보지 않고, 작은 창을 움직이며 지역 패턴을 찾는 모델"이라고 이해하면 된다.

이미지는 인접한 픽셀끼리 강하게 관련되어 있다. CNN은 이 구조를 이용해, 같은 필터를 여러 위치에 공유해서 적용함으로써 edge, texture, shape 같은 특징을 효율적으로 추출한다.

시각 자료로 먼저 보기

2차원 이미지와 커널의 convolution 애니메이션
입력 이미지 위를 커널이 이동하면서 출력 feature map이 만들어지는 과정을 보여주는 2D convolution 애니메이션이다.
원본 / 라이선스 · Michael Plotke · CC BY-SA 3.0
2x2 max pooling 예시
2x2 max pooling이 입력 영역에서 가장 큰 값만 남겨 해상도를 줄이는 방식을 한 번에 보여준다.
원본 / 라이선스 · Aphex34 · CC BY-SA 4.0

1. Convolution 핵심 식

yi,j=u,vWu,vxi+u,j+v

입력 이미지 위를 작은 필터 \(W\)가 슬라이딩하면서 위치마다 내적을 계산한다고 보면 된다. 이 연산 결과가 feature map이다.

2. 왜 convolution이 좋은가

3. Pooling은 무엇인가

Pooling은 feature map을 요약해서 공간 크기를 줄이는 연산이다. 가장 흔한 max pooling은 작은 영역의 최대값만 남긴다.

yi,j=max(u,v)i,jxu,v

이렇게 하면 계산량이 줄고, 작은 위치 변화에 덜 민감해진다.

4. stride와 padding

이 둘을 이해해야 출력 feature map shape를 정확히 추적할 수 있다.

5. CNN과 ViT의 차이

CNN은 지역성(locality)과 가중치 공유라는 강한 inductive bias를 갖는다. 반면 ViT는 더 일반적인 attention 구조를 쓰지만, 데이터가 적을 때는 CNN의 귀납 bias가 장점이 될 수 있다.

6. 코드와 연결

import torch.nn as nn

model = nn.Sequential(
    nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1),
    nn.ReLU(),
    nn.MaxPool2d(kernel_size=2)
)

Conv2d가 패턴을 뽑고, MaxPool2d가 공간 크기를 줄인다.

7. 체크리스트