스킬캠퍼스

오늘 끝나면

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층을 연 순간

모델

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

손실

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