해당 논문은 2016년 CVPR 학회에 Microsoft에서 발표한 논문입니다.
논문에 대한 전문을 보시려면 여기를 클릭하세요.
혹시 잘못된 내용이 있으면 언제든지 댓글 부탁드립니다!
지난 Paper Review에서는 Resnet의 논문에 대해 알아봤습니다. 이번에도 동일하게 Microsoft에서 Resnet의 논문이 왜 좋은 성능이 나왔는지와 다양한 시도를 통해 개선된 Resnet을 제안하는 논문입니다.
1. 논문 정리
Abstract
지난 논문인 "Deep Residual Learning for Image Recognition"이 깊은 모델 구조에서도 좋은 성능을 보여줬습니다. 이 논문에서는 Residual building block에서의 propagation formulations을 분석합니다. ablation 실험들을 통해 identity mapping의 중요성을 검증합니다. 또한 이전의 residual에서 개선된 새로운 residual unit을 제안합니다. 이 방법을 통해 CIFAR-10과 CIFAR-100에서 1001-layer resnet의 성능을 개선했습니다. 또한 ImageNet에서도 200-layer resnet 성능을 개선했습니다.
1) Analysis of Deep Residual Networks
이전 논문에서 제시했던 Residual block의 수식은 다음과 같습니다.
$$ y_{l} = h(x_{l}) + F(x_{l}, W_{l})$$
$$ x_{l+1} = f(y_{l})$$
여기서의 $F(x_{l}, W_{l})$ 부분은 $l$번째의 블록에서의 residual function입니다. $h(x_{l})$은 identity mapping을 나타내며, $f(y_{l})$은 RELU처럼 activation function을 뜻합니다. 만약, 함수 $f$ 가 identity mapping이라고 한다면, $x_{l+1} \equiv y_{l}$ 가 성립하게 되고, 이를 통해 아래와 같은 식을 얻을 수 있습니다.
$$ x_{l+1} = x_{l} + F(x_{l}, W_{l})$$
위의 식을 재귀적으로 적용하면 더 깊은 $L$번째에 대한 unit을 아래와 같은 식으로 얻을 수 있습니다.
$$ x_{L} = x_{l} + \sum_{i=l}^{L-1}{F(x_{i}, W_{i})} $$
위의 식은 2가지 성질을 가지게 됩니다.
첫 번째, 더 깊은 $L$번째 unit은 더 낮은 layer로부터 얻어진 $x_{l}$과 residual functions의 합으로 표현할 수 있습니다.
두 번째, 어떤 깊은 $L$번째 unit은 다음과 같은 식으로 표현될 수 있습니다.
$$ x_{L} = x_{0} + \sum_{i=0}^{L-1}{F(x_{i}, W_{i})}$$
위의 식에서의 backpropagation을 위해 $\frac{\partial \varepsilon}{\partial x_{l}}$을 구해보면 아래와 같은 식을 얻을 수 있습니다.
$$\frac{ \partial \varepsilon}{ \partial x_{l}} = \frac{ \partial \varepsilon}{ \partial x_{L}} \frac{\partial x_{L}}{\partial x_{l}}$$
$$ = \frac{ \partial \varepsilon}{ \partial x_{L}} ( 1 + \frac{ \partial}{ \partial x_{l}} \sum_{i=l}^{L-1}{F(x_{i}, W_{i})}) $$
위의 식을 통해서, 깊은 $L$번째 층에서의 gradient가 shallow한 layer에 보존된 채로 전달될 수 있음을 볼 수 있습니다.
2) On the Importance of Identity skip Connections
위에서는 identity mapping이라고 가정했을 때 깊은 layer의 gradient가 잘 보존되어서 전달되는 것을 확인할 수 있었습니다. 그렇다면, 기존의 identity mapping을 나타내던 $h(x_{l}) = \lambda_{l} x_{l}$ 이라고 가정해보면, 아래의 수식을 얻을 수 있습니다.
$$ x_{l+1} = \lambda_{l} x_{l} + F(x_{l}, W_{l})$$
위에서 했던 방법과 동일하게 재귀적으로 $L$번째의 unit을 표현하면 아래와 같은 식을 얻을 수 있습니다.
$$ x_{L} = ( \prod_{i=l}^{L-1}{\lambda_{i}})x_{l} + \sum_{i=l}^{L-1}{\hat{F}(x_{i}, W_{i})}$$
위의 식을 미분하여, $x_{l}$에서의 gradient를 구해보면 아래와 같은 식을 얻을 수 있습니다.
$$ \frac{ \partial \varepsilon}{ \partial x_{l}} = \frac { \partial \varepsilon}{\partial x_{L}} \left( (\prod_{i=l}^{L-1}{\lambda_{i}}) + \frac{\partial}{\partial x_{l}} \sum_{i=l}^{L-1}{\hat{F}(x_{i}, W_{i})} \right) $$
만약 위의 식에서 $\lambda_{i}$ 가 1 보다 크다면, 해당 gradient는 기하급수적으로 증가하게 되고, 1보다 작다면 gradient가 기하급수적으로 작아지고 vanishing 현상이 발생할 수 있습니다. 이를 검증하기 위해 아래의 실험을 진행합니다.
첫 번째로 constant scaling 방법은 $\lambda$를 0.5로 세팅하고, $F(x, W)$에는 적용하지 않은 경우와 $F(x, W)$에 1 - $\lambda$를 적용한 두 가지를 실험했습니다. 두 개 중에는 뒤의 것이 잘 수렴하는 것을 보였으나, original보다 높은 에러를 얻게 되었습니다. 이를 통해 shortcut의 scale down은 model이 optimize 하기 어렵다는 것을 알 수 있었습니다.
두 번째로 exclusive gating 방법에서 $g(x)$를 적용하는 데, 여기서의 $g(x)$는 1x1 Conv와 시그모이드를 의미합니다. 그래서 $F(x, W)$에는 $g(x)$만큼 곱해주고, skip connections에는 1 - $g(x)$를 곱해주는 방식을 사용합니다.
세 번째로 shortcut-only는 exclusive gationg 방법에서 $F(x, W)$에 $g(x)$를 곱해주지 않고 skip connections에만 1 - $g(x)$를 곱해주는 방법입니다.
이 외에도 skip connections 부분에 1x1 Conv를 적용하거나 dropout을 적용해봤으나, 결과는 아래의 표와 같습니다.
어떠한 방법을 활용해도 original 방법보다 좋은 성능을 보이는 것은 없었습니다. 이를 통해 skip connections을 보존하는 것이 좋은 성능을 얻을 수 있음을 알 수 있습니다.
3) On the Usage of Activation Functions
이번에는 활성화 함수에 대한 다양한 실험을 통해서 성능을 개선하려고 했습니다. 아래의 그림처럼 4개의 방법들을 시도합니다.
이전의 논문에서 제안한 방법은 그림에서 가장 좌측의 형태로 구성했습니다. 기존의 방법은 skip connection에도 활성화함수가 영향을 미치게 되기 때문에 이를 추가하거나 제거하는 다양한 방법을 제안합니다.
다양하게 제안한 방법을 동일한 데이터셋에서 얻은 결과는 다음과 같습니다.
놀랍게도 full pre-activation으로 수정했을 때, original보다 좋은 성능을 얻을 수 있었습니다. BN after addition 방법은 BN Layer가 기존의 skip connections를 변경해서 학습을 방해해서 기존 방법보다 좋지 못하다고 언급합니다. 또한 ReLU before addition의 경우에는 ReLU를 거치고 나게 되면 모든 값이 양수가 되기 때문에, forward propagated signal이 증가하게 됩니다. 이러한 이유로 잘 동작하지 못한다고 설명합니다.
우측의 그림을 보시면, 직선형태로 이어진 것이 test에 대한 결과입니다. train일 때에는 original에서 더 낮은 error를 얻을 수 있었지만 test에서는 pre-activation을 적용한 것이 더 좋은 성능을 얻을 수 있었습니다. 이를 통해, pre-activation방법이 쉽게 optimize 할 수 있었고, regularization 효과를 얻을 수 있었다고 설명하고 있습니다.
4) Results
CIFAR-10과 CIFAR-100에 대해서 학습한 결과 위의 표와 같은 결과를 얻을 수 있었습니다. 이전의 논문에서는 1000 layer처럼 엄청 깊게 쌓았을 때, overfitting되는 문제가 있었는데 이번 논문에서 그 부분을 어느 정도 개선하여 좋은 성능을 보여줬습니다.
ILSVRC 2012 데이터셋에 적용했을 때에도 이번에 적용한 방법으로 깊게 쌓을 수록 더 좋은 성능을 보이는 것을 알 수 있었습니다.
또한, 이번에 구성한 모델의 경우 계산 복잡도가 깊이에 선형적으로 증가해서 계산복잡도를 많이 줄일 수 있었습니다.
2. 3줄 요약
- 이전 논문에서 언급했던 Residual Connection은 정보를 전달하기에 좋은 방법임을 검증했습니다.
- 이전 논문에서 weight layer 이후에 있었던 activation function을 pre-activation으로 변경했을 때 더 좋은 성능을 보였다.
- 이번 논문에서 제안한 방법으로 layer 개수를 1001까지 쌓아서 발생했던 Overfitting 문제를 극복했습니다.