CNN Basics 이해: Convolution과 Pooling은 무엇을 하는가
CNN은 "이미지 전체를 한 번에 보지 않고, 작은 창을 움직이며 지역 패턴을 찾는 모델"이라고 이해하면 된다.
이미지는 인접한 픽셀끼리 강하게 관련되어 있다. CNN은 이 구조를 이용해, 같은 필터를 여러 위치에 공유해서 적용함으로써 edge, texture, shape 같은 특징을 효율적으로 추출한다.
시각 자료로 먼저 보기
원본 / 라이선스 · Michael Plotke · CC BY-SA 3.0
원본 / 라이선스 · Aphex34 · CC BY-SA 4.0
1. Convolution 핵심 식
입력 이미지 위를 작은 필터 \(W\)가 슬라이딩하면서 위치마다 내적을 계산한다고 보면 된다. 이 연산 결과가 feature map이다.
2. 왜 convolution이 좋은가
- Local receptive field: 가까운 픽셀 관계를 먼저 본다.
- Weight sharing: 같은 필터를 전체 위치에 재사용하므로 파라미터 수가 줄어든다.
- Translation tolerance: 위치가 조금 달라도 비슷한 패턴을 감지할 수 있다.
3. Pooling은 무엇인가
Pooling은 feature map을 요약해서 공간 크기를 줄이는 연산이다. 가장 흔한 max pooling은 작은 영역의 최대값만 남긴다.
이렇게 하면 계산량이 줄고, 작은 위치 변화에 덜 민감해진다.
4. stride와 padding
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. 체크리스트
- 왜 weight sharing이 파라미터 효율을 높이는가?
- stride와 padding이 출력 shape에 어떤 영향을 주는가?
- CNN과 ViT의 inductive bias 차이를 설명할 수 있는가?