[논문리뷰] ResNet(Deep Residual Learning for Image Recognition)

Jihoon Oh·2024년 8월 12일

논문리뷰

목록 보기
4/12

📌 저희가 앞서 배운 논문에서 AlexNet은 CNN의 효과를 증명했고, GoogLeNet은 다양한 크기 컨볼루션을 진행하며 1x1 컨볼루션으로 파라미터 수를 효과적으로 줄인 Inception 모듈을 사용했습니다. VGGNet은 3x3 컨볼루션이 5x5와 7x7컨볼루션을 대체할 수 있어 그 효율성을 증명해냈죠.

이번에 배울 ResNet은 이론 보다는 새로운 구조를 제시했다고 볼 수 있습니다.


💡Abstract

네트워크가 깊어짐에 따라 학습은 더욱 어려워졌다. 우리는 더욱 깊어진 네트워크를 쉽게 훈련 시키기 위한 residual 학습이란 개념을 제시한다. 참조되지 않은 함수를 학습하는 대신 레이어 입력을 참조하여 학습하는 잔여 함수로 명시적으로 재구성한다. 이러한 잔여 학습이 최적화 하기 쉽고 상당히 증가된 깊이에서 정확도를 얻을 수 있음을 보여주는 포괄적인 경험적 증거를 제공한다. ImageNet 데이터 셋에서 VGGNet 보다 8배 더 깊은 152개의 레이어를 가지고 평가한다. 우리는 이러한 잔차 학습을 통해 3.57% 오류를 달성하여 ILSVRC 2015에서 1위를 차지했다.


위 그래프는 그동안 제가 쓴 논문리뷰들의 에러율과 레이어수를 나타낸 그래프 입니다. 레이어가 깊어짐에 따라 에러율이 낮아지고 성능이 향상된 것을 볼 수 있습니다. 그럼 왜 그동안 레이어 수를 폭발적으로 늘리지 않았을까요?

딥러닝 모델에서 레이어 수를 늘리면 이론적으로는 더 복잡한 표현력을 가질 수 있지만, 많은 레이어를 쌓는 것이 항상 최적의 성능을 보장하지는 않습니다. 이는 다음과 같은 여러 가지 이유 때문입니다:

  1. 기울기 소실/폭주 문제 (Vanishing/Exploding Gradients):

딥 네트워크는 학습 과정에서 기울기가 소실되거나 폭주할 수 있습니다. 이는 레이어가 깊어질수록 역전파 과정에서 기울기가 지나치게 작아지거나 커져서 학습이 어려워질 수 있음을 의미합니다. 이를 해결하기 위해 적절한 초기화, 정규화 기법이나 이번 논문에서 배울 잔차 연결(Residual Connections) 등이 필요합니다.

  1. 계산 비용과 메모리 문제:

레이어 수가 많아질수록 계산 비용과 메모리 요구량이 급격히 증가합니다. 이로 인해 실제 하드웨어에서 학습하거나 추론을 수행하는 데 있어 현실적인 제약이 발생할 수 있습니다.

  1. 과적합 문제 (Overfitting):

너무 많은 레이어를 사용하면 모델이 훈련 데이터에 너무 잘 적합하게 되어 테스트 데이터에 대한 일반화 성능이 저하될 수 있습니다. 이는 모델이 훈련 데이터의 노이즈나 특정 패턴에 지나치게 적합하는 경우에 발생할 수 있습니다.

VGGNet의 경우 19개의 레이어를 사용했습니다. ResNet은 그에 8배나 되는 152개의 레이어를 가지고 있는데 어떻게 위 문제들을 해겼했는지 알아봅시다.


💡1. Introduction

ILSVRC(Imagenet Large Scale Visual Recognition Challenge) 대회의 결과를 살펴보면, 신경망의 깊이(depth)가 시각 인식 작업에서 모델의 성능에 중요한 영향을 미친다는 사실을 알 수 있습니다. 즉, 모델의 깊이가 성능 향상에 기여하는 중요한 요소로 작용한다는 것을 확인할 수 있습니다. 그러나 네트워크의 깊이를 증가시키면 여러 가지 문제가 발생할 수 있습니다. 이러한 문제로는 과적합(overfitting), 기울기 소실(vanishing gradients), 연산량의 증가 등이 있으며, 이러한 문제들은 심층 신경망을 학습하는 데 큰 도전 과제가 됩니다.

