본문 바로가기

Machine Learning/Vision

Popular CNN Architecture (3) - ResNet

반응형
ResNet

다양한 Task에서 효과적인 성능을 얻은 것을 미루어 보아 매우 범용적인 Net이다.
googLeNet과 마찬가지로 parameter수를 줄이기 위해 bottle neck 아키텍쳐이용. residual connection을 쓴 것이 가장 큰 특징.
기존의 코드에 reidual connection을 추가함으로 구현하는 방식이다.


Network가 deep하다고 좋은 성능을 보장하지못함.

Q.기존에 생각된 가장 큰 원인 -> Vanishing / Exploding gradients 
--layer가 깊어질때, back prop으로 얻어지는 gradients들이 너무 작아지거나, 너무 커져서 발생하는 문제?
 
=> ResNet曰 : 좋은 initializing(weight)을 수행하고, batch normalization, 활성화 함수의 개선으로 이를 해결 할 수 있어서 이는 중요하지 않다고 주장.

Q.overfitting으로 발생하는 문제가 아닐까? (overfit의 문제확인 방법, training accuracy는 오르고 test accuracy가 낮아지는 상황이 발생하는 순간에 일반적으로 train을 early stopping한다.)

=> ResNet曰 : Degradation 문제, train도 잘되고 test도 잘되는데 성능이 잘 안좋음. overfit의 문제가 아니다!

layer수가 늘어난 모델이 성능이 더 좋지 않은 것을 확인 할 수 있음. (Degradation)





해결할방법 ? -> residual connection


입력과 출력의 dimension을 통일한다는 가정하에, input의 값을 출력에 더해줌.
결국 weight layer는 입력과 출력사이의 차이만 학습하게 됨.
 target과 입력과의 차이만을 학습한다는 의미하에 residual connection



기존의 코드에서 y = y+shortcut 만 추가됨.


residual connection을 통해 성능 개선이 될것이라 생각하고 그대로 수행해봄.

실제로 깊은 net에 잘 최적화되고, 쉽게 잘됨.

가장 큰 단점은 input과 output의 dimension을 통일해줘야함.

*실제 논문에선 152단을 사용해 위 그림 보다도 깊음

parameter 감소 방법?

1x1을 통해 채널을 줄이고 conv를 함.
특이하게도 마지막에 1x1을 수행함. ==> 다시 256 channel(input과 동일)을 복원하기 위해서 1x1 256을 구해줌.
바로, 256으로 결과를 내도 되지만, parameter가 너무 많아지기 때문에, conv 전에 reduction을 수행해서 차원을 낮춰주고 conv를 activation한결과에 dimension incresement를 통해 인풋차원으로 다시 복원해줌.

100단 단위까지 줄일때, 줄일수록 성능이 개선됨을 확인할 수 있음.

하지만 1000단 단위까지 올리면 여전히 Degradation이 발생함.

ResNet의 큰 성과 
1~2자리수단위의 layer에서 100단 단위까지 만들 수 있게해줌.
한계점 : 1000개가 넘어가면 다시 degradation발생.


정리


GoogLeNet & ResNet
inception, bottle-neck Architecture를 통해 parameter를 획기적으로 줄임.

inception -> 같은 receptive field를 만들지 않게 하기 위해 여러 갈래길을 뚫어줌.
ResNet(inception의 간단한 구조라고 생각해도 됨.) -> short-cut ( output에 input을 더해줌으로써, 최종 출력단에서 얻어내는 receptive field가 다양하게 됨.)


반응형

'Machine Learning > Vision' 카테고리의 다른 글

Popular CNN Architecture (2) - GoogLeNet  (0) 2019.01.07
Popular CNN Architecture (1) - AlexNet, VGG  (0) 2019.01.06