본문 바로가기
딥러닝

ResNet 읽기

by HMangoo 2022. 3. 10.

Deep Residual Learning for Image Recognition

 

https://arxiv.org/abs/1512.03385

 

Deep Residual Learning for Image Recognition

Deeper neural networks are more difficult to train. We present a residual learning framework to ease the training of networks that are substantially deeper than those used previously. We explicitly reformulate the layers as learning residual functions with

arxiv.org


주요결과분석

 위 사진은 이 논문에서 다루는 model의 퍼포먼스를 가장 잘 보여주는 비교 그래프라고 할 수 있다. 왼쪽은 일반적인 CNN, 오른쪽은 잔여 학습(residual learning)을 적용한 CNN의 training error이다.

 VGG network에서는 layers를 16, 19층으로 깊게 쌓아 더욱 풍부한 특징을 데이터로 추출해 낼 수 있었다. 이에 따라 layer를 깊게 쌓아본 결과 역효과로 성능이 떨어지는 문제가 있는데, 왼쪽의 일반적인 CNN에서 확인해볼 수 있다. 이 논문에서는 이 문제를 언급하고 또한 개선할 수 있는 문제로서 resudual network를 제안한다. 오른쪽에서 그래프에서는 잔여학습을 통해 layer가 깊어지면 training error가 더 낮아지는 것을 보여준다. 또한 기존의 network보다 ResNet의 성능 자체에서 더욱 좋아지는 것을 확인할 수 있다. 

 

Concept

ResNet에서 다루는 중요한 concept은 "Identity Mapping"이다. 

 일반적으로 하나의 입력이 들어왔을 때 weight layer에서는 convolution 등의 연산과 ReLU와 같은 활성화 함수를 지나고 연속적으로 weight layer를 지나도록 구성한다. 입력을 x라고 할 때 이와 같은 mapping을 H(x)(conv. layer의 출력)라고 둔다. 이 논문에서는 기존의 mapping방법을 취하지 않고 새로운 mapping을 이용하여 최적화를 더 쉽게한다. 위 그림의 첫번째 layer를 W1, 두 번째 layer를 W2, 활성화 함수를 a라고 했을 때  F(x)는 두개의 weight layer를 거쳐 W2 * a * (W1 * x)가 되어 최종 output은 F(x) + Wx가 된다. (여기서 W는 linear projection으로, F(x)의 dimension가 기존입력값의 dimension을 동일하게 하여 F(x)에 더할 수 있도록 만드는 것이다). 최종식은 y  =  F (x, {Wi }) + Ws x와 같이 표현할 수 있는데, 주의할 점은 F는 multiple convolution layers를 의미한다. 하나의 layer만 사용할 경우 linear layer와 유사하여 advantage가 없다.

 


Abstract

 neural networks가 깊을수록 training을 하는 것이 더 어렵다. 이 논문에서는 이전에 등장한 논문의 framework보다 더 깊은 신경망의 training을 쉽하게하는 Residual learning framework에 대해 제시한다. 이는 함수를 새로 만들지 않고 *residual function의 learning(잔여학습)을 통해 layers를 재구성(reformulation)하는 방법이다. 이해하기 쉽도록 데이터를 이용한 실험(경험적 증거)을 통해 residual networks가 더 깊은 신경망에서 더 쉽게 최적화되고, accuracy를 얻어내는 것을 보여준다. VGG net보다 약 8배 더 깊은 152개의 layers를 쌓았지만, 복잡성을 줄여 ImageNet dataset을 학습하고, ILSVRC 2015에서 3.57%의 에러를 달성하며 1등을 차지했다. 또한 CIFAR-10 데이터를 100, 1000개의 layers로 진행하여 높은 성능을 보여주었다.

*간략히) residual learning(잔차학습) : 이전 layer의 결과를 다시 이용하는 것이다. 이 방법에서는 입력 layer를 참조하는 residual function을 사용하여 최적화와 정확도 측면의 향상을 이끌어 낸다.

 

