Post

CNN 직관: 컨볼루션이 왜 강한지, 계층별로 무엇을 뽑는지

컨볼루션·파라미터 공유·계층별 특징 추출로 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):

   
120
013
211

필터 (K):

   
10-1
10-1
10-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 + 해결책

  1. CNN을 “더 깊게” 만들면 무조건 좋아진다고 착각 → 해결: 데이터 크기/과적합 먼저 확인

  2. Pooling을 많이 쓰면 더 강해진다고 착각 → 해결: pooling은 불변성을 주지만 정보도 잃는다. 적절히만 사용

  3. Flatten + 큰 FC로 파라미터 폭증 → 해결: FC 축소 또는 GAP 고려

  4. 정규화/전처리 규칙이 train/val에서 달라짐 → 해결: 동일 파이프라인 강제

  5. 라벨 인코딩과 loss/activation 불일치 → 해결: (softmax + cross entropy) 조합 확인

  6. 데이터 누수(동일 객체/장면이 train/val에 동시에 존재) → 해결: “샘플 단위”가 아니라 “그룹 단위”로 분리

  7. 성능이 높아도 실제 원인을 모름(스퓨리어스 상관) → 해결: 오분류 샘플 리뷰 + 간단한 시각화(예: Grad-CAM)는 최소한 수행


미니 Q&A

  1. 컨볼루션은 왜 파라미터가 적나? 필터를 전 위치에 공유하기 때문이다.

  2. Pooling은 꼭 써야 하나? 아니다. 목적이 “불변성+계산량 감소”면 쓰고, 위치가 중요하면 줄인다.

  3. ReLU는 왜 기본인가? 학습 안정성과 계산 효율이 좋고, 기울기 소실이 덜하다.

  4. Softmax와 Cross Entropy는 왜 같이 쓰나? 확률로 예측하고, 정답 확률의 로그 가능도를 최대화하기 때문이다.

  5. CNN은 표 데이터에도 쓰나? 대부분은 ANN이 낫다. 구조적 인접성이 있는 경우(시계열/신호 등)엔 1D CNN을 고려한다.


다음 편 예고

다음 편은 CNN을 실제로 구축한다. 이번 편에서 잡은 “Conv/ReLU/Pooling/Softmax” 감각을 코드로 옮기고, 과적합·증강·전이학습이 핵심이 된다. 즉, 이론이 끝났다면 다음은 “실제로 성능이 나오게 만드는 루틴”이다.


This post is licensed under CC BY 4.0 by the author.