합성곱(Convolution) — 작은 필터로 패턴 감지
합성곱의 핵심 직관: "작은 필터를 이미지 위에서 미끄러뜨리며 적용한다".
📖 필터(Filter / Kernel)란
3x3, 5x5 같은 작은 가중치 행렬. 학습으로 정해짐. 한 필터가 한 가지 "패턴 감지기" 역할.
예 — 세로 모서리 감지 필터 3x3:
-1 0 +1
-1 0 +1
-1 0 +1
이 필터를 이미지 위 어떤 위치 (i, j)에 두고:
- 필터의 -1, 0, +1을 그 위치의 픽셀 값과 곱해서 모두 합
- 결과가 큼 = 오른쪽이 밝고 왼쪽이 어둠 → 세로 모서리 감지
🎯 합성곱 결과 (Feature Map)
필터를 이미지 모든 위치에 적용 → 새 이미지 (Feature Map).
입력 19x19 + 3x3 필터 → 출력 17x17 (가장자리 효과). 또는 padding 처리해서 19x19 유지.
이 Feature Map의 값은 "각 위치에서 그 필터의 패턴이 얼마나 강한가"의 점수.
💡 가중치 공유의 의미
같은 3x3 필터를 모든 위치에 적용. 만약 보드 (3,3)에서 사다리 모양이 있고 (15,15)에서도 같은 사다리 모양이 있다면:
- MLP: 각 위치마다 다른 가중치 학습해야 함
- CNN: 같은 필터 → 같은 응답. 한 번 학습 = 모든 위치에서 동작
이게 CNN의 본질적 효율 — "한 번 배운 패턴은 어디서나 인식".
한 필터로 한 패턴 감지. 보통 한 층에서 여러 필터를 동시에 사용 — 32개, 64개, 256개...
📊 알파고 신경망의 필터 수
- 알파고(2016): 192개 필터 × 13층 ≈ 2,500 필터
- 각 필터가 다른 패턴 감지 — 모서리, 모양, 사다리, 살아있음...
- 학습으로 자동 발견된 필터들 (사람이 정의 안 함)
코드로 합성곱 직접 만들어보자.