오늘 끝나면

CNN 심화

  • CNN 심화의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 CNN이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

VGG·ResNet — Skip Connection이 152층을 연 순간 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

AI · Day 6 / 지도학습 · 생성 DL

깊게, 더 깊게

8층 AlexNet에서 152층 ResNet까지. 근데 깊이만 쌓으면 오히려 더 못해짐. CNN을 깊게 쌓으면서도 학습이 되게 만든 세 발명을 손으로 따라감 — 잔차 연결, 1×1 병목, 배치 정규화.

P.01AI · Day 6 · 깊이의 역설

더 깊게 쌓았더니 더 못해졌다

2012년, AlexNet이 8층으로 ImageNet을 박살냄. 다들 당연하게 생각함 — 더 깊게 쌓으면 더 잘하겠지.

근데 56층이 20층보다 학습 오차조차 더 높았음.과적합 아님. 훈련 데이터에서마저 못함.

층이 깊어질수록 기울기가 앞쪽 층까지 못 가고 소실됨. 깊이는 무기였지만 동시에 저주였음.

ImageNet Top-5 오류율의 추락
Top-5 ERROR (%)16.4AlexNet8층7.3VGG19층6.7GoogLeNet22층3.6ResNet152층사람 약 5%

깊이가 8 → 152로 늘며 오류율은 16% → 3.6%로 추락

P.02AI · Day 6 · 핵심 직관

배우지 못하면, 건너뛰게 하라

2015년, ResNet의 발상은 충격적으로 단순함.변환을 통째로 배우기 어렵다면, 입력을 그대로 더해주고 차이만 배우게 하자.

기존 층은 목표 함수 H(x)를 통째로 배워야 했음. ResNet은 이걸 F(x) + x로 바꿈. 층은 잔차(residual) F(x) = H(x) − x만 배우면 됨.

지름길(skip connection) 하나로 기울기가 뒤에서 앞으로 끊김 없이 흐름. 덕분에 152층 ResNet이 처음으로 사람 인식 오류율(5%)을 넘어섬.

Residual Block — 항등 지름길
x (입력)3×3 Conv+ BN + ReLU3×3 Conv+ BNidentity지름길+ReLU → 출력

H(x) = F(x) + x — 층은 차이 F(x)만 배운다

P.03AI · Day 6 · 실습의 의미

단 한 줄, 더하기

오른쪽에서 직접 만져 봄. 깊이를 늘리고 지름길을 끄면 앞쪽 층 기울기가 0으로 소실됨. 지름길을 켜면 152층에서도 기울기가 살아남음.

핵심은 마지막 한 줄, out + identity임. 블록은 입력 x를 받아 합성곱 두 번 거치고, 그 출력에 원래 입력을 그대로 더함. 이게 전부임.

차원이 안 맞으면(채널 수나 해상도가 변하면) 지름길에 1×1 합성곱 끼워 맞춤. 변환은 최소로, 정보는 최대로 보존하는 설계임.

파이썬 코드 보기
class ResBlock(nn.Module):
    def forward(self, x):
        identity = x
        out = self.conv1(x)
        out = self.bn1(out)
        out = F.relu(out)
        out = self.conv2(out)
        out = self.bn2(out)
        out = out + identity   # 지름길
        return F.relu(out)
잔차 연결 — 기울기 흐름 시뮬
역전파 기울기 · 출력 → 입력ResNet (skip ON)
앞쪽 층 기울기
2.6e+10
한 층 계수
1.85×
앞쪽 층 상태
기울기 폭주

계수가 1 미만이면 깊이가 늘수록 기울기가 0으로 소실됨.
지름길은 한 층 계수에 +1 을 더해 줘 152층에서도 기울기가 살아남음.

P.04AI · Day 6 · 핵심 교훈

1×1 합성곱과 배치 정규화

깊은 CNN을 떠받치는 두 기둥이 더 있음 —1×1 합성곱배치 정규화(BatchNorm)임.

1×1 합성곱은 공간은 안 보고 채널끼리만 섞는 것.256채널을 64채널로 줄였다가(병목) 연산 끝낸 뒤 다시 256채널로 펼침. 표현력은 그대로인데 연산량은 확 줄어듦. ResNet-50의 핵심 트릭임.

왜 BatchNorm인가

각 층의 입력 분포는 학습 도중 계속 흔들림. BatchNorm은 미니배치마다 출력을 평균 0, 분산 1로 다시 맞추는 것. 덕분에 큰 학습률 써도 안정적이고 수렴이 몇 배 빨라짐.

1×1 Conv — 채널 병목
256ch1×164ch3×364ch1×1256ch줄였다 → 연산 → 펼친다

채널을 병목으로 줄여 연산량을 대폭 절감

P.05AI · Day 6 · 비즈니스 응용

처음부터 만들지 마세요

실무에서 CNN을 바닥부터 학습시키는 일은 거의 없음. 대부분 전이학습(Transfer Learning)으로 시작함.

ImageNet 1,400만 장으로 미리 학습된 ResNet의 앞쪽 층은 동결함.모서리·질감 같은 보편적 특징은 이미 완성돼 있음. 그리고 뒤쪽 층과 분류기만 내 데이터로 미세조정함.

사진 수백 장만 있어도 90% 정확도 불량 검출기를 하루 만에 만듦. 데이터가 적을수록 전이학습의 가치는 커짐.

Q. 56층이 20층보다 훈련 오차까지 높았던 근본 원인은?과적합 아님. 기울기 소실임. 층이 깊어지자 역전파되는 기울기가 앞쪽 층에 닿기 전에 0에 가까워짐. 앞쪽 층이 사실상 학습 안 됨. ResNet의 지름길 연결이 기울기에 직통 경로를 열어 이걸 해결함.
전이학습 — 동결과 미세조정
Conv 블록 1모서리·색동결Conv 블록 2질감·무늬동결Conv 블록 3부분 형태동결Conv 블록 4상위 특징학습분류기내 데이터학습PRETRAINED

앞쪽은 그대로, 뒤쪽만 내 데이터로 미세조정

3줄 요약

  1. 1VGG·ResNet — Skip Connection이 152층을 연 순간
  2. 2CNN 심화은 준비운동 → 지도학습 → 시퀀스 → 생성모델 → 실무 적용 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

CNN

VGG·ResNet — Skip Connection이 152층을 연 순간

모델

입력을 받아 예측이나 출력을 만드는 계산 규칙

손실

예측이 정답에서 얼마나 빗나갔는지 재는 숫자