순서상 훨씬 전에 읽었어야 했지만 이제서야 읽고 올리는 ResNet 다.
마찬가지로 제목에서부터 요약이라고 하고 있기 때문에, 이번 포스팅에서는 말 그대로 핵심만 짚는다.
[논문]
https://arxiv.org/pdf/1512.03385.pdf
Deep Residual Learning for Image Recognition
ResNet은 "과연 모델의 깊이는 성능을 담보할 수 있는가?" 라는 질문에서 시작한다.
위 그림에서 볼 수 있듯이, 레이어를 많이 쌓은(56) 모델이 더 얕은 모델(20)보다 훈련 데이터 셋의 에러가 컸다.
그럼 이게 오버피팅인가? 오버피팅은 training error는 줄어듦에도 불구하고 test error 가 줄어드는 것을 의미하기 때문에, 올바른 설명이 아니다.
그렇다면 왜 깊은 모델의 training error는 안 줄었던 것일까?
기울기 소실!!
따라서 해당 모델을 공부할 때는 어떻게 이 저자들이 기울기 소실을 다루려고 했는지를 보는게 중요하다!!
이래서 나오는 것이 이 모델의 핵심인 residual learning 이다!
기존에는 H(x) = x 가 될 수 있도록 H 함수를 찾는데 목표를 두었다면,
H(x) - x 를 새로운 함수 F로 정의한다.
따라서 F(X) = 0 이 될 수 있도록 F 함수를 찾는데 목표를 둔다.
F 라는 함수는 예측값과 실제값의 차이인 잔차를 뜻한다.
이렇게 F가 0이 되는 방식으로 최적화를 하는게 H를 찾아나가는 것보다 좋은 성능을 냈다고 한다.
기존의 H 함수는 H(x) = F(x) + x 로 다시 쓸 수 있다.
이 식을 봐도 알겠지만, H라는 함수를 미분해도 x 때문에 무조건 1이 나온다.
기울기 소실을 막을 수 있다~
이때 '+ x' 하는 부분을 identity mapping이라고 부른다. (혹은 shortcut connection)
이 모든게 Introduction에 있어서 어이가 없다
기본적인 모델은 VGG19에서 착안했다.
중간의 plain은 레이어를 34개로 늘린 거고, 오른쪽이 residual 을 이용한 모델이다.
보면 모든 conv 에 시행한 게 아니고 가끔 몇 개의 block을 뛰어넘어서 mapping 하는 경우도 있다.
shortcut 해서 elementwise하게 덧셈을 하고 싶다면 input과 output의 차원이 같아야 한다는 조건이 있다.
그러나 몇 개의 block을 뛰어넘는 연산 때문에 차원이 다를 경우에는
(a) zero padding을 통해 인위적으로 차원을 늘리거나 (2) 아래식(eq.2) 처럼 linear projection을 해줬다고 한다.
저 W를 비단 차원이 맞지 않을 때뿐 아니라, residual block 모두에서 사용할 수도 있는데
W를 쓰건 안 쓰건 identity mapping으로도 충분한 결과를 냈기 때문에 가성비를 따져서 특별히 이용하지는 않았다.
최종적으로 만들어진 모델 구조는 다음과 같다.
결과를 봤을 때도 레이어 깊은 모델의 error가 더 작은 걸 확인할 수 있다.
다른 모델과 비교했을 때 성능은 다음과 같다.
한편 bottleneck 연구도 진행했다고 한다.
VGG16 에서도, GoogLeNet 에서도 1*1 conv를 쓰곤 했는데 이런 구조를 bottleneck 이라고 부른다.
1*1 conv를 이용하는 건 channel수를 줄이기 위함이다.
channel수를 늘려서 더 많은 연산을 수행하는데,
channel이 줄었다 늘었다 하는 모습이 꼭 bottleneck을 닮았다고 해서 붙여진 이름이다.
하지만 실상 resnet에서는 bottleneck 구조가 좋은 성능은 내지 못했다.
그래서 버려!
'딥러닝 > CV 논문' 카테고리의 다른 글
[Instance Segmentation] Mask R-CNN (0) | 2022.08.01 |
---|---|
[Object Detection] Faster R-CNN (0) | 2022.07.27 |
[Object Detection] CenterNet2 요약 (0) | 2022.03.21 |
[GAN] pix2pix HD (0) | 2022.02.10 |
[Classification] VGGNet 요약 (0) | 2022.02.10 |
댓글