본문 바로가기
딥러닝/Paper Review

[paper Review] Deep Residual Learning for Image Recognition

by AiDevHyo 2025. 5. 12.

1. Introduction

2012년 AlexNet의 등장 이후, 더 깊은 모델일 수록 이미지 classfication 정확도가 올라간다고 많이 알려지고 있었습니다. 

예를 들어 VGG-19(19개 층), GoogLeNet(22개 층)과 같은 모델들이 있었고, 이외에도 많은 모델들이 구현되었습니다.

아래 그래프는 2010년부터 2015년까지 ILSVRC대회에서의 top-5 오류율 감소 추이를 보여줍니다.

 

The ImageNet ILSVRC challenge results (top-5 error (%)) from 2010 to 2015 https://www.researchgate.net/figure/The-ImageNet-ILSVRC-challenge-results-top-5-error-from-2010-to-2015-AlexNet_fig1_319271964

 

하지만 모델이 깊어질수루고 두 가지 문제가 발생하게 됩니다.

 

1. Gradient Vanishing 

  • 역전파 과정에서 층이 깊어질수록 기울기가 점점 작아져서 학습이 멈추게 됩니다.

2. Gradient Exploding

  • 기울기가 지나치게 커지면 가중치가 비정상적으로 크게 업데이트 되어 학습이 불안정해집니다.

 

기울기가 작아지면 학습이 왜 안될까?

 

가중치 업데이트 공식은 

W_new = W_old - (오류 * dw * learning rate)

 

오류 항이 0에 가까워지거나, dw(기울기)가 작아지면 업데이트 폭이 작아져 학습이 멈추게 됩니다.

 

이 Gradient 문제를 해결하기 위해 크게 두가지의 방법을 제시합니다.

1) 가중치 초기화 개선

층이 깊어져도 입력과 출력의 분산을 유사하게 유지시켜 안정적인 학습을 유도

2) Batch Normalization (BN)

각 층의 출력을 평균 0, 분산 1로 정규화하여 기울기 흐름을 안정화

 

딥러닝에서는 각 뉴런은 이전 층의 출력값과 가중치의 곱으로 계산되는데, 출력값의 분산이 너무나 커지거나 작아지면 Gradient가 발산하거나 소실되게 됩니다.

 

Is learning better networks as simple as stacking more layers?

 

Figure 1. Training error (left) and test error (right) on CIFAR-10 with 20-layer and 56-layer “plain” networks. The deeper network has higher training error, and thus test error. Similar phenomena on ImageNet is presented in Fig. 4.

20-layer 모델보다 56-layer 모델이 오류율이 증가하는 현상이 보이게 되는데, training error 또한 같은 모습을 보이고 있어, overfitting 문제가 아닌 Degradation 문제로 보이게 됩니다.

 

 


Core Idea - Residual Learning Framework 

Figure 2. Residual learning: a building block

 

기존의 딥러닝 모델은 층이 깊어질수록 input인 X로 부터 최종 출력값 H(x)를 학습하려고 했습니다.

하지만 모델이 깊어지면 학습이 어려워지고, 오히려 학습이 저하되는 Degradation 문제가 발생하였습니다.

ResNet 모델의 핵심 아이디어는 H(x)를 직접하지 않고 잔차(residual)인 F(x) = H(x)-x 를 학습합니다.

즉, 입력과 출력의 차이 입니다. 많은 Layer를 겪으면서 사실 x 자체 많은 특징들을 가지고 있습니다. 

CNN은 계속 새로운 H(x)를 만드려고 시도하기 때문에 오히려 학습이 어려워 질수 있습니다. 

 

이게 바로 와닿지가 않는다면 조금 더 직관적으로 설명을 해보겠습니다. 

  • x: 내가 쓴 초안
  • H(x): 교수님이 원하는 결과물
  • F(x) = H(x) - x => 내가 수정해야하는 양

이럴때 처음부터 다시 결과물을 만들기보단 원하는 방향으로 수정하는것이 더 효율적으로 보여집니다. 

 

 


2. Related Work : Shortcut & Residual Ideas 

ResNet 이전에도 비슷한 개념은 존재했습니다.

예를 들면 Highway Network는 입력값에 gate를 걸어 다음층으로 넘겨주는 방식이었습니다.

다음층으로 넘겨줄지 말지를 gate에서 학습을 해야해서 더 많은 복잡성과 시간이 필요했습니다.

 

ResNet은 훨씬 간단하게, 입력값을 그대로 출력에 더하는 Identity Shortcut을 사용합니다. 

이로써, 다음과 같은 장점을 가지게 됩니다.

  1. 기울기 소실 완화: 역전파 과정에서 입력값이 그대로 전달되어 기울기가 사라지지 않음 
  2. 정보 보존: 중요한 입력 정보를 잃지 않고 다음 층으로 전달

Plain vs Residual

이로써 모델이 깊어질수록 학습 효과가 떨어지는 Degradation 문제가 해결되게 됩니다.

 


3.2 Identity Mapping by Shortcuts : Residual Block

 