Introduction

 첫 문단에는서 reference된 많은 논문에서 deeper model일수록 성능이 더 좋다는 것을 말해주고 있다.(컨볼루션 신경망을 깊게 쌓는 것은 이미지 분류에서 돌파구의 역할을 했다 - low,mid,high level의 feature가 추출이 되고 레이어가 깊다는 것은 특징의 "level"도한 풍부해 진다는 것이다) 하지만, 문제는 gradients가 사라지는 문제(vanishing gradients)가 발생한다는 것이다. vanishing gradients는 backpropagation에서 layer의 깊이가 깊어질수록 미분을 많이 하기 때문에 앞layer일수록 미분값이 작이져 output에 대한 weight가 작아지는 것이다. 하지만, 이는 normalized initialization[23, 9, 37, 13], intermediate normalization layers[16], stochastic gradient descent (SGD) with backpropagation[22] 등의 다양한 방법으로 개선되어 왔다.

 

 network가 더 깊어질수록 accuracy가 빠르게 감소하는 degradation 문제가 발생한다. degradation은 정확도가 어느 순간부터 정체되고 레이어가 더 깊어질수록 성능이 더 나빠지는 현상이다. 이 문제는 layers가 더 깊어질수록 training error도 높게 나타나기 때문에 과적합(overfitting)의 문제는 아니다.(이는 [11, 42]에 실험적으로 증명되어 있다. 아래의 Figure1에서 직관적으로 알아볼 수 있다.

이에 이 논문에서는 degradation 문제를 해결하기 위해 deep residual learning 프레임워크를 도입한다. 

 

deep residual learning -> 쌓여진 레이어가 바로 다음 레이어에 fit되는 것(directly fit a desired underlying mapping)이 아닌 residual mapping으로 학습되도록 한다. 바로 mapping하는 것이 H(x)라고 할 때, 비선형적 layers 적합을 F(x) := H(x) - x로 한다. (이때 H(x) - x를 잔차(residual)이라고 한다) 즉 F(x)0이 되는것, H(x)x로 mapping하는 것이 학습의 목표가 된다. 이때, residual function을 이용한 mapping이 원래의 mapping보다 최적화가 더 쉽다고 말한다. 극단적으로 'identity mapping'을 optimal이라고 하면, 비선형적인 레이어를 쌓아서 0으로 만드는 것이 identity mapping보다 residual이 더 쉽다고 말하고 있다.

 

F(x) + x의 공식은 "shortcut connections"인 것을 알 수 있다. 위 'Concept'의 Figure 2.를 보면 shortcut connections은 하나 또는 하나 이상의 레이어를 건너 뛴다. 이 경우 shortcut connections은 identity mapping으로 수행되면서 추가적인 파라미터가 필요하지 않고 추가적인 복잡도가 없다. 따라서, 이 논문의 방법을 사용함으로써 plain의 경우보다 최적화가 더 쉽고 깊어가 깊어질수록 더 높은 accuracy를 얻어낼 수 있다.

 

Related Work

 Residual 방법과 Shortcut Connections역시 많은 reference에서 사용되었었다는 것을 알려준다. 비교 대상인 "highway network"[42, 42]와 다른점으로 ResNet에서는 parameter-free인 identity shortcuts을 가지며, 항상 residual function을 이용한다. 더하여 100가 layers가 넘는 것도 큰 특징이다.

 

Deep Residual Learning

1) Residual Learning

  일반적 mapping, 즉 neural network에서 여러 개의 비선형 layers는 점진적으로 복잡한 함수를 학습하는 것이라고 할 수 있는데, ResNet에서는 residual finctions을 이용하므로 F(x) = H(x) - x를 학습하는 것이다. 두 function의 차이는 multiple 연산의 이항으로 별 차이가 없어보이지만 학습의 난이도가 쉬워진다.

 이 재구성은 degradation problem의 솔루션으로 직관적이지 않아보지만, 더해지는 layers가 identity mapping이라고 한다면 더 깊은 모델은 얕은 모델에 비해 training error가 높아지지는 않을 것이다. 실질적으로 최적화 함수가 zero mapping보다 identity mapping에 가깝다면, 이전 layer에서의 값인 x를 보존하고 추가적으로 필요한 정보(F(x))를 학습하는 식으로 동작을 하는 것이 매 layer의 weight값 마다 새로운 mapping을 통해 학습을 진행하는 것보다 더 쉬울 것이다. 또한, Fig. 7에서 residual finctions이 일반적으로 더 작은 response값을 보여줌으로써 degradation에 대한 합리적인 preconditioning임을 제안한다. 

