13장. 본다는 것 — 합성곱 신경망
이 장의 질문: 이미지를 이해하는 데 필요한 "상식"을 어떻게 신경망의 구조 자체에 새겨 넣는가? 합성곱의 원리와, 그것이 낳은 시각 지능의 위계를 이해한다.
전제: 9장(층, 표현 학습), 11장(잔차 연결).
MLP에 사진을 넣으면 생기는 일
9장의 MLP에 흑백 100×100 사진(픽셀 1만 개)을 넣어 보자. 첫 층의 뉴런이 1000개라면 가중치는 1만 × 1000 = 천만 개. 컬러 고해상도라면 수십억 개다. 파라미터 폭발도 문제지만, 더 깊은 문제가 있다.
MLP에게 입력은 그냥 숫자 목록이다. 픽셀들을 뒤섞어 넣어도 — 사람 눈에는 백색소음이 되어도 — MLP는 개의치 않는다(뒤섞인 순서를 똑같이 유지만 하면 똑같이 학습된다). 즉 MLP는 이미지가 이미지라는 사실을 모른다. 우리가 아는 이미지의 상식 두 가지가 통째로 버려지고 있다.
- 가까운 픽셀끼리 관련이 깊다. 눈동자를 이루는 픽셀들은 서로 붙어 있다. 화면 반대편 픽셀과의 관계보다 옆 픽셀과의 관계가 압도적으로 중요하다.
- 패턴은 위치를 가리지 않는다. 고양이 귀는 사진 왼쪽에 있든 오른쪽에 있든 같은 모양이다. "왼쪽 위 전용 귀 탐지기"와 "오른쪽 아래 전용 귀 탐지기"를 따로 배우는 것은 낭비를 넘어 어리석다.
이 두 상식을 망의 구조에 강제로 새겨 넣은 것이 합성곱 신경망(CNN)이다. 4장의 언어로 말하면, 후보 집합에서 "이미지답지 않은 함수들"을 미리 쳐내는 것 — 좋은 귀납 편향(inductive bias)을 주입해, 같은 데이터로 훨씬 잘 일반화하게 만드는 전략이다.
합성곱: 도장 하나로 온 화면을 찍는다
합성곱(convolution)의 동작은 단순하다. 작은 가중치 판 — 예컨대 3×3짜리 필터(커널) — 하나를 만들어, 이미지의 왼쪽 위부터 오른쪽 아래까지 훑으며 각 위치에서 필터와 그 아래 3×3 픽셀 조각의 내적(3장!)을 계산한다. 결과는 "각 위치에서 이 패턴이 얼마나 강한가"를 담은 새 이미지 — 특징 맵(feature map)이다.
숫자로 직접 보자. 세로 경계(어두움→밝음)를 찾는 필터를 손으로 설계할 수 있다:
이 필터를 이미지 위 어느 위치에 대면, 오른쪽 열 픽셀들은 더해지고 왼쪽 열은 빼진다 — 오른쪽이 밝고 왼쪽이 어두운 곳(세로 경계)에서 값이 커진다. 균일한 영역에서는 상쇄되어 0. 훑고 나면 "세로 경계 지도"가 나온다. 예전 사람들은 이런 필터를 손으로 설계했다. CNN의 혁신은 단 하나 — 필터의 9개 숫자를 학습되는 파라미터로 만든 것. 어떤 패턴을 찾을지 데이터가 정한다.
두 상식이 어떻게 구현됐는지 확인하라. 필터는 3×3 지역만 본다(상식 1: 지역성). 그리고 같은 필터 하나가 모든 위치를 훑는다(상식 2: 가중치 공유 — 위치별 탐지기를 따로 두지 않는다). 파라미터 계산이 극적이다: MLP 첫 층의 천만 개 대신, 3×3 필터 64종이면 576개(+편향)로 이미지 전체를 처리한다. 위치마다 파라미터를 안 쓰니 이미지가 커져도 파라미터는 그대로다.
실제 합성곱 층에는 어휘 몇 개가 붙는다. 컬러 이미지는 채널이 3개(RGB)라 필터도 3×3×3 부피로 훑고, 필터를 64종 두면 출력은 64채널 특징 맵이 된다(64가지 패턴의 지도). 훑는 보폭이 스트라이드(2로 하면 출력 크기가 절반), 가장자리를 0으로 둘러 크기를 유지하는 것이 패딩이다. 그리고 특징 맵을 축소하는 전용 층 — 2×2 구역의 최대값만 남기는 맥스 풀링 — 이 있다. 풀링은 "이 근방 어딘가에 패턴이 있었다"만 남기고 정확한 위치를 버리는 요약으로, 위치의 잔떨림에 둔감해지는 효과와 계산 축소를 함께 준다.
위계: 모서리에서 고양이까지
층을 쌓으면 9장의 표현 학습이 시각적으로 아름답게 실현된다.
1층의 필터들은 3×3 픽셀만 보므로 배울 수 있는 것이 원초적이다 — 방향별 모서리, 색 대비, 점. (실제로 학습된 CNN의 1층 필터를 시각화하면 정말 이런 것들이 나온다.) 2층은 1층의 특징 맵을 입력으로 받는다 — 즉 "모서리들의 배치"를 보므로 모퉁이, 곡선, 줄무늬 같은 조합을 배운다. 층이 오를수록 한 뉴런이 원본에서 내다보는 범위(수용 영역)가 넓어지고 패턴은 추상화된다: 질감 → 부품(눈, 바퀴) → 사물(얼굴, 자동차). 마지막에는 특징 맵을 뭉뚱그려(전역 평균 풀링) 벡터로 만들고, 익숙한 소프트맥스 분류기(5장)가 마무리한다.
전형적인 구조를 코드로 보면 이렇다. 공간은 줄이고(풀링/스트라이드) 채널은 늘리는 — "어디에"를 지우며 "무엇이"를 불리는 — 리듬을 읽어 보라.
import torch.nn as nn
model = nn.Sequential(
nn.Conv2d(3, 32, 3, padding=1), nn.BatchNorm2d(32), nn.ReLU(), # 32×32×3 → 32×32×32
nn.MaxPool2d(2), # → 16×16×32
nn.Conv2d(32, 64, 3, padding=1), nn.BatchNorm2d(64), nn.ReLU(), # → 16×16×64
nn.MaxPool2d(2), # → 8×8×64
nn.Conv2d(64, 128, 3, padding=1), nn.BatchNorm2d(128), nn.ReLU(),# → 8×8×128
nn.AdaptiveAvgPool2d(1), nn.Flatten(), # → 128 벡터
nn.Linear(128, 10), # 소프트맥스 출구 (5장)
)여기에 11장의 무기를 얹은 결정판이 ResNet이다 — 합성곱 블록마다 잔차 연결(
이미지 학습의 실무 상비약 하나도 여기서 챙기자 — 데이터 증강(4장의 예고 회수). 뒤집고, 자르고, 색을 흔들어도 고양이는 고양이다. 정답을 바꾸지 않는 변형으로 데이터를 사실상 몇 배로 불리는 이 기법은 시각 학습에서 거의 공짜 성능이며, "모델이 배웠으면 하는 불변성(뒤집혀도 같은 것)을 데이터로 가르치는" 행위이기도 하다.
만들지 말고 빌려 써라: 전이학습
이 장의 가장 실용적인 결론이다. 대형 데이터(예: 이미지 140만 장)로 학습된 CNN의 앞쪽 층들은 무엇을 배웠나 — 모서리, 질감, 부품. 이것은 고양이 분류에만 유용한 것이 아니라 거의 모든 시각 과제의 공용 부품이다. 그렇다면 내 문제(예: 불량품 판별, 사진 800장)를 풀 때 그 층들을 처음부터 다시 배울 이유가 없다.
전이학습(transfer learning)의 레시피: 사전학습된 모델을 가져와 마지막 분류 층만 내 클래스 수로 갈아 끼운다. 데이터가 아주 적으면 몸통은 동결하고(가중치 고정) 새 층만 학습하고(특징 추출기로만 사용), 데이터가 좀 있으면 몸통도 아주 작은 학습률로 함께 미세조정(fine-tuning)한다 — 배워 둔 좋은 표현을 큰 걸음으로 짓밟지 않기 위해서다. 사진 수백 장으로도 실용 수준의 분류기가 나오는 이유가 이것이며, 실무 시각 문제의 9할은 밑바닥 학습이 아니라 전이학습이다. 그리고 이 "사전학습 + 미세조정"이라는 패턴은 시각을 넘어 — 미리 말해 두면 — 7부 LLM 시대 전체의 기본 문법이 된다.
손으로 굳히자: 코드랩 02에서 CNN을 밑바닥부터 학습시키고, 코드랩 03에서 같은 문제를 전이학습으로 풀어 데이터 효율의 차이를 체감하라.
핵심 요약
- MLP는 이미지의 두 상식 — 지역성, 패턴의 위치 무관성 — 을 모른다. CNN은 이 상식을 구조로 강제한 신경망이다(좋은 귀납 편향 → 적은 데이터로 좋은 일반화).
- 합성곱 = 학습되는 작은 필터로 온 이미지를 훑으며 내적 → "패턴 위치 지도"(특징 맵). 지역만 보고(지역성), 필터를 공유한다(위치 무관). 파라미터는 이미지 크기와 무관.
- 층을 쌓으면 모서리→부품→사물의 표현 위계가 자라난다. 공간을 줄이며 채널을 늘리는 리듬 + 잔차 연결(ResNet)이 표준 골격. 증강은 시각 학습의 공짜 성능.
- 전이학습이 실무의 기본기: 사전학습 모델의 표현을 빌리고, 마지막 층 교체 + (선택) 저학습률 미세조정. "사전학습+미세조정" 문법은 LLM 시대의 예고편이다.
스스로 점검
- 본문의 세로 경계 필터를, 가로 경계를 찾도록 고쳐 써 보라. 균일한 영역에서 출력이 0이 되는 이유도 설명해 보라.
- 100×100 흑백 이미지에 5×5 필터 32종을 쓰는 합성곱 층의 파라미터 수는? (편향 포함) 같은 입력의 MLP 첫 층(뉴런 32개)과 비교해 보라.
- "공간은 줄이고 채널은 늘린다"가 표현 학습 관점에서 왜 자연스러운지 설명해 보라.
- 데이터 300장으로 개 품종 분류기를 만들어야 한다. 구체적인 계획(모델, 동결 범위, 학습률, 증강)을 3~4문장으로 적어 보라.
다음 장에서
분류는 "사진에 무엇이 있나"에 답한다. 그런데 현실의 시각 과제는 더 묻는다 — 어디에 있나(탐지), 정확히 어떤 픽셀인가(분할). 그리고 최근에는 합성곱 없이 어텐션만으로 보는 모델(ViT)까지 등장했다. 시각 과제의 지형도를 한 바퀴 돈다.