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. 배경 및 문제 제기

직관적으로 층이 많을수록 더 복잡한 패턴을 배워야 합니다. 그런데 실험에서는 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을 숫자로 확인.

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

기존: 목표 매핑 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 블록)수식 상세
기호를 클릭하면 의미를 볼 수 있습니다
단계별 설명

4. 아키텍처 변형

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을 전환해 보세요.

5. 실험 결과

ModelTop-1 ErrTop-5 ErrParams
VGG-1628.07%9.33%138M
GoogLeNet6.67%6.8M
ResNet-3425.03%7.76%21.8M
ResNet-15221.43%5.71%60.2M
Ensemble3.57%
ImageNet 2015 분류 요약
  • ILSVRC 2015 분류 1위
  • COCO 탐지/분할 1위
  • ImageNet Detection·Localization 1위

6. 의의 및 영향

직접적 영향

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

파생

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

Transformer

  • Add & Norm = LayerNorm(x + Sublayer(x)) — ResNet 잔차의 직계

7. 한계와 발전

  • 학습 시 활성화 저장으로 메모리 부담 → 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 순서를 비교하세요.