layer를 깊게 쌓으면 error가 적어져 성능이 좋아질 거라 생각하지만 오히려 20층 부터 degradation 문제가 보이는데, Vanishing Gradient Problem(기울기 소실 문제)로 인해서 발생 한다고 한다.
그래서 사용한 것이 residual learning 이다.
residual block을 이용하여 optimization을 낮추는 것 인데,
y가 x와 같다고 본 뒤 출력 값에 입력 값을 더하게 된다.(shortcut connection)
x-H(x)가 y-H(x)를 학습 하는 것 보다 최적화 하기쉽고 빠르기 때문이라고 한다.(relu(F(x)+x)-x)
식 : F(x)=x-H(x) -> H(x)=F(x)+x
미분하면 더해진 x가 1이되기 때문에 기울기 소실 문제 해결
ResNet은 VGG-19의 구조를 기본으로 한다.
중간에는 깊어진 layer로 34-layer plain network의 모습이다.
제일 위에는 residual network(resnet)이고, 34-layer plain network에서 short connection이 추가된다.
skip connection을 추가하려면 더 하는 값 x와 출력이 같은 차원이어야 한다.
만약, 입력 차원이 더 작을 때
1.shortcut을 위해서 identity mapping을 하고, 차원 증가를 위해서 zero padding 사용한다.(파라미터 추가x)
2. 차원이 증가 할 때 projection shortcut 사용하고, 차원을 맞추기 위해 1x1 conv 이용한다.
3.shortcut이 projection 일 때
1x1 convolution layers는 신경망의 맨 앞과 뒤에 추가되며, 성능은 감소되지 않지만 파라미터 수는 감소 된다. 50-layer부터 그 전 layers와 구조가 다르다. layer가 많아지면서 파라미터 FLOPs 수가 늘어나 연산량이 늘어나고 복잡성이 높아지는데 해결을 위해 bottleneck architecture를 이용한다.
Deep Residual Learning for Image Recognition