이러한 어려움을 해결하기 위해 마이크로소프트 연구팀은 Residual Learning Framework라는 혁신적인 접근 방식을 도입했습니다. Residual Learning의 핵심 아이디어는 네트워크의 각 레이어에서 이전 레이어의 출력을 재활용하여 학습을 돕는 것입니다. 구체적으로, 입력 레이어의 출력을 참조하는 '잔차(residual) 함수'를 사용함으로써, 네트워크의 최적화를 보다 용이하게 하고, 깊은 네트워크에서 성능을 크게 향상시킬 수 있었습니다.

이 방식으로 개발된 ResNet(Residual Network)은 총 152개의 레이어를 가지며, 이는 VGGNet의 레이어 수의 8배에 해당합니다. ResNet은 또한 앙상블 기법을 적용하여 모델의 오차를 3.75%까지 줄이는 성과를 거두었습니다. 이는 매우 깊은 네트워크를 효과적으로 학습할 수 있는 방법을 제시함으로써, 시각 인식 분야에서 큰 혁신을 이루었다는 의미를 가집니다.

왼쪽 그래프는 트레이닝 에러를, 오른쪽 그래프는 테스트 에러를 나타냅니다. CIFAR-10 데이터셋으로 학습한 결과, 그래프에서 과적합은 발생하지 않았습니다. 일반적으로 과적합이 발생하면 트레이닝 에러는 감소하지만 테스트 에러는 증가하게 됩니다.

그러나 위 그래프에서는 학습 과정에서 과적합이 없었으며, 56개의 레이어보다 20개의 레이어를 가진 네트워크가 더 나은 성능을 보였습니다. 이론적으로는 네트워크의 깊이가 증가하면 성능이 향상되어야 하지만, 실제로는 그렇지 않다는 것을 보여줍니다.

연구에 따르면, 신경망의 깊이가 모델 성능에 미치는 영향이 상당하다는 점이 밝혀졌습니다. 최신 모델이 깊은 네트워크를 통해 우수한 성과를 달성하고 있지만, 네트워크가 깊어질수록 학습 과정에서 몇 가지 문제가 발생할 수 있습니다. 특히, Vanishing Gradient와 Exploding Gradient 현상은 깊은 네트워크의 학습을 어렵게 만드는 주요 요인입니다. 다행히도, Stochastic Gradient Descent(SGD)와 같은 최적화 기법을 사용하는 10개 레이어까지는 Batch Normalization과 같은 정규화 기법을 통해 이러한 문제를 완화할 수 있었습니다.

그러나 심층 신경망에서는 네트워크의 깊이가 증가함에 따라 Degradation 문제가 발생합니다. 이는 네트워크가 너무 깊어지면 성능이 오히려 저하되는 현상으로, 깊이가 늘어남에 따라 정확도가 정체되거나 급격히 감소하는 것을 의미합니다. 이 문제는 오버피팅 때문이 아니라, 단순히 레이어 수의 증가로 인해 발생하며, 이는 학습 데이터와 테스트 데이터 모두에서 오류가 증가하는 결과를 가져옵니다. 또한, 이는 각 시스템이 최적화되는 방식이 다르다는 것을 시사합니다.

이와 같은 문제를 해결하기 위해, 특정 조건에서는 깊은 모델도 효과적으로 최적화할 수 있는 방법이 있습니다. 이 방법은 추가된 레이어가 identity mapping 역할을 하고, 기존의 얕은 모델에서 학습된 레이어를 재사용하는 것입니다. 이러한 접근 방식을 통해 더 깊은 모델이 얕은 모델보다 더 낮은 학습 오류(training error)를 기록할 수 있으며, 마이크로소프트 팀은 이 개념을 ResNet 모델에 적용했습니다.

기존 네트워크는 입력 x를 받아 여러 레이어를 통과시켜 𝐻(𝑥)를 출력하여 입력 x를 목표값 y로 매핑하는 것을 목표로 합니다. 반면, ResNet의 Residual Learning 접근 방식은 𝐻(𝑥)와 입력 x 간의 차이인 𝐻(𝑥)−𝑥를 줄이는 것을 목표로 합니다. 즉, Residual Function F(x)=H(x)−x를 최소화함으로써, 출력과 입력의 차이를 줄이는 것이 목표가 됩니다. 최적화 과정에서 F(x)가 0에 가까워질수록 H(x)는 입력 x와 동일하게 되며, 결과적으로 네트워크는 입력을 그대로 출력으로 매핑하는 학습 목표를 가지게 됩니다.


