0. ResNet
ResNet이전에 나온 VGGNet 등에서 모델이 깊어질수록성능에 큰 영향을 준다는 것은 알려졌었지만 단순 layer가 깊어질수록 성능이 증가하는 것이 아니었고 gradient vanishing, exploding 등의 문제로 인해 성능이 오히려 떨어지는 현상들이 발견됐다.
gradient vanishing이란 layer가 깊어질수록 미분을 점점 많이 하기 때문에 backpropagation을 해도 앞의 layer일수록 미분값이 작아져 그만큼 output에 영향을 끼치는 weight 정도가 작아지는 것을 말한다.
이는 overfitting과는 다른 문제인데, overfitting은 학습 데이터에 완벽하게 fitting 된 것으로 train set에서는 성능이 좋고, 테스트에서 떨어지게 되는데, 위의 실험을 보면 레이어가 깊어졌음에도 train에서도 성능이 좋지 않고 테스트에서도 좋지 않음을 볼 수 있다. 이는 모델 자체가 제대로 훈련되지 않은 것을 의미한다.
이를 `skip connection`과 `residual learning`이라는 개념을 도입하여 gradient vanishing 문제를 해결한 것이 ResNet 이다.
1. Residual Learnining
기존의 neural net의 학습 목적은 input(x)을 타겟값(y)으로 mapping하는 함수 H(x)를 찾는 것이기 때문에 따라서 H(x)-y(오차)를 최소화하는 방향으로 학습을 진행한다.
이 때 ResNet은 $F(x)+x$를 최소화하는 것을 목적으로하는데, F(x)가 0에 가까워 진면 입력값과 출력값이 동일하게 된다는 의미로 우리의 목표이며, $F(x)=H(x)-x$ 이므로 $F(x)$를 0에 가깝게 한다는 말은 $H(x)-x$를 0과 가깝게 한다는 의미이다.
$F(x) = H(x) - x$를 잔차라고 하며 이 잔차를 학습하는 것은 Residual learning이라 한다.
우측 아래 그림처럼 마지막에 x를 더해서 네트워크의 output은 0이 되도록 mapping해서 최종 output이 x가 되도록 학습한다.이 때 컨볼루션 연산을 거치지 않은 x값을 뒷 레이어에 더해주는 것을 `skip connection`이라고 하는 것이다.
혁펜하임 강의에서 설명한 내용을 가져와보면, 우리가 만들고자 하는 $H(x)$가 있고 입력값 $x$ 가 있다고 하자. 만약 x와 H(x)가 유사하다면(거의동일) 이 때의 가중치 행렬은 identity행렬(성분1)이 될 것이다.
이 때 만약 skip connection을 적용했다면? 입력값 x를 더해줬기 때문에 아마 우리는 거의 0에 가까운 행렬을 학습하면 된다. 첫번째 행려을 찾는 것보다 두번째 0에 가까운 행렬을 찾는 것이 더 쉽다.
이 때 x와 H(x)가 유사하다는 의미는 각 레이어의 층을 넘어갈 때 값의 변화가 그렇게 크지 않을 것이다.라는 의미이다.
2. Bottleneck Layer
다음으로 ResNet의 특징 중 Bottleneck Layer이 있는데, 일반적으로 Convolution Layer을 쌓을 때 Feature map의 채널을 깊어질 수록 더 크게 설정함에 따라 더 다양한 feature들을 학습하고자 기대했는데 이 경우 연산에 필요한 파라미터의 수가 급증하게 된다. 파라미터의 수는 입력의 채널수와 출력 채널 수만큼 곱해지기 때문이다.
이 때 Bottleneck Layer은 채널의 수를 줄인 상태에서 컨볼루션 연산을 하고 보다 적은 파라미터를 사용하여 다시 채널의 수를 늘려주는 것을 말하며 이때 1x1 필터를 사용한다.
이를 통해 input과 output의 채널 수를 맞추면서도 모델의 파라미터 수는 크게 늘리지 않을 수 있다.
3. Batch Normalization
마지막으로 Batch Normalization을 이용하여 각 레이어마다 뉴런들의 스케일을 조절해주는 레이어를 추가해준다.
이 배치정규화는 깊은 네트워크가 더 잘학습될 수 있도록하며 더 일반화된 모델을 만들 수 있다.
4. 결과
최종적으로 위의 잔차학습을 적용한 ResNet은 모델이 깊어질수록 해당 방법이 유의미하다는 것을 실험을 통해 증명하였다.
5. 참고블로그
'ML & DL > Computer vision' 카테고리의 다른 글
YOLO: You Only Look Once (0) | 2023.10.26 |
---|---|
SSD(Single Shot MultiBox Detector) (0) | 2023.10.26 |
R-CNN, Fast R-CNN, Faster R-CNN (0) | 2023.10.26 |
NAS(Neural Architecture Search) (0) | 2023.10.26 |
Object detection(= Classification+Localization) (0) | 2023.10.26 |