2) Identity Mapping by Shortcuts

 본 논문에서는 하나의 block을 y  =  F (x, {Wi }) + x로 정의 했다. F는 residual mapping을 의미하고, F의 x는 input, 외부의  x는 shortcut connection을 의미한다. 만약 layer를 두 번 중첩하는 경우 함수 F는 F = W2 σ(W1 x)와 같이 나타낼 수 있다. 이 식에서는 biases값을 고려하지 않는다. shortcut connection을 이용할 때는 추가적인 파라미터가 필요하지 않다. F를 만들 때 single layer를 사용하면 linear layer가 사용된 것과 마찬가지이므로 advantage가 없다.

 

3) Network Architectures - Plain Network

 VGG nets의 기법을 따라 conv. layers를 3*3 filter로 사용하고, output feature map의 size가 같도록 만들기 위해서 같은 개수의 필터를 사용한다 feature map의 size가 절받으로 줄어들 때, fiter의 개수를 2배 늘려(채널 2배), layer마다의 time complexity를 유지한다. pooling layer를 사용하지 않고 conv. layer에서 stride를 2로하여 downsampling을 진행. 마지막 부분에서 average pooling을 하고 1000개의 class로 분류할 수 있도록 하였다. 이로써 VGG net보다 저 적은 filter를 가지며(더 적은 파라미터), 복잡도 또한 낮았다. (3.6 billionFLOPs <- 19.6 billion FLOPs(VGG19))

 

FLOPs : 딥러닝 모델에서 계산 복잡도를 나타내기 위한 척도, 절대적인 연산량의 횟수

 


Deeper Bottleneck Architectures

Architectures for ImageNet

 왼쪽 사진에서 50, 101, 152 layer의 모양이 위의 18,34 layer와 다른 것을 확인할 수 있고. 오른쪽 사진에서는 BottleNeck design을 볼 수 있다. BottleNeck design은 3개의 layers로 1*1과 3*3, 1*1 convolution을 순서대로 진행한다. 1*1 layers는 dimensions를 줄이거나 늘리는 역할을 한다. Convolution의 Parameters는 Convolution Parameters = Kernel Size x Kernel Size x Input Channel x Output Channel로 계산이 되는데, 1*1 Convolution은 1 x 1 x Input Channel x Output Channel으로 연산량이 작아 Output Channel을 줄이거나 키울 때 용이하다고 할 수 있다. 3*3 convolution은 동일한 채널을 갖는 1*1 convoultion 보다 연산량이 9배 많기 때문에, 1*1 conv.로 채널 수를 줄여 3*3을 통과하고 다시 1*1로 채널을 증가시킨 것이다. 또한 BottleNeck design에서 역시 Identity shortcuts이 projection을 사용하는 것보다 더 효율적이다. 이로써 50, 101, 152와 같은 layer의 Network를 구성하였고, 152-layer ResNet이 11.3billion FLOPs, 16/19 layer의 VGGNet이 각각 15.3/19.6 billion FLOPs로 더 낮은 복잡도를 가질 수 있었다.

 

'딥러닝' 카테고리의 다른 글

오픈소스 LLM 쉽게 이용하는 사이트 모음  (0) 2024.04.26
Spatial Transformer Networks  (0) 2022.03.20
VGGNET  (0) 2022.03.09
딥러닝 개념  (0) 2022.02.22

댓글