ResNet은 레이어를 깊게 쌓을때, 레이어의 층의 깊이 때문에 발생하는 gradient vanishing/exploding 로 인해 역전파가 제대로 진행되지않아 학습 성능을 떨어뜨리는 경우를 완화하는 Shortcut(Skip) connection방법을 적용하여 VGG-16(19)보다 더 깊은 층(8배)을 더 좋은 성능으로 쌓는 방법을 제시한다.
그 방법은 일정 레이어를 타고 나온 결과에 레이어를 타기 전의 값을 더해주는 방법이다.(Short cut)
그냥 더해주는것이기 때문에, 이를 학습하거나 저장 되어야할 별도의 파라미터가 필요하지않아 효율적이다.
기존 VGG-19와 그를 더 깊게 쌓은 모델, 위의 방법을 적용한 모델이다. 점선 화살표는 dimensions을 키워서 더한다.
위 모델들의 결과는 아래와 같다.
그냥 쌓기만 하면(plain-34) 더 낮은 레이어의 VGG-16보다 성능이 떨어지는 반면, 알고리즘을 적용하면(ResNet-34) 성능이 좋아지는것을 확인할 수있다.
이렇게 효율이 떨어지는 이유는 5페이지 2번째 문단부터 나온다.
이후 Block의 모양을 바꾼다. 왼쪽의 기존의 블럭, 오른쪽은 Bottleneck design이다. 둘 모두 비슷한 속도(time complexity)를 갖는다.
1202 개의 레이어 또한 쌓아봤다. trainning error는 0.1% 미만을 달성했다. test error 또한 7.93%정도로 낮게 나오지만, 이는 101개의 레이어의 결과보다 좋지않다.
굵은 선은 test error, 얇은 점선은 train error이다.
train error는 110과 1202가 비슷한 반면, test error는 오히려 1202가 더 안 좋은것을 확인 할 수 있다. 이는 오버피팅에 의한 것으로 보인다고한다.
최대 152 레이어와, 1202레이어 까지 내렸을 때의 결과는 있는데, 그 중간의 레이어를 쌓았을 때의 결과는 알 수 없었다. 이미지 셋의 크기에 비해 레이어가 너무 깊어 오버피팅이 발생하였다고 예측하는데, 그렇다면 얼마만큼 깊게 쌓는것이 적절한지를 알 수 있으면 좋을 것같다.
ResNet34-A, ResNet34-B, ResNet34-C 가 어떤 차이인 지 알 수 있나요?
(A) zero-padding shortcuts are used for increasing dimensions, and all shortcuts are parameter free 단순히 더하는 shortcut
(B) projection shortcuts are used for increasing dimensions, and other shortcuts are identity 차원이 커지는 경우에 파라미터를 곱하여 더하는 shortcut
(C) all shortcuts are projections. 모든 경우에 파라미터를 갖는 shortcut을 적용
레이어의 층의 깊이 때문에 성능이 떨어지는 경우(오버피팅으로 인한 성능 감소가 아님) 이라고 적어주셨는데
vanishing gradient 문제때문 맞나요? 맞다면 그렇게 적어주시면 더 이해하기 좋을것같습니다!
수정했습니다 감사합니다.