Foundations · CVPR 2016

Deep Residual Learning — ResNet

Skip Connection으로 초심층 네트워크의 저하 문제를 푼 현대 CNN의 표준.

Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun

resnetresidualvisionarchitecture

1. 핵심 요약

ImageNet 2015·COCO를 석권했고, 이후 거의 모든 딥러닝 아키텍처에 잔차 연결이 표준이 됩니다. Transformer의 Add & Norm도 같은 아이디어의 직계입니다.

2. 왜 중요한가 — 쉬운 설명

30초 비유

계단을 아주 높이 쌓을수록 오히려 더 자주 헛디딥니다(층이 깊어질수록 학습이 나빠지는 “저하” 현상). 해결책: 각 층에게 결과를 처음부터 새로 만들지 말고, 이전 결과에 살짝 고칠 부분(잔차)만 배우게 하고, 원본은 지름길로 그대로 통과시킵니다.

무엇을 제안했나

  • 잔차 블록 — 층의 출력을 H(x) = F(x) + x 로. 층은 차이 F(x) 만 학습.
  • Skip Connection — 입력 x 를 몇 층 건너뛰어 그대로 더함.

그래서 무엇이 달라졌나

  • 100층, 152층짜리 네트워크도 안정적으로 학습됨 (그 전엔 20층만 넘어도 악화).
  • 기울기가 지름길을 타고 잘 흘러 사라지지 않음. 이 “잔차 스트림” 아이디어는 Transformer 안에도 그대로 들어 있습니다.

더 공부할 가치가 있을까?

  • 필수 — 이미지 인식이나 신경망 아키텍처를 다룬다면. 거의 모든 현대 CNN·Vision Transformer의 기본 골격.
  • 묶어 볼 것 — BatchNorm과 함께 보면 “깊은 망을 어떻게 학습시키나”가 한 그림으로 정리됩니다.

3. 배경 및 문제 제기

직관적으로 층이 많을수록 더 복잡한 패턴을 배워야 합니다. 그런데 실험에서는 56층이 20층보다 나빴고, 테스트뿐 아니라 훈련 오류도 더 높았습니다. 단순 과적합이 아니라 최적화 실패입니다.

저하 문제 vs 잔차

경향만 보세요 — 논문 CIFAR 표의 정확한 수치가 아닌 설명용 곡선입니다. Plain↑ / Residual↓.

err%depth →20324456110
56층에서

Plain ≈ 12.4% · Residual ≈ 6.8% · Δ 5.6pt

핵심: 깊은 Plain은 훈련조차 어려워지고, Skip이 그 최적화를 풀어 줍니다.

설명용 경향 곡선(논문 수치 그대로 아님). Plain↑ vs Residual↓ 패턴만 보세요.

이론적 하한: 깊은 넷은 얕은 넷의 해를 포함해야 합니다(추가 층을 항등함수로 두면 됨). 그런데 SGD는 그 해를 잘 못 찾습니다.

기울기 소실: 층을 거칠수록 곱이 쌓여 앞쪽 기울기가 지수적으로 작아질 수 있습니다.

기울기 고속도로: ∂F/∂x + 1

역전파에서 Skip이 있으면 국소 곱에 +1이 붙습니다. 숫자를 바꿔 보세요.

upstream∂L/∂H1.00
×
local∂F/∂x + 10.30 + 1 = 1.30
=
to input∂L/∂x1.30
Skip ON: |∂F/∂x|가 작아도 최소 ~1배 통로

식: ∂L/∂x = ∂L/∂H · (∂F/∂x + 1). ‘+1’이 고속도로입니다.

∂L/∂x = 1.00 × (0.30 + 1) = 1.30
∂L/∂x = ∂L/∂H · (∂F/∂x + 1) — Skip의 +1을 숫자로 확인.

4. 핵심 아이디어: 잔차 학습

기존: 목표 매핑 H(x)를 직접 학습.

ResNet: 잔차 F(x)=H(x)−x 만 학습하고, 출력은 H(x)=F(x)+x.

  • 항등이 최적이면 F(x)→0 이면 됨 (가중치를 0으로)
  • H(x)=x를 직접 맞추는 것보다 훨씬 쉬움
  • 기울기에 +1 항이 생겨 고속도로가 생김
H(x)=F(x)+xH(x) = F(x) + x
잔차 학습의 핵심 식
잔차 학습수식 상세 →
기호를 클릭하면 의미를 볼 수 있습니다
단계별 설명

BasicBlock + Skip Connection

Skip을 끄면 Plain 네트워크, 켜면 ResNet 블록입니다.

x
↓
Conv 3×3BN · ReLU
↓
Conv 3×3BN
↓
⊕ F(x)+x
↓
ReLU → out
입력 x

