[ResNet] Deep Residual Learning for Image Recognition
Abstract
이 논문에서는 deep network는 대체로 train 하는 것이 어렵기 때문에 깊은 모델의 train을 더 쉽게 만들어주기 위한 방법으로 Residual Learning Framework를 제시합니다. Deep network가 train이 어려운 이유는 뒤에서 설명됩니다.
Residual Learning Framework는 redidual function을 layer에 새롭게 추가하는 방식입니다. 뒤에 어떤 구체적인 방식으로 이루어지는 지와 accuracy가 얼마나 좋아지는지에 대해서는 뒤에 실험적인 증거와 함께 설명됩니다.
그래서 ResNet은 VGGNet 보다 8배 깊은 layer로 훨씬 더 좋은 성능을 보이는 것 뿐만 아니라 더 적은 dropout 같은 테크닉을 적용하지 않아 더 적은 complexity를 가진다고 합니다. 이러한 장점은 Classification 뿐만이 아니라 Detection, localization, segmentation에서도 뛰어난 성능을 보였다고 합니다.
Introduction
먼저 일반적인 deep network는 low/mid/high level feature들을 합치는 것이며 depth를 늘려 이 feature의 level을
더 다양하게 할 수 있다고 설명하고 있습니다. 우리가 deep network를 살펴보면 각 layer들은 각각 담당하는 특징들이 있습니다. 처음의 layer는 이미지의 모든 픽셀을 데이터로 받기 때문에 low level feature 즉, 색상이나 테두리 같은 데이터를 인식 합니다. layer가 깊어질 수록 데이터의 크기가 더 압축 되기 때문에 (특정 객체, 객체의 자세 등) 더 높은 level feature를 인식하게 됩니다. 따라서 layer를 깊게 할 수록 이런 데이터를 더 다양하게 확보 할 수 있습니다.
하지만, layer를 깊게하면 생기는 문제들이 있습니다. vanishing gradient는 가장 대표적인 문제인데, layer가 깊어질수록 각 layer에서의 weight가 점점더 작아지며 0에 가까워져서 결국 학습이 잘 되지 않는 현상입니다. 이런 문제는 보통 Relu라는 activation 함수를 사용하고 normalization을 통해 해결이 되어왔습니다. 하지만 이런 방법들은 degradation이라는 문제는 해결하지 못했고 이에 대한 해결방안으로 residual learing framework가 사용 될 수 있습니다. Degradation 문제는 network의 깊이가 깊어 질 수록 오히려 accuracy가 떨어지는 현상을 말합니다. 즉, 더 깊은 layer를 통해 더 많은 정보를 반영하도록 설계를 했는데 accuracy가 오히려 더 떨어졌다는 것이죠.
일반적인 모델에서 우리가 H(X)라는 함수를 fitting한다고 생각해봅시다. 우리는 각 데이터를 H(X)에 넣었을 때 output으로 정확한 label이 나오기를 기대합니다. 이때 Residual learning framework는 identity mapping을 추가해주는 것입니다.
위의 이미지에서와 같이 기존에는 H(X)를 fitting 시켰다면 Residual learning에서는 X라는 identity mapping을 추가해서 F(X) + X가 결과로 나오도록 하고 있습니다. 즉, 우리는 F(X)를 학습시키고 그 결과에 X를 더해주는 것입니다. 따라서 우리가 새롭게 학습시키게된 함수는 F(X) = H(X) - X 입니다.
논문에 저자는 직관적으로 두 함수 모두 결국 같은 값으로 점근하게 될 것이다라고 말하고 있습니다. 하지만 학습에 난이도에 있어서 F(X)가 훨씬 쉽다 라고 하고있습니다. 예를 들어 극단적으로 H(X)의 최적의 값이 X였다면 H(X)를 X로 학습시키는 것 보다 F(X)를 0으로 학습시키는 것이 더 쉬울 것입니다.
그래서 F(X) 뒤에 더해주게 되는 값 (X)는 shortcut connection이라고 부릅니다. shortcut connection으로 identity mapping, 즉 X를 사용하게 되면 파라미터를 추가하지도, complexity를 증가 시키지도 않습니다. 따라서 Residual learning을 추가하는 것은 파라미터의 추가, complexity의 증가 없이 더 쉽게 training을 진행 할 수 있게 됩니다.
Residual Learning
Residual learning의 포인트는 H(X)와 H(X) - X 를 학습시키게 되면 모두 비슷한 값을 가지게 되겠지만 후자가 난이도가 더 쉽가는 것에 있습니다. 그 이유를 논문에서는 다음과 같이 설명합니다.
만약 깊은 network가 identity mapping이 되도록 학습이 된다면 얕은 network 보다 training error가 더 적을 수는 없을 것입니다.
하지만 위의 그림과 같이 실제로 일반적인 (Residual 학습을 적용하지 않은) 모델에서의 결과를 살펴보면 깊은 layer의 training error가 더 높게 나오는 것을 볼 수 있습니다. 여기서 알 수 있는 점은 깊은 network는 여러개의 non linear layer로 구성되기 때문에 identity mapping이 되도록 학습하는 것이 어렵다는 것입니다. 따라서 residual function을 적용하게 되면 깊은 모델이 identity mapping이 되도록 학습될 수 있기 때문에 학습 난이도가 쉬워진다 라는 것입니다.
Identity mapping by shortcuts
논문에서는 위의 그림에 대한 식을 다음과 같이 표현 합니다.
y = F(x, {Wi}) + x
F에 x라는 입력이 들어가게 되고 F(X) 함수로 인해 데이터를 변형한 뒤 나온 결과와 identity mapping인 X가 더해지는 형식입니다. 위의 그림에서는 F = W2σ(W1x)와 같은 형태일 것입니다.(bias 생략, σ는 Relu)
앞서 설명했던 것과 같이 identity shorcut은 추가적인 파라미터를 요구하지도 time complexity를 증가시키지도 않습니다. 이런 장점은 training 할 때 더 유용할 뿐만이 아니라 ResNet과 일반적인 network를 비교하는데 있어서도 공정하게 비교 할 수 있게 됩니다.
그리고 위의 식에서 X와 F의 dimension이 같아야 합니다. 만약 같지 않으면 linear projection을 적용하거나 zero padding을 통해 dimension을 같게 해야합니다. 그리고 F의 form은 유용하게 사용 할 수 있습니다. 논문에서는 2개 또는 3개의 layer를 가지는 F를 사용하는데 더 많은 layer를 사용해도 된다고 합니다. 하지만 1개의 layer를 사용하게 되면 linear layer와 비슷하기 때문에 residual learning의 장점이 사라지겠죠.
또한 위의 수식들은 간단하게 하기 위해 fully connected layer를 가정하고 적었지만 convolutional layer에 대해 서도 사용 할 수 있습니다.
Network architectures
Residual Network의 경우 input과 output이 같은 dimension일때 identity shortcut이 사용되며 다를 때는 zero padding 이나 projection shortcut을 사용합니다.
Implementation
데이터는 입력을 위해 이미지가 [256, 480]의 크기로 resize 되고 crop 해서 사용합니다. horizontal flip, per pixel
mean subtracted이 데이터에 적용됩니다.
standard color augmentation, Batch normalization(각 convolutional layer에) 사용됩니다.
initialization, mini-batch 256, 60x10^4 iter, weight decay = 0.0001, momentum = 0.9으로 설정 되었고 dropout은 사용하지 않았습니다.
learning rate의 경우 0.1 에서 시작하여 학습이 진행되지 않으면 10씩 나눠서 진해했습니다.
standard 10-crop testing이 test에 사용되었다고 합니다.
Experiment
plain layer의 경우 18layer 보다 34layer 에서 train error가 더 높게 나왔습니다. 그 이유는 vanishing gradient 때문은 아니었다고 저자가 얘기 합니다. plain network의 경우 Batch Normalization을 사용했기 때문에 vanishing gradient가 해결 되었을 것이라는 설명과 plain 34도 18에 비해 error가 높았던 것이지 전체적인 accuracy는 높았기 때문에 vanishing gradient에 의해 학습이 안된 것은 아니라고 합니다. 저자는 그 대신 deep plain network가 낮은 convergence rate 즉 수렴 속도가 느려서 training error에 영향을 미쳤다고 말하고 있습니다.
Residual network의 경우 network가 깊을수록 error가 떨어졌습니다. plain과 비교했을 때도 error가 감소했습니다.
또한 같은 18layer의 plain / resnet은 비슷한 accuracy를 가지지만 상대적으로 resnet이 더 빨리 감소
하는 경향을 볼 수 있습니다.
또한 앞서 살펴본 dimension이 다를 경우에 처리하는 방식에 대한 비교도 하고 있습니다. A의 경우는 dimension이 다를 때 zero padding shortcut을 사용하는 것이고 나머지 모든 shorcut은 parameter free입니다. B의 경우 dimension이 다를 때만 projection shortcut을 사용합니다. C의 경우에는 dimension이 다른 경우 같은 경우 모두 shortcut projection을 사용하게 됩니다. 이렇게 세가지 방법을 비교한 결과 A > B > C 순으로 error가 나옵니다. 그 이유로 저자는 A의 zero padding은 padding된 데이터에 의한 residual learning이 안되었기 때문이고 B의 경우 C에 비해 파라미터가 더 적기 때문에 그렇다고 설명 하고 있습니다. 하지만 3가지 모델의 차이가 B와 C의 증가한 time complexity, 파라미터의 개수에 비해 크진 않았기 때문에 projection이 필수는 아니다라고 설명하고 있습니다.
Bottleneck
Bottleneck의 경우 오른쪽의 그림과 같이 처음 1x1 layer로 차원을 줄인 후 convolution을 진행하고 다시 1x1 layer로 차원는 늘리는 것과 같은 구조입니다. 이런 구조에서 identity shortcut은 파라미터가 추가되지 않는 다는 점에서 더욱 효율적입니다.
논문의 마지막 부분에서 저자는 ResNet의 layer를 101, 152개 까지 늘려도 accuracy가 계속 증가했다고 합니다. 그리고 깊이를 이렇게 늘려도 VGG에 비해 적은 complexity를 가진다고 하고있습니다. 이러한 ResNet은 실험에서 사용한 ImageNet data 뿐만이 이나라 CIFAR-10같은 다른 데이터에서도 좋은 성능을 보여준다고 합니다.