Basic Residual Block 수식

  • x: 입력 벡터 (or feature map)
  • F: 학습해야할 잘차 함수, 입력이 얼마나 변화되었는가?
  • y : 출력 벡터 
  • W1, W2: 학습할 가중치 
  • σ: 비선형 활성화 함수 (예: ReLU)

-> 이 수식이 ResNet의  핵심인데, 단순히 출력을 만들어 내는것이 아닌 입력에 필요한 변화량만 더하는 아이디어를 제시했습니다.

 

만약 차원이 다르다면 => Projection Shortcut

차원이 다를때 Residual Blcok 수식

  • Ws: 1x1 convolution 으로 차원을 맞춰 주게 됩니다. 

잔차를 더하는 방식으로 작동하는 Residual Block은 단순한 덧셈이기때문에 가벼우며 추가 학습 파라미터가 없습니다. 

또한 Projection Shortcut의 경우도 1x1 Conv 연산이기 때문에 복잡하지 않습니다.

 


3.3 Network Architecture

 

 

 

 

Plain Network

- VGGNet 구조와 비슷하게

- Conv filter 3x3 사용

- Rule

1. 동일한 Feature Map 크기

2. 같은 채널 수를 유지

3. Feature Map이 절반으로 줄어들면 filter 수는 2배 증가

4. time complexity 유지 

- 다운샘플링

stride = 2Conv Layer 활용

- Output layer

Average Pooling

1000-class FC layer

- 연산량

1. Plain 34-layer 네트워크: 3.6 GFLOPs

2. VGG-19: 19.6 GFLOPs

3. plain VGG-19대비 18%연산량을 사용

 

 

 

 

 

 

Residual Network

항목 Identity Zero Padding Projection
용도 입력과 출력 차원이 같을 때 차원 다르지만 연산 없이
shortcut을 쓰고 싶을 때
차원 다를 때 정식으로 맞춰주는 방식
방식 입력을 그대로 더함 (x) 입력에 0패딩해서 채널만 맞춤 1×1 Conv로 차원(채널+크기) 맞춤
파라미터 없음 없음 있음 (1x1 Conv weight)
연산 복잡도 매우 낮음 낮음 중간 (추가 conv 있음)
주로 사용되는 상황 단순 연결 간단한 차원 불일치 대응 공식적인 차원 매칭

 

 

Pytorch로 구현

클래스 이름 사용 조건 설명

IdentityShortcut 입력과 출력 shape 같을 때 그냥 그대로 더함
ZeroPaddingShortcut 채널 수만 다를 때 부족한 채널을 0으로 패딩
ProjectionShortcut 차원이 완전히 다를 때 1x1 Conv로 차원 맞춰서 더함

3.4 Implementation

데이터 전처리 

  • Scale Augmentation
  • Crop
  • Mean Subtracition, Color Augmentation

학습 설정

  • Batch Norm 모든 Conv 뒤에 적용
  • Optimizer: Mini-batch(256), LR 0.1에서 정체 시 x0.1 감소 
  • Iteration: 60,000회, Dropout 사용 안함
  • Regularization: weight decay= 0.0001, momentum = 0.9

테스트

  • 10-crop Testing (좌우 반전 포함 총 10개 crop)
  • Multi-scale evaluation: 다양한 크게에서 평균 점수

 


4.1 ImageNet Classification

Top-1 error

Plain vs Residual 

  • plain-34: 28.54%
  • ResNet-34: 25.03%

Residual 구조는 더 깊어도 성능이 향상함을 확인했습니다.


ResNet A,B,C 비교

 

옵션 설명
A Zero-padding 사용하여 차원 맞춤 (parameter-free) 모든
shortcutidentity 형태
B Projection shortcut (1×1 conv) 만 차원 증가 시 사용,
 외는 identity
C 모든 shortcut projection 사용
 (가장 많은 파라미터 필요)

 

Identity vs Projection Shortcut 

- B > A > C

- C가 성능은 제일 좋지만 연산량/ 모델크기가 증가 -> 실제 논문에서는 사용하지 않았습니다.


 

 

Deeper Bottleneck Architectures
ResNet

2 Conv layer 구조 -> 3 Conv layer 구조로 바꿈 

  • 1x1 Conv -> 차원 축소 (Encoding)
  • 3x3 Conv -> Feature 학습
  • 1x1 Conv -> 차원 복원 (Decoding)

차원 축소를 통해 연산수를 줄였습니다. 

 


 

Error rates (%, 10-crop testing)
Error rates (%) of single-model

101 vs 152 layers 를 비교했을때 모델이 깊어질 수록 성능이 좋아짐을 확인할 수 있었습니다.

  • 연산량: 11.3B (VGG-19는 19.6B)
  • Top-5 Error: 4.49%
  • ILSVRC 2015 우승 (Ensemble: 3.57%)

Conclusion 

ResNet은 단순히 layer를 늘리는 것이 아닌, Residual learning 구조를 통해 깊은 네트워크의 학습 안정성과 성능을 모두 향상 시킬 수 있다고 확인하였습니다.