-
ResNet 논문 리뷰study 2021. 12. 1. 15:42
깊은 neural networks 에서는 모델을 학습하기가 더 어려워진다.
그래서 이 논문에서 소개하고자 하는 것이 residual learning framework로, layer의 input을 참조하는 residual function을 학습하는 방법이다.
이 방법을 적용하면 optimize하기도 용이하며 깊은 network도 합리적인 정확도를 얻어낼 수 있다.
이 방법을 사용한 152 layer-residual nets로 ImageNet dataset에서 평가했을때 3.57%의 error를 가졌고 ILSVRC 2015 classification에서 1위를 했다.
Deep network에서는 수렴을 방해하는 vanishing, exploding gradient 문제가 있었다.
이 문제들은 normalized initialization과 intermediate normalization 연구를 통해 대부분 해결되었다.
Deep network가 수렴하기 시작할때, degradation 문제가 나타난다. 이것은 network가 깊어지면서 정확도가 포화상태에 도달하게 되면 성능이 급격하게 떨어지는 현상이다. 이 현상은 overfitting으로 인해 일어나는 것이 아니며 depth가 적절하게 설계된 모델에 더 많은 layer를 추가하면 trainning error가 커진다는 연구 결과에 기반한다.
Residual Learning Framework를 도입하면 이러한 성능 저하 문제를 해결할 수 있다.
원래 original mapping을 H(x)로 나타낸다면 stacked nonlinear layer의 mapping인 F(x)는 H(x)-x로 학습한다.
F(x) = H(x)-x 이므로, original mapping은 F(x)+x로 재공식화된다.
H(x)의 결과를 x가 되도록 학습하는것보다는 F(x)가 0이 되도록 학습하는 것이 쉬울 것이라는 직관에 따라, 위에서 언급한 residual mapping을 optimize하는 문제가 더 쉽다고 가정한다.
shortcut connection
shortcut connection은 하나 이상의 layer를 건너뛰는 것이다.
input인 x가 2개의 stacked layer를 거친 결과:=F(x)와 x를 더한 후에(:= F(x)+x) 이것을 ReLU 함수에 통과 시킨다.
이러한 identity shortcut connection은 별도의 파라미터나 computational complexity가 추가로 요구되지 않는다.
따라서 common library를 사용하여 쉽게 구현할 수 있다.
Identity Mapping by Shortcut
모든 few stacked layers마다 residual learning을 사용하자.
위 그림에서 봤던 것과 같이 building block은 y = F(x, {Wi})+x 로 정의된다.
F(x, {Wi})는 학습돼야 할 residual mapping을 나타낸다.
layer가 두 개 있는 경우에는 F = W2σ(W1x)로 나타낼 수 있다. 이때 σ는 ReLU를 나타내며, bias는 표기의 간소화를 위해 생략된다. F+x 연산은 shortcut connection과 element-wise addition으로 수행되며, 이 연산 후에는 ReLU를 적용시킨다.
이떄 F+x 연산은 둘의 차원이 같아야 하며, 차원을 같게 해주기 위해 다음과 같이 linear projection Ws를 수행할 수 있다.
y = F(x, {Wi})+Wsx
F는 3개 이상의 layer를 포함하는 형태도 가능하다.
Network Architectures
다음과 같은 형태의 Plain network와 Residual network를 비교해서 테스트해보자.
- Plain network
conv layer는 3x3 filter를 갖고, 같은 output feature map size에 대해 layer는 같은 수의 filter를 같는다. 그리고 feature map size가 1/2인 경우, 각 layer 당 time complexity를 보전하기 위해 filter 수를 2배로 늘린다.
downsampling 시에는 conv layer의 strides를 2로 하고 network의 끝에는 GAP과 activation이 softmax인 1000-way FC layer로 구성한다.
- Residual network
위의 plain network에 shortcut connection을 삽입하여 network를 구성한다.
identity shortcut은 input과 output의 차원이 동일할 떄 직접 사용될 수 있고 차원이 달라지는 경우에는 zero padding이나 projection shortcut으로 dimension matching한 후 사용한다.
shortcut connection이 다른 크기의 feature map 간에 mapping될 경우, 두 옵션 모두 strides를 2로 한다.
ImageNet dataset에 대한 실험은 AlexNet과 VGG 방법을 따른다.
ImageNet Classification
1000개의 class로 구성된 ImageNet 2012 classification dataset에서 제안하는 방법으로 평가했다.
테스트 결과는 top-1과 top-5 error를 모두 평가한다.
- Plain Networks
18-layer network에 비해 34-layer network의 validation error가 높게 나왔다. 이는 deep한 plain network는 exponentially low convergence rate를 가지며, 이것이 training error의 감소에 영향을 끼쳤기 때문이다.
- Residual Networks
기본적인 구성은 plain network와 동일하고 각각의 3x3 filter 쌍에 shortcut connection을 추가했다.
모든 shortcut connection은 identity mapping을 사용했으며 dimension matching을 위해 zero padding을 사용했다.
이제 결과를 보자.
34-layer ResNet이 18-layer ResNet보다 우수한 성능을 보여주었다. 이는 성능 저하 문제가 잘 해결되었고 증가된 depth에서도 합리적인 accuracy를 얻을 수 있다는 걸 의미한다.
두번째로, 34-layer ResNet은 validation data에 대한 top-1 error를 3.5% 줄였다. 이는 extremely deep systems에서 residual learning의 유효성을 입증한다.마지막으로 18-layer ResNet이 더욱 빠르게 수렴했다는걸 알 수 있다.
Deeper Bottleneck Architectures
다음으로 ImageNet dataset을 위한 deeper network에 대헤 알아보자.
감당할 수 없는 training time에 대한 우려를 위해 building block을 bottleneck design으로 수정한다.
다음 그림과 같이 2-layer stack 대신 3-layer stack을 사용한다.
이러한 bottleneck building block은 50/101/152 -layer ResNet과 같은 경우에 사용된다.
'study' 카테고리의 다른 글
[Git] [GitHub] 깃허브 사용법(왕초보) (0) 2021.01.28