Deep Residual Learning for Image Recognition (CVPR 2016)
본 논문에서는 깊은 네트워크를 학습시키기 위한 방법으로 Residual Learning을 제안하였다.
배경은 다음과 같다.
네트워크가 깊어지면서 생기는 문제점으로는 대표적으로 vanishing/exploding gradient , degradation 이 있다. vanishing gradient는 역전파 과정에서, 기울기가 0으로 줄어들면서 학습이 어려워지는 문제점을 뜻한다.
왼쪽 그래프는 training error, 오른쪽은 test error 그래프이다. training error는 낮고, test error가 높은 경우 overfitting, high variance라 하고, training error가 큰 것은 bias가 크다고 하는데, 이 bias의 경우 일반적으로 신경망의 크기가 커지면 개선된다.
그래프에서 layer의 수가 20에서 56으로 늘어나면서 training error, test error 모두 높아지는 모습을 보인다. 이는 overfitting의 영향이 아닌, 신경망이 깊어지면서 생기는 degradation 문제점을 보여준다.
CNN에서 네트워크가 깊어지면 이미지의 많은 특성을 풍부하게 추출할 수 있다는 장점이 있다. 하지만 레이어가 어느정도 이상 깊어지면 오히려 성능을 떨어뜨리는 것을 발견한 것이다. ResNet에서는 신경망이 깊어져도 학습이 잘 되도록 하는 방법이 없을까? 에서 시작하게 된다.
핵심 아이디어 : Residual Block
Residual Block의 가장 큰 기여는, 네트워크의 최적화 난이도를 낮추었다는 것이다.
어떻게 난이도를 낮추는걸까?
기존 방식은 conv 레이어를 통해서 특징을 추출하고, ReLU를 거쳐서 non-linear, 다시 conv 레이어를 거친다.
그 결과가 H(x)이다. 이 경우 각 conv 레이어 (그림의 weight layer)를 따로 학습해야 한다.
Residual Block : 전 레이어 input인 x를 더해주는 구조이다. x는 앞서 학습된 정보이다. x는 그대로 가져오고, F(x) 잔여 정보만 학습해서 더해주면 되기 때문에 학습이 더 쉽다. H(x)보다는 F(x)를 학습하는 게 더 쉽다는 것이다.
이 때 F(x):=H(x)-x 는 별도의 파라미터도 필요하지 않고 (x identity 사용함), 계산 복잡도도 증가하지 않는다는 장점이 있다.
깊어지면 깊어질수록 더 정확도가 올라가는 실험 결과를 보였으며, 앙상블까지 적용했을 때 3.57%로 매우 낮은 에러율을 나타냈다.
Architecture
ResNet(34) 의 arcitecture를 보면, 초반 인풋이 들어오면 7x7, 64, stride 2 의 conv layer를 지난다. 따로 pooling 사용하지 않고 stride를 2로 해서 down sampling을 진행하는 모습니다. 마지막 layer에서 average pooling을 사용해서 1000 class로 나눈다. time complexity를 유지하기 위해 width, height 가 작아지면 그만큼 channel은 늘어나도록 한다.
두번째 layer에서 3x3 max pooling을 한번 거치고 그 후 redisual block이 3개, 4개, 6개, 3개씩 진행된다. 각 [3,4,6,3] residual block에서 input size와 output size가 다를 때 마다 W_s를 통해 맞춰주는 작업을 진행한다.
Bottleneck 구조에서는 1x1 커널을 사용하여 파라미터가 줄어든다. 계산 복잡도를 유지하기 위해 사용한다.
'네이버 부스트캠프 AI tech 3기' 카테고리의 다른 글
회고 3주차 (0) | 2022.02.04 |
---|---|
9. ResNet 구현 (0) | 2022.02.03 |
7. PyTorch DataLoader (0) | 2022.02.02 |
6. PyTorch nn.Module (0) | 2022.02.02 |
5. CNN과 RNN (0) | 2022.01.25 |