이 논문에서는 이전보다 더 깊은 네트워크를 더 쉽게 학습시키기위해 residual learning(잔차학습) framework를 제안하였다.
핵심내용 : 기존의 함수로 학습하기 보다 전의 입력값을 참조하여 학습에 활용하는 것으로 대신한다.
-> ImageNet data set에서 VGGNet 보다 8배 깊은 152개의 layer를 쌓을 수 있었고 더 적은 복잡도를 가진다.
➕ 100개 및 1000개의 레이어로 구성된 CIFAR-10에 대한 분석을 제시
네트워크의 깊이가 깊을수록 기능의 수준이 높아진다고 볼수 있지만 training error와 test error 또한 높아짐을 Figuer1.에서 알 수 있다.
이유는 vanishing/exploding gradients(기울기 소실/폭주)의 문제점이 있기 때문이다.
이러한 문제점은 normalized initial-ization과 intermediate normalization layers를 통해 대부분 해결되었다.
하지만 정확도가 포화되거나 급속도로 감소하는 문제가 발생하였고 (overfitting으로 야기된것이 아님) 이러한 문제점을 해결하기위해 residual learning(잔차학습) framework 를 도입하였다.
기존 mapping을 H(x)로 나타냈을때 stacked nonlinear layer (쌓여있는 비선형 레이어) 의 mapping인 F(x)는 H(x) - x 를 학습한다는 것이다. 이를 H(x) = F(x) + x 로 재구성할수 있다.
위 그림에서 H(x) = F(x) + x 라는 식이 있을때 학습을 시키며 역전파 방향으로 가면서 미분을 하게되면 F'(x) + 1 이 되므로 F'(x) 가 0에 수렴하게 되더라도 x의 미분값인 1이 더해지기때문에 기울기 소실과 정확도를 잡을수 있다고 이해했다..!
❔ 극단적으로, identity mapping이 최적일 경우, 잔차를 0으로 밀어내는 것이 비선형 레이어의 스택으로 identity mapping을 맞추는 것보다 쉽다는 말이 무슨말인지 잘 이해가 안간다...!
F(x) + x공식은 shortcut connections을 가진 feedforward neural network로 구현할수 있다.
이러한 실험의 결론은 아래와 같다
H(x)를 기본매핑이라 했을 때 x는 여러 layer들 중 첫번째 layer의 입력을 나타낸다.\
만약 여러개의 비선형 layer가 있다면 복잡한 함수를 점근적으로 근사시킬수 있고 이는 잔차 함수를 점근적으로 근사할 수 있다는 것과 같다고 할수 있다.
즉, 명시적으로 F(x) := H(x) - x (입력과 출력 차원은 동일) 이라고 할수있으므로 원래 함수는 H(x) := F(x) + x 으로 표현할수 있다.
잔차학습을 적용하는 방법에는 Identity Shortcut 와 Projection Shortcut이 있고 입력과 출력사이에 shortcut connection을 적용한다.
Identity Shortcut | Projection Shortcut |
---|---|
y = F(x,Wi) + x | y = F(x,Wi) + Wsx |
Identity Shortcut : 입력과 출력사이의 차원이 같은 경우에 사용\
Projection Shortcut : 입력과 출력사이의 차원이 다를 때 사용
Plain Network
Residual Network.
❔ Identity mapping 이랑 Identity shortcut 이 다른것인가..?
Figure4.는 plain network와 residual network에 대한 error를 나타낸 그림이다.
plain network에서는 layer가 깊어질수록 error가 증가하는 반면 residal network에서는 layer가 깊어져도 낮은 error를 보이는 것을 확인할수 있다.
Table2.는 학습된 18-layer,34-layer plain/residual network의 validation data에 대한 10-crop testing 결과중 Top-1 error를 보여주고 있고 34-layer esidual network의 error가 가장 낮은것을 확인할 수 있다.
Deeper Bottleneck Architectures.
각 잔차함수 F에 대해 3개의 layer stack을 사용하는데 1x1 layer로 차원을 줄이고 3x3 conv . 수행후 1x1로 차원을 늘려 원하는 채널을 맞추어 준다. 이러한 방식으로 bottleneck을 사용하면 모델을 깊게 쌓으면서 더 많은 학습을 가능하게 한다.