코드: 합성곱 직접 구현
실행 결과를 보면 명확:
- 입력: 가운데 세로 막대만 있는 이미지
- 세로 막대 필터: 가운데 컬럼에서 응답 6.0 — 강한 매치!
- 가로 막대 필터: 어디서도 응답 0 — 찾는 패턴 없음
🎯 핵심: 필터 = 패턴 감지기
같은 입력에 다른 필터를 적용 → 다른 패턴 감지. CNN은 보통 한 층에서 수십~수백 개 필터를 동시에 적용. 각 필터가 다른 패턴.
예 알파고 첫 층 필터들 (학습 후):
- 수직 모양
- 수평 모양
- 대각선 모양
- 코너 모양
- 2개 돌 연결
- ... (총 192개)
💡 핵심 코드 부분
for i in range(OH):
for j in range(OW):
patch = image[i:i+K, j:j+K]
output[i, j] = np.sum(patch * kernel)
필터를 위치마다 슬라이딩하며 원소곱 합 — 이게 합성곱의 본질. 한 줄 두 줄로 어떤 패턴이든 감지.
📖 실제 CNN 라이브러리
위 코드는 교육용. 실제 TensorFlow나 PyTorch는:
- GPU 가속 — 같은 합성곱 1000배 빠름
- 여러 입력 채널 + 여러 필터 동시
- 학습 (역전파)가 자동
그러나 알고리즘 본질은 위 코드 그대로.
PYTHON