블록으로 들어오는 특징. Skip이 이 값을 끝까지 들고 갑니다.

H(x) = F(x) + x
Skip을 켜고 끄며 F(x) 경로와 x 경로를 따라가 보세요.
y=ReLU(F(x)+x)y = \mathrm{ReLU}\big(F(x) + x\big)
BasicBlock 출력 (논문 Fig.2 스타일). Transformer의 Add&Norm과 같은 잔차 철학.
Add & Activate (ResNet 블록)수식 상세 →
기호를 클릭하면 의미를 볼 수 있습니다
단계별 설명

5. 아키텍처 변형

ResNet 전체 스테이지

이미지를 stem → layer1…4 → 분류기 순으로 통과합니다. 스테이지를 클릭하세요.

ResNet-50 · layer2

×4 Bottle · /2 · 출력 채널 512

블록 타입: Bottleneck. layer2부터는 보통 stride 2로 해상도 절반 + Projection shortcut.

ResNet-18/34/50 전체 파이프라인. layer 스테이지를 눌러 보세요.

BasicBlock (ResNet-18/34)

3×3 Conv → BN → ReLU → 3×3 Conv → BN → + Skip → ReLU

Bottleneck (ResNet-50/101/152)

1×1(축소) → 3×3 → 1×1(복원) → + Skip. 채널을 줄였다가 되돌려 연산량↓·깊이↑.

Projection Shortcut

차원이 안 맞으면 Skip에 1×1 Conv를 넣어 맞춥니다.

BasicBlock vs Bottleneck

Bottleneck은 1×1로 채널을 줄였다가 되돌려, 깊은 넷을 싸게 만듭니다.

x · channels C
↓
Conv 1×1C → C/4
↓
Conv 3×3C/4 → C/4
↓
Conv 1×1C/4 → C
↓
⊕ + skip
↓
out
Identity
xsame shape

입·출력 차원이 같을 때. 파라미터 0.

Bottleneck

ResNet-50/101/152. 3×3은 좁은 채널에서만 돌아 연산량이 줄어듭니다.

Basic vs Bottleneck, identity vs projection shortcut을 전환해 보세요.

6. 실험 결과

ModelTop-1 ErrTop-5 ErrParams
VGG-1628.07%9.33%138M
GoogLeNet—6.67%6.8M
ResNet-3425.03%7.76%21.8M
ResNet-15221.43%5.71%60.2M
Ensemble—3.57%—
ImageNet 2015 분류 요약
  • ILSVRC 2015 분류 1위
  • COCO 탐지/분할 1위
  • ImageNet Detection·Localization 1위

7. 의의 및 영향

직접적 영향

  • 150층+ 초심층 학습이 현실화
  • BN + Residual 조합이 표준화

파생

  • WideResNet, DenseNet, SENet, EfficientNet, U-Net skip 등

Transformer

  • Add & Norm = LayerNorm(x + Sublayer(x)) — ResNet 잔차의 직계
  • ViT는 같은 잔차를 쓰되, JFT 규모에서는 CNN 귀납적 편향이 필수가 아님을 보임

8. 한계와 발전

  • 학습 시 활성화 저장으로 메모리 부담 → Gradient Checkpointing
  • 고정 깊이 → 동적 깊이 연구
  • Pre-Activation ResNet: BN→ReLU→Conv 순서로 성능 향상

Post-Activation vs Pre-Activation

원 논문은 Post(덧셈 후 ReLU). 이후 Pre-Activation은 BN→ReLU→Conv 순으로 바꿔 학습을 더 안정화합니다.

Conv
→
BN
→
ReLU
→
Conv
→
BN
→
⊕ +x
→
ReLU
Post: Skip 합친 뒤 ReLU

CVPR’16 기본 블록. 구현이 단순하지만, 덧셈 결과가 ReLU에 잘립니다.

원 논문 Post vs 이후 Pre-Activation 순서를 비교하세요.

이해도 점검

보기를 골라 정답과 해설을 확인하세요. 채점은 이 페이지 안에서만 이뤄집니다.

0 / 5 정답
  1. 1. 논문이 지적한 'degradation(퇴화)' 문제란?

  2. 2. 잔차 블록이 H(x)H(x) 대신 F(x)=H(x)−xF(x) = H(x) - x를 학습하게 하는 이유는?

  3. 3. 스킵 연결이 아주 깊은 망의 학습을 돕는 메커니즘은?

  4. 4. ResNet-50 이상에서 쓰는 bottleneck 블록의 1×11\times1 conv 역할은?

  5. 5. ImageNet에서 ResNet의 결과로 옳은 것은?