ResNet: Deep Residual Learning for Image Recgnition 리뷰
ResNet은 2015년 ILSVRC와 COCO 대회에서 1등을 차지한 모델로, 대표적인 초창기 딥러닝 기반 컴퓨터 비전 모델 중 하나이다.
연구진은 학습시키기 어렵지만 유용한 깊은 신경망을 효과적으로 학습시키는 방법을 제안하여, 기존에 흔히 사용되던 VGG 모델보다 깊으면서도 복잡도는 더 낮은 ResNet 모델을 제안한다.
ResNet은 이미지의 복잡한 정보를 뽑아낼 수 있도록 매우 깊은 신경망을 만들면서도, 동시에 학습을 쉽게 유지하여 많은 데이터와 task에서 우수한 성적을 거두었다.
신경망의 깊이와 특성의 수준
딥러닝 기법은 다계층 구조를 통해 자연스럽게 저수준/중간수준/고수준의 다양한 수준(level)의 특성들을 학습한다. 특히 신경망을 더욱 깊게 함으로써 이러한 다양성을 더욱 풍부하게 할 수 있다.
당시에 ImageNet 데이터셋에 도전한 다양한 모델들이 16이나 30 계층의 아주 깊은 신경망을 사용해 성과를 내고 있었다.
비단 분류 뿐만 아니라, 여러가지 task에서 신경망의 깊이가 중요함이 드러나고 있었다.
깊은 신경망 학습의 어려움
깊은 신경망을 학습시키는 것은 기울기 소실, 기울기 폭주(vanishing/exploding gradients)와 같은 문제들로 인해 쉽지 않은 일이었으나, 적절한 가중치 초기화 방법이나 Batch Normalization 같은 방법들은 10개 이상의 계층을 가진 신경망들이 잘 학습될 수 있도록 하였다.
위에서 언급한 문제들이 극복되자 정확도 퇴보(degradation) 문제가 대두되었다. 신경망이 깊어짐에 따라 성능이 향상이 점점 적어지다, 오히려 감소하는 문제가 있었던 것이다. 예상외로 이것은 오버피팅으로 인한 것이 아니었다. 신경망의 크기를 키우는 것은 오히려 성능을 감소시켰다.
Deep Residual Learning Framework
이 논문에서는 정확도 퇴보 문제의 해법으로 deep residual learning framework, ResNet을 제안한다.
이 방법은 깊은 신겸망의 각 계층이 알아서 요구되는(desired) 연산을 학습하기를 기대하는 것이 대신, 이 계층들이 잔차(residual)를 학습하도록 한다.
저자들은 스킵 연결(skip connection)이라는 단순한 구조를 통해, 각 계층이 요구되는 연산 $\mathcal{H}(\mathbf{x})$를 학습하도록 하는 대신, 이상적인 연산과의 잔차 $\mathcal{F}(\mathbf{x}) :=\mathcal{H}(\mathbf{x}) - \mathbf{x}$를 학습하도록 한다.
스킵 커넥션은 위 그림처럼 어떤 입력 $\mathbf{x}$를 몇 개의 계층을 건너뛴 다음 건너뛴 계층들의 출력값 $\mathcal{F}(\mathbf{x})$에 더해준다.
이런 구조를 통해 $\mathcal{F}$는 자연스럽게, 요구되는 연산 $\mathcal{H}$ 대신 요구되는 연산에서 이전 입력 $\mathbf{x}$를 뺀 잔차 $\mathcal{H}(\mathbf{x}) - \mathbf{x}$를 생성하도록 학습된다.
이 과정에서 추가되는 가중치나 파라메터가 존재하지 않기 때문에, ResNet은 여전히 기존의 라이브러리들을 수정하지 않고 쉽게 구현하고, 학습될 수 있다.
Residual Learning
입력 $\mathbf{x}$에 대한 신경망 속의 비선형 계층 몇개의 요구되는 출력을 $\mathcal{H}(\mathbf{x})$와 같이 수식화한다고 할 때, 스킵 연결을 통해 출력에 이전 계층의 입력 $\mathbf{x}$를 더해주면 신경망은 $\mathcal{F}(\mathbf{x}) := \mathcal{H}(\mathbf{x}) - \mathbf{x}$를 출력하도록 점진적으로 학습된다.
결과적으로 출력값은 $\mathcal{H}(\mathbf{x}) \approx \mathcal{F}(\mathbf{x}) + \mathbf{x}$로 크게 다르지 않지만, 학습 과정에서는 차이가 발생하게 된다.
정확도 퇴보(Degradation) 문제는 추가된 계층들이 잘 학습되지 않아서 발생한다.
어떤 얕은 모델에 추가된 계층들이 그저 얕은 계층들의 출력값을 그대로 출력하기만 해도 성능은 유지되어야 한다.
그러나 오히려 계층을 추가하니 성능이 하락한다는 것은, 추가된 계층들이 그저 입력값을 그대로 출력하기만 하도록 학습되는 것조차 어렵다는 뜻이다.
스킵 연결 구조는 신경망이 입력$\mathbf{x}$과 요구되는 출력$\mathcal{H}(\mathbf{x})$의 잔차를 출력하도록 학습된다.
만약 추가된 계층이 입력값을 그대로 내놓도록 출력하고자 한다면, 그저 추가된 계층들의 가중치를 0으로 만들기만 한다.
학습해야 할 문제가 훨씬 단순해지는 것이다.
모델에 사용된 스킵 연결 구조는 2개나 3개의 계층마다 적용되었다.
만약 한 계층마다 적용하면, 스킵 연결된 구조가 비선형성을 잃어서 하나의 계층을 쓰는 것과 다름이 없어진다.
$$ \mathbf{y} = \mathcal{F}(\mathbf{x}, (W_i)) + \mathbf{x}$$
$\mathcal{F}(\mathbf{x}, (W_i))$은 잔차를 출력하도록 학습될 신경망의 출력, $\mathbf{y}$는 여기에 입력 $\mathbf{x}$를 더한 최중 출력값이다.
스킵 연결을 통과한 $\mathbf{x}$를 더해줄 때, element-wise 덧셈을 수행하기 위해 $\mathbf{x}$와 $\mathcal{F}(\mathbf{x}, (W_i)) $의 차원이 일치해야 한다.
만약 일치하지 않는다면 $W_s$ 행렬을 도입하여 크기를 맞춰준다.
$$ \mathbf{y} = \mathcal{F}(\mathbf{x}, (W_i)) + W_s\mathbf{x}$$
ResNet 구현
ImageNet에서의 실험을 위한 ResNet은 다음과 같이 구현되었다..
각 이미지는 높이와 너비 중 작은 영역이 [256, 480]크기를 갖도록 크기를 조정하여, $224\times 224$ 크기로 랜덤하게 크롭과 수평 반전을 수행한다.
그 다음, 각 픽셀에서 학습 데이터 이미지의 픽셀값 평균을 빼주는 centering을 수행하고, standard color augmentation을 수행했다.
각 합성곱 계층의 뒤에 활성화 함수 이전에 batch normalization을 적용했고, 신경망들은 He initialize 방법으로 초기화 하였다.
학습은 SGD를 이용하여 256 배치 사이즈에서 진행하였고, 학습율은 0.1로 시작하여 오차가 하락하지 않게되면 10으로 나누어졌다. 학습은 60만회 반복되었다. (에포크가 아니라, iteration이다!)
weight decay는 0.0001, 모멘텀은 0.9가 사용되었으며, 드랍아웃은 batch normalization이 있어서 쓰지 않았다.
실험
ResNet 구조 검증
ImageNet 데이터에서 각각 18개, 34개의 계층을 갖는 일반적인(Plain) 신경망과 ResNet구조의 신경망의 비교를 수행하였다.
일반적인 모델은 학습 과정에 따른 Validation Error가 오히려 더 작은 크기를 갖는 18계층 신경망에서 더 낮게 나왔지만, ResNet 구조에서는 34계층 신경망이 더 좋은 성능을 내었다.
위 실험에서도 검증되었지만 ResNet 구조를 적용한 경우, 18계층 ResNet보다 34계층 ResNet이 성능이 확실히 좋았다. 이는 정확도 퇴보 문제를 잘 극복하였음을 의미한다.
ResNet 구조의 신경망들은 같은 크기의 일반적 신경망보다 높은 성능을 내었고, 더 빨리 수렴하였다.
Identity vs. Projection Shortcuts
스킵 연결에서 이전 계층의 입력 $\mathbf{x}$와 신경망의 출력 크기가 달라지면 element-wise 덧셈을 수행하지 못 한다.
이를 해결하기 위해, (A) 추가적인 파라메터의 추가 없이 zero-padding하여 크기를 맞추거나, (B) 크기가 변하는 연결들에 대하여 어떤 Projection Matrix $W_s$를 사용하거나, (C) 아예 모든 스킵 연결에 Projection Matrix를 적용할 수 있다.
실험 결과, 일단 모든 방법이 스킵 연결이 없는 일반 신경망보다는 좋았고, B 방법이 A 방법에 비해 약간 좋았다.C는 B에 비해 꽤 좋은 성능을 내었다. C에서 추가 파라메터를 사용한 것이 성능을 향상시킨 것은 주목할 만하지만, 근본적으로 정확도 퇴보 문제를 해결하는데 직접적인 연관성은 없었기 때문에, 저자들은 C 방법에 크게 연연하지 않고, 오히려 복잡도를 유지하는 B 방법에 주목했다.
더 깊은 Bottleneck 구조
저자들은 한층 더 깊은 ResNet을 설계하기 앞서, residual module에 병목 구조를 적용하기로 했다.
이를 통해 시간 복잡도를 크게 줄였다.
각 residual module $\mathcal{F}$에 대하여 3개의 계층을 이용하였는데, 이때 각 계층의 필터 크기를 $1\times 1, 3\times 3, 1\times 1$로 하고, 첫번째와 마지막 계층이 차원 축소와 확대를 담당하도록 하였다.
ResNet-50
저자들은 ResNet-34에 위에서 설명한 bottleneck 구조를 적용하고, 차원 변경에는 B 방법(Projection Matrix 사용)을 사용하여 50개의 계층을 갖는 ResNet-50을 구성했다. 이 모델은 38억 FLOPs의 연산량을 갖는다.
ResNet-101, ResNet-152
나아가 저자들은 각각 101개, 152개의 계층을 갖는 아주 깊은 모델도 만들었다.
이때, 병목 구조는 적용하지 않았음에도 신경망의 깊이가 아주 깊어진 것에 비해 연산량은 VGG-16/19보다 적었다.
결론
ResNet은 깊은 신경망을 학습시킬 때, (얕은 신경망에 비해 상대적으로) 추가된 레이어들이 잘 작동하지 않는 문제를 잔차를 이용해 해결한다.
이 방법을 통해 152 계층에 달하는 아주 깊은 신경망도 효과적으로 학습시킬 수 있음을 보이고, 여러 데이터셋에서의 실험을 통해 모델을 검증한다.
신경망에 아주 단순한 구조를 더하여, 문제를 재정의하는 것만으로 큰 성능 개선을 내었다는 점에서 정말 아름다운(?) 논문인 것 같다. 연구실 선배가 이 논문만큼 contribution이 큰 논문도 흔치 않다며, 음미하며 읽어보라 하던데 과연 놀랍다.
이제 구현하러 가야지~
'Deep Learning > 논문 리뷰' 카테고리의 다른 글
댓글
이 글 공유하기
다른 글
-
Near-Duplicate Video Retrieval by Aggregating Intermediate CNN Layers 리뷰
Near-Duplicate Video Retrieval by Aggregating Intermediate CNN Layers 리뷰
2023.03.29 -
R-MAC: Particular Object retrieval with Integral Max-Pooling of CNN Activations 리뷰
R-MAC: Particular Object retrieval with Integral Max-Pooling of CNN Activations 리뷰
2023.03.28 -
SSD: Single Shot MultiBox Detector 논문 정리
SSD: Single Shot MultiBox Detector 논문 정리
2023.01.05 -
[논문 리뷰] ReXNet: Diminishing Representational Bottleneck on Convolutional Neural Network
[논문 리뷰] ReXNet: Diminishing Representational Bottleneck on Convolutional Neural Network
2020.08.23