About me
home
Portfolio
home
🎀

ResNet 정리

배경: 기존의 방식으로는 망을 무조건 깊게 한다고 능사가 아니라는 것을 확인하여 새로운 방법이 필요함을 느낌
본 논문에서는 깊은 네트워크를 학습시키기 위한 방법으로 잔여학습(residual learning)을 제안한다.
기존의 망과 차이점은 입력값을 출력값에 더해줄 수 있도록 지름길(shortcut)을 만들어준 것 뿐이다.
ResNet은 F(x)+x를 최소화하는 것을 목표로 한다. x는 현시점에서 변할 수 없는 값이므로 F(x)를 0에 가깝게 만드는 것이 목적이 된다. F(x) = H(x) - x = 잔차(residual) 이고 이 잔차를 최소로 해주는 것이 목적이다.
Plain Network는 단순히 Convolution 연산을 단순히 쌓는다면, ResNet은 Block 단위로 Parameter을 전달하기 전에 이전의 값을 더하는 방식이다. Residual Block이 쌓이면 Residual Network(ResNet)이라 한다. 이를 통해 Overfitting, Vanishing Gradient 문제가 해결되어 성능이 향상되었다.
Vanishing Gradient 문제가 해결되면 정확도가 감소되지 않고 신경망의 layer를 깊게 쌓을 수 있어 더 나은 성능의 신경망을 구축할 수 있다. 실제로 Plain network는 신경망이 깊어질수록 error가 높아지지만 ResNet은 신경망이 깊어질수록 더 낮은 train error와 test error를 얻었다.
identity mapping: 입력값을 그대로 전달한다는 의미에서 identity이다. 즉, stride가 1이어서 F(x)랑 x가 크기가 똑같은 경우이다. 만약 크기가 다를경우에는 x를 F(x) 크기와 같게 바꿔준다.

Bottleneck 원리

1x1 Convolution = Pointwise Convolution
1x1 Convolution 의 Parameters는 1 x 1 x Input Channel x Output Channel 이다.
1x1 Convolution는 연산량이 적기 때문에 Feature Map(Output Channel)을 줄이거나 키울 때 사용됨.
BottleNeck 구조는 1x1 Convolution 으로 장난 치면서 연산량을 최소화하는 것이다. 하지만 강제로 채널을 줄이고 늘리는 것은 정보 손실을 일으킨다. 정보 손실을 모델의 정확성을 떨어뜨린다. 연산량과 정보손실은 서로 tradeoff 관계이기 때문에 합의점을 찾는 것이 중요.