ResNet 논문에서 사용하는 H(x)와 F(x)의 수식은 잔차(Residual) 학습의 핵심 개념을 설명하는 부분입니다. 이해를 돕기 위해, 이 수식들이 무엇을 의미하는지 풀어서 설명해드리겠습니다.

ResNet의 핵심 아이디어는 "잔차 학습(Residual Learning)"입니다. 이를 위해, 신경망의 각 레이어가 입력
x에 잔차 함수 F(x)를 더하는 형태로 설계됩니다. 이 방식은 다음과 같은 수식으로 표현됩니다:

H(x)=F(x)+x

여기서 각 기호의 의미는 다음과 같습니다:

x: 입력 벡터 또는 텐서입니다. 네트워크의 현재 레이어에 들어오는 값입니다.

F(x): 잔차 함수(Residual Function)입니다. x를 입력으로 받아서 새로운 값을 계산합니다. 보통 F(x)는 여러 컨볼루션 레이어로 구성된 신경망입니다.

H(x): 최종 출력입니다. 이는 잔차 함수 F(x)의 결과와 원본 입력 x를 더한 값입니다.

F(x)가 0에 가까운 값으로 수렴할 경우, 네트워크는 H(x)=x가 되어 기본적인 입력 x를 그대로 전달합니다. 이는 네트워크가 깊어지더라도 기본적으로 입력을 유지할 수 있게 해줍니다.


Residual Representations
Residual Representations에서 핵심적인 점은 벡터 양자화(vector quantization)에서 잔차 벡터(residual vector)를 인코딩하는 것이 원본 벡터(original vector)를 인코딩하는 것보다 더 효과적이라는 것입니다. 벡터 양자화는 특징 벡터를 클래스 벡터로 매핑하는 과정인데, 잔차 벡터를 사용하는 접근 방식이 더 우수한 성능을 보입니다. 이 방식은 벡터의 잔차를 처리함으로써 최적화를 더 간단하게 하고, 문제 해결 속도를 높입니다.

멀티 그리드 방식은 저수준 비전 및 컴퓨터 그래픽 문제에서 사용되는 기술로, 시스템을 여러 스케일로 나누어 각 하위 문제를 해결합니다. 각 하위 문제는 큰 스케일과 작은 스케일 간의 잔차를 처리합니다. 이에 대한 대안으로, 두 스케일 간의 잔차 벡터를 기반으로 하는 계층적 전처리(pre-conditioning) 방식이 있으며, 이는 기존의 방식보다 훨씬 빠르게 수렴합니다. 즉, 효율적인 문제 재구성과 전처리는 최적화 과정을 간소화하는 데 기여합니다.

Shortcut Connections
Shortcut Connections는 신경망의 구조를 효율적으로 개선하는 방법입니다. 초기 MLPs에서는 네트워크 입력과 출력 간에 선형 레이어를 추가하여 학습했습니다. ResNet은 이러한 Shortcut Connections를 통해 네트워크의 깊이가 증가하더라도 정보 손실 없이 학습을 가능하게 합니다. 이는 기울기 소실(vanishing gradients)이나 폭주(exploding gradients) 문제를 완화하는 데 효과적입니다.

ResNet에서의 Shortcut Connection은 추가적인 파라미터 없이 정보가 항상 통과하도록 설계되어 있습니다. 이 방식은 정보 손실을 방지하고, 계속해서 residual function을 학습할 수 있게 해줍니다. 반면, "Highway Network"와 같은 접근 방식은 gating function을 사용하여 데이터 의존적으로 shortcut connection을 구성하며, 이는 파라미터를 필요로 하고, gating이 닫히면 정보가 손실될 수 있습니다. ResNet의 Shortcut Connections는 항상 residual 기능을 유지하여, 학습 중에 정보 손실 없이 효과적인 학습이 가능합니다.

이처럼, ResNet의 residual representations와 shortcut connections은 깊은 네트워크에서 성능을 최적화하고, 학습 과정을 개선하는 데 중요한 역할을 합니다.


💡3. Deep Residual Learning


3.1 Residual Learning

신경망은 여러 개의 비선형 레이어로 구성되며, 각 레이어는 비선형 변환을 수행합니다. 이러한 비선형 레이어들이 쌓이면, 네트워크는 복잡한 함수 H(x)를 점근적으로 근사할 수 있습니다. 즉, 깊이 있는 신경망은 복잡한 함수도 점점 더 정밀하게 모델링할 수 있습니다.


