Deep Residual Learning for Image Recognition
Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun
(Submitted on 10 Dec 2015)
arXiv : 1512.03385
CIFAR-10을 이용한 plain network 의 20층, 50층짜리 비교 그림이다.
test & training error 모두 56층 plain net이 더 높은 에러율을 보인다.
test의 경우 overfitting이 발생하면 더 높을 수 있지만 만일 정말 overfitting이라면 training error는 56층이 더 낮아야한다.
여기서 의문이 생긴다. 네트워크가 deep할수록 더 좋은 성능을 보일 것이라 생각했는데 그렇지가 않았기 때문이다.
적은 층수를 가지고 있는 model 1 네트워크를 만든다.
그리고 model 1 네트워크를 그대로 복사하고 뒷층에 받은 입력을 그대로 뱉어주는 즉, identity mapping 층을 더한 model 2 네트워크를 만든다.
뒤에 추가된 층들이 identity mapping을 하므로 model 2는 model 1만큼의 성능을 보이고 더해진 층들이 identity가 아닌 더 좋은 성능을 만들어내는 층이 된다면 model 1의 성능보다 좋아야한다.
즉, 예상대로라면 model 2는 model 1의 성능보다 같거나 더 좋아야한다.
하지만 그렇지가 않았다. ==> degradation (성능저하)
layer의 결과가 identity로 설정했을 때 아까전 슬라이드처럼 성능이 좋지 못했기 때문에 이번에는 identity mapping을 shortcut connection으로 직접 달아주기로 한다.
input X 의 값이 그대로 block의 output으로 더해지기 때문에 추가적인 파라미터가 필요하지 않고 연산 복잡도를 증가시키지도 않는다.
이렇게 생긴 오른쪽의 block을 residual block이라 부르기로 하였다.
그들은 이것이 더욱 optimze(최적화)하기 쉽다고 가설을 세웠다. 예를 들어 layer 의 결과로 x 즉, identity를 얻고싶을 때를 생각해보자.
왼쪽 plain layer의 경우 h(x)=x 를 만들기 위해 ReLU라는 비선형층을 여러개 거치면 선형인 identity mapping 을 근사하기는 어려울 것이다.
하지만 오른쪽 residual block의 경우, f(x)만 0으로 만들어버린다면 shortcut connection 덕분에 바로 x를 얻을 수 있다.
(이때 f(x)를 0으로 만들기 위해서는 weight를 0으로 주면 된다)
residual block을 식으로 나타내면 두가지 경우로 나타낼 수 있다.
f(x)의 결과와 x의 dimension이 같은 경우 : 그냥 바로 더해준다.
다른 경우 : linear projection인 Ws를 x에 곱하고 더해준다.
이제 실험에 앞서, plain net과 resnet을 정의하기로 한다.
실험에는 34층 plain net을 사용한다. 설정값은 위와 같고, feature map의 크기를 계속해서 유지하기 위해 같은 수의 필터를 사용한다.
또는 feature map의 크기가 줄어들면 filter의 수를 2배로 해서 시간복잡도를 유지한다.
이렇게 짜면 VGG net 보다 적은 필터 수와 낮은 복잡도를 보인다.
ResNet의 경우는 plain을 base로하고 shortcut connection을 달아준다.
그림에서 실선 shortcut은 dimension이 같은 경우이고 점선은 다른 경우이다.
Plain net의 ImageNet Classification 결과이다. 앞서 말한 degradation이 발생함을 볼 수 있다.
하지만 이 때의 성능 문제는 vanishing gradient가 원인은 아니다. 이미 BN(batch normalization)을 통해 forward,back-propagation에 있어서 시그널이 사라지지 않는 다는 것을 보장했기 때문이다.
이번에는 같은 ImageNet 문제에서의 ResNet 결과이다. 우리는 3가지 결과를 볼 수 있다.
우선, 18층과 34층의 ResNet을 비교했을 때 degradation 문제를 해결한 것을 볼 수 있다.
두번째는 34층의 ResNet이 plain net보다 약 3.5% top-1 error를 줄였다.
마지막으로 18층을 비교하면 둘의 error는 비교적 큰 차이는 나지않지만 ResNet이 plain net보다 빠르게 converge하는 것을 볼 수 있다.
이는 ResNet이 plain 보다 더 빠른 수렴을 통해 더 쉬운 optimzation을 제공한다는 것이다.
projection shortcut에 있어서 3가지 경우를 비교한 결과이다.
크게 성능차이가 나지 않고 그렇게 중요하지는 않아서 읽어보면 될 것 같다.
더 deep한 net을 만들기 위해서 bottleneck architecture를 사용한다. 이 bottleneck은 1*1 conv를 통해 차원을 줄인다. 그리고 3*3으로 연산을 수행한 후 다시 1*1로 차원을 회복한다. 이를 통해 더 deep 하지만 계산량은 줄이는 결과를 얻을 수 있다.
이제 우리는 bottleneck을 이용하여 더 deep한 50, 101, 152층의 ResNet을 얻어냈다.
더 deep해질수록 degradation없이 더 좋은 성능을 내고 있는 것을 확인했다.
특히 152층의 ResNet은 오른쪽표의 다른 모델들의 ensemble(앙상블)보다 뛰어난 성능을 보여준다.
ResNet의 ensemble은 3.57이라는 아주 적은 error를 보여주게 된다.
이제 CIFAR-10 데이터도 보자.
여전히 plain은 degradation을 보이고 ResNet은 이를 해결한 결과를 보인다.
110층의 ResNet과 1202층의 것을 비교했을 때 1202층의 test error가 더 높은 것을 확인했다.
이는 적은 데이터에 비해 너무 과한 크기의 층들로인해 overfitting이 일어난 것이다.
이로써 Deep Residual Learning for Image Recognition (ResNet) 논문을 다 읽어보았다. :)
(이미지는 논문의 것을 그대로 사용하여 본인이 직접 ppt를 작성하였습니다.)