CNN 직관: 컨볼루션이 왜 강한지, 계층별로 무엇을 뽑는지
컨볼루션·파라미터 공유·계층별 특징 추출로 CNN이 이미지를 다루는 원리를 직관적으로 정리
TL;DR
- CNN이 강한 이유는 “똑똑해서”가 아니라 이미지의 구조(공간적 지역성)를 가정하고 설계되었기 때문이다.
- 컨볼루션은 작은 필터를 슬라이딩하며 “국소 패턴(엣지/질감)”을 찾는다.
- 파라미터 공유 덕분에 적은 파라미터로도 일반화가 가능하다(ANN 대비 핵심 차이).
- ReLU는 비선형성 + 학습 안정성(기울기 흐름)에서 사실상 기본값이다.
- Pooling은 불변성(translation invariance)을 얻는 대신 정보를 잃는다. 언제 쓰고 언제 줄여야 하는지가 관건.
- Flatten/FC는 “특징을 모아 분류”하는 단계지만, 최근에는 FC를 줄이고 Global Average Pooling을 쓰는 경우도 많다.
- Softmax + Cross Entropy는 “확률로 예측”하고 “정답의 로그 가능도를 최대화”하는 조합이다.
전체 지도: CNN은 딥러닝에서 어디에 위치하나
한 문장 요약: CNN은 ANN의 학습 원리를 그대로 쓰되, 이미지의 공간 구조를 보존하도록 연결 방식만 바꾼 모델이다.
- ANN: 입력(픽셀)을 1차원으로 펴면 위치 관계가 깨짐 → 이미지에 비효율
- CNN: 이미지의 가까운 픽셀끼리 의미가 있다는 구조를 유지 → 효율적 특징 학습
이미지 인식 파이프라인(전형적 흐름):
1
2
3
4
5
6
7
이미지( H x W x C )
→ [Conv + ReLU] 반복 (저수준 특징: 엣지/코너)
→ [Pooling] 간헐적 (해상도 ↓, 불변성 ↑)
→ 더 깊은 Conv (고수준 특징: 부품/형태)
→ Flatten 또는 GAP
→ FC
→ Softmax (클래스 확률)
미니 사례: “개 vs 고양이” 분류에서 ANN은 “모든 픽셀 조합”을 다 외우려 들고, CNN은 “귀/수염/눈 윤곽” 같은 패턴을 단계적으로 쌓는다.
핵심 개념: CNN 구성요소를 ‘왜’로부터 이해하기
1) Convolution(컨볼루션)
한 문장 요약: 컨볼루션은 “작은 탐지기(필터)”로 이미지 전체를 훑으며 패턴을 찾는다.
- 정의: 필터(커널)와 이미지의 국소 영역을 원소별 곱 후 합(내적) 해서 특징 맵(feature map)을 만든다.
- 직관: “엣지 탐지기/패턴 탐지기”를 이미지 곳곳에 동일하게 적용한다.
왜 강한가:
- 지역성: 가까운 픽셀 조합이 의미 있다는 가정
- 파라미터 공유: 같은 필터를 전 위치에 재사용 → 파라미터 폭증 방지
- 이동 등가성: 같은 패턴이 어디에 있든 비슷하게 반응
3x3 필터 컨볼루션 “숫자 한 번 직접”
입력 이미지의 한 부분(3x3)과 필터(3x3)가 있다고 하자.
입력 패치 (X):
| 1 | 2 | 0 |
| 0 | 1 | 3 |
| 2 | 1 | 1 |
필터 (K):
| 1 | 0 | -1 |
| 1 | 0 | -1 |
| 1 | 0 | -1 |
이때 컨볼루션 출력(해당 위치의 값)은 “원소별 곱의 합”이다.
- 첫 행: (11 + 20 + 0*(-1) = 1)
- 둘째 행: (01 + 10 + 3*(-1) = -3)
- 셋째 행: (21 + 10 + 1*(-1) = 1)
합: (1 + (-3) + 1 = -1)
즉, 그 위치의 feature map 값은 -1.
해석(직관): 이 필터는 좌우 대비(수직 엣지)를 잡는 형태다. 값의 부호/크기는 “엣지가 어느 방향으로 얼마나 강한지”에 대응한다.
2) ReLU
한 문장 요약: ReLU는 “음수는 버리고(0), 양수는 살린다”로 학습을 안정화한다.
- 정의: (f(x)=max(0,x))
- 직관: “패턴이 있으면 켜지고, 없으면 꺼진다.”
왜 필요한가:
- 비선형성 제공
- 기울기 소실을 완화(특히 Sigmoid/Tanh 대비)
미니 사례: 컨볼루션 결과가 음수면 “그 패턴이 이 방향으로는 없다”로 해석하고 0으로 만든다.
3) Pooling
한 문장 요약: Pooling은 “위치를 약간 무시하는 대신(불변성) 정보를 압축한다.”
대표적으로 Max Pooling(예: 2x2):
- 정의: 작은 영역에서 최대값만 남김
- 직관: “그 근처에 강한 특징이 있으면 됨(정확히 어디인지는 덜 중요)”
Pooling의 장단점(명확히)
| 항목 | 장점 | 단점 |
|---|---|---|
| 정보 처리 | 해상도 ↓로 계산량 감소 | 세밀한 정보 손실 |
| 일반화 | 작은 이동에 강해짐(불변성) | 위치가 중요한 과제에 불리 |
| 과적합 | 일부 완화 효과 | 과도하면 성능 하락 |
언제 주의해야 하나(실무 감각):
- 분류에서는 도움이 되는 경우가 많지만,
- 검출/세그멘테이션처럼 “정확한 위치”가 중요한 과제에서는 pooling을 줄이거나 stride conv 등으로 대체하는 경우가 많다.
4) Flatten / Fully Connected(FC)
한 문장 요약: 컨볼루션으로 뽑은 특징을 “최종 분류기”가 이해할 수 있게 모아 결정을 내린다.
- Flatten: (H, W, C) → 1D 벡터
- FC: 벡터를 받아 클래스 점수(logit)를 만든다
주의: Flatten + 큰 FC는 파라미터가 급증해 과적합이 쉽게 온다. (데이터 적을수록 위험)
5) Softmax + Cross Entropy
한 문장 요약: Softmax는 “점수(logit)를 확률로 바꾸고”, Cross Entropy는 “정답 확률의 로그 가능도를 최대화”한다.
Softmax 직관:
- 여러 클래스 점수를 0~1 확률로 정규화
- “가장 그럴듯한 클래스에 확률이 몰린다”
Cross Entropy 직관(로그 가능도 관점):
- 정답 클래스에 높은 확률을 주면 손실이 작아지고
- 정답 클래스 확률이 낮으면 손실이 급격히 커진다(로그 페널티)
미니 사례: 정답이 ‘고양이’인데 모델이 고양이 확률 0.9 → 손실 작음 고양이 확률 0.01 → 손실 큼 (강하게 벌점)
작동 원리: 입력→출력 흐름, 학습 흐름
1) 입력→출력(Forward)
한 문장 요약: CNN은 “패턴 추출기(Conv) → 압축/강조(Pooling/ReLU) → 분류기(FC/Softmax)”로 동작한다.
1
2
3
4
5
6
7
8
이미지
→ Conv: 로컬 패턴 탐지
→ ReLU: 패턴 존재 신호만 강화
→ Pool: 위치 민감도 ↓, 계산량 ↓
→ (반복) 더 복잡한 패턴
→ Flatten/GAP
→ FC: 클래스 점수
→ Softmax: 클래스 확률
2) 학습(Training)
한 문장 요약: 학습은 ANN과 동일하게 “손실을 줄이도록 필터 값이 업데이트”된다.
- Cross Entropy로 오차를 계산
- 역전파로 “어떤 필터가 정답을 망쳤는지” 책임을 계산
- 옵티마이저(Adam/SGD)로 필터 값을 업데이트
핵심 차이: ANN이 가중치를 학습하듯, CNN은 필터(커널) 자체를 학습한다.
구현 체크리스트: 데이터/모델/학습/평가/디버깅
데이터
- 입력 크기 통일(resize/crop) 규칙 정의
- 정규화(0~1 또는 mean/std) 일관성 유지
- train/val/test 분리(특히 동일 인물/동일 장면 중복 주의)
- 데이터가 적으면 증강(augmentation) 고려
모델
- Conv 블록(Conv→ReLU→(Pool))을 작은 모델부터
- Flatten+큰 FC는 과적합 위험 → 필요 시 FC 축소/GAP 고려
- 출력층: Softmax(다중 분류), Sigmoid(멀티라벨/이진)
학습
- 학습 곡선(Train vs Val)로 과적합 확인
- EarlyStopping / ReduceLROnPlateau 사용
- 데이터 적으면 전이학습(다음 편 구현에서 다룰 영역)
평가
- 클래스 불균형이면 accuracy 단독 금지
- confusion matrix로 어떤 클래스가 무너지는지 확인
디버깅
- shape(채널 순서 HWC/CHW) 확인
- 라벨 인코딩(one-hot vs sparse)과 loss 조합 확인
- 학습이 안 되면: LR/정규화/데이터 파이프라인부터 점검
실전 적용: 이미지 인식에서 CNN을 어떻게 쓰나
한 문장 요약: 실무 CNN은 “좋은 특징을 잘 뽑는 구조 + 데이터 전략”의 싸움이다.
비즈니스 연결:
- 제조 불량 판정
- 의료 영상 분류(보조)
- 문서/영수증 분류
핵심 지표/리스크:
- 리스크 1: 데이터 편향(촬영 환경/배경이 라벨을 대변)
- 리스크 2: 과적합(데이터 적을수록)
- 리스크 3: 운영 분포 변화(조명/카메라 변경)
미니 사례: 제품 불량 분류에서 “불량” 이미지가 적으면 → 모델은 배경/조명 차이를 불량으로 오인할 수 있다. → 증강/검증 분리 기준이 성능보다 중요해진다.
흔한 함정 TOP 7 + 해결책
CNN을 “더 깊게” 만들면 무조건 좋아진다고 착각 → 해결: 데이터 크기/과적합 먼저 확인
Pooling을 많이 쓰면 더 강해진다고 착각 → 해결: pooling은 불변성을 주지만 정보도 잃는다. 적절히만 사용
Flatten + 큰 FC로 파라미터 폭증 → 해결: FC 축소 또는 GAP 고려
정규화/전처리 규칙이 train/val에서 달라짐 → 해결: 동일 파이프라인 강제
라벨 인코딩과 loss/activation 불일치 → 해결: (softmax + cross entropy) 조합 확인
데이터 누수(동일 객체/장면이 train/val에 동시에 존재) → 해결: “샘플 단위”가 아니라 “그룹 단위”로 분리
성능이 높아도 실제 원인을 모름(스퓨리어스 상관) → 해결: 오분류 샘플 리뷰 + 간단한 시각화(예: Grad-CAM)는 최소한 수행
미니 Q&A
컨볼루션은 왜 파라미터가 적나? 필터를 전 위치에 공유하기 때문이다.
Pooling은 꼭 써야 하나? 아니다. 목적이 “불변성+계산량 감소”면 쓰고, 위치가 중요하면 줄인다.
ReLU는 왜 기본인가? 학습 안정성과 계산 효율이 좋고, 기울기 소실이 덜하다.
Softmax와 Cross Entropy는 왜 같이 쓰나? 확률로 예측하고, 정답 확률의 로그 가능도를 최대화하기 때문이다.
CNN은 표 데이터에도 쓰나? 대부분은 ANN이 낫다. 구조적 인접성이 있는 경우(시계열/신호 등)엔 1D CNN을 고려한다.
다음 편 예고
다음 편은 CNN을 실제로 구축한다. 이번 편에서 잡은 “Conv/ReLU/Pooling/Softmax” 감각을 코드로 옮기고, 과적합·증강·전이학습이 핵심이 된다. 즉, 이론이 끝났다면 다음은 “실제로 성능이 나오게 만드는 루틴”이다.