3.2 Identity Mapping by Shortcuts

잔차 학습(Residual Learning)에서는 두 가지 주요한 방법으로 Shortcut Connections을 구현할 수 있습니다: Identity Shortcut과 Projection Shortcut입니다. 이들 각각의 방법은 입력과 출력 사이에 Shortcut Connection을 적용하여 신경망의 성능을 개선합니다.

Identity Shortcut

정의: Identity Shortcut은 입력과 출력 사이의 차원이 동일할 때 사용됩니다.
수식: y=F(x,W)+x
여기서 x와 y는 각각 레이어의 입력과 출력입니다.

F(x,W)는 학습해야 할 잔차 매핑(residual mapping)을 나타내며, 이 방법에서는 입력 x를 그대로 출력 y에 더합니다.

Projection Shortcut

정의: Projection Shortcut은 입력과 출력 사이의 차원이 다를 때 사용됩니다.
수식: y=F(x,W)+Wx
이 방법은 입력 x를 변환 행렬 W 를 통해 조정한 후, 잔차 매핑 F(x,W)에 더합니다.

이 두 가지 방식은 각각의 상황에 맞추어 입력과 출력 사이의 잔차를 효과적으로 모델링할 수 있는 방법을 제공합니다. Identity Shortcut은 차원이 일치할 때 간단하게 적용할 수 있으며, Projection Shortcut은 차원 불일치 문제를 해결하기 위해 추가적인 변환을 사용합니다.

원래 레이어를 통과한 결과와 Shortcut Connections을 통해 나온 x를 더해주게 되는데, 이때 서로가 차원이 불일치 할 경우 오류가 발생할 수 있으므로 변환 행렬을 통해 조정한다고 보시면 됩니다.

💡3.3 Network Architectures

Plain Network
Plain Network는 주로 3x3 컨볼루션 필터를 사용하며, 모든 레이어는 동일한 크기의 필터를 유지합니다. 각 레이어의 출력 feature map 크기를 일정하게 유지하려면, feature map의 크기가 절반으로 줄어들 때마다 필터 수를 두 배로 증가시킵니다. stride가 2인 컨볼루션 레이어를 통해 수행됩니다. 네트워크의 마지막 부분은 Global Average Pooling Layer와 Fully Connected (FC) Layer (소프트맥스 활성화 포함)로 구성됩니다.

Residual Network
Residual Network는 Plain Network와 유사하지만, Shortcut Connections을 적용하여 성능을 개선합니다. 입력과 출력의 차원이 동일한 경우에는 Identity Shortcut을 사용하며, 이 경우 입력을 출력에 그대로 추가합니다. 입력과 출력의 차원이 다른 경우에는 Projection Shortcut을 사용하여 차원 불일치를 해결합니다. 이때, 입력을 출력 차원에 맞게 조정하기 위해 변환 행렬이 사용됩니다. 또한, Zero Padding을 활용하여 Identity Mapping을 수행하여 네트워크의 학습을 더욱 용이하게 만듭니다. Residual Network는 이와 같은 방식으로, 더욱 깊은 네트워크 구조에서도 효과적으로 학습할 수 있도록 설계되었습니다.


📌 finish

ResNet(Residual Network)은 딥러닝 모델의 발전에 혁신적인 전환점을 제공한 중요한 구조입니다. ResNet의 가장 큰 강점은 잔차 학습(residual learning)을 통해 네트워크의 깊이를 효과적으로 확장하면서도 학습의 안정성을 유지할 수 있다는 점입니다. Residual Block과 Shortcut Connection을 통해 기울기 소실(vanishing gradient)과 기울기 폭주(exploding gradient) 문제를 해결하면서, 매우 깊은 네트워크에서도 뛰어난 성능을 발휘할 수 있게 되었습니다.

개인적으로는, ResNet의 구조가 어떻게 깊은 네트워크에서 효율적인 학습을 가능하게 하는지에 대해 많은 통찰을 얻었습니다. ResNet의 접근 방식은 최적화와 네트워크 디자인에서의 혁신을 잘 보여줍니다.

ResNet 파이토치 구현 코드
ResNet을 구현한 코드입니다. 사이즈를 바꿔가보며 학습을 시켜보면 도움이 되실 겁니다.
model.py에 ResNet의 구조를 코드로 구현해놓았습니다. 지금까지 구현한 코드 중에서는 가장 어려운 것 같네요.

0개의 댓글