ResNet - Deep Residual Learning for Image Recognition - Preview
Deep Residual Learning for Image Recognition (Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun 저) Preview
때는 바야흐로 2015년, VGG Net과 GoogLeNet(Inception v1)의 활약 이후 CNN세상은 춘추 전국시대를 맞고 있었다. VGGNet이 던져놓은 화두는 "깊은 망이 학습이 잘 되지만, 너무 깊으면 안되더라" 라는 내용이었다. 이때 혜성 같이 등장한 딥-러닝의 기린아, ResNet이 등장하게 된다.
ResNet은, 기존 모델들에서 망이 너무 깊으면 학습이 되지 않던 문제를 "Vanishing-Gradient" 이슈 때문으로 해석하였다.
여기서 잠깐! Vanishing-Gradient가 무엇일까?
역전파 과정에서, 뒤로 갈수록 오류의 기울기(Gradient)가 줄어드는 현상이 발생한다.
왜 일까?
(출처 : https://medium.com/machine-learning-world/how-to-debug-neural-networks-manual-dc2a200f10f2)
위 그림은, 다양한 Activation function들의 생긴 모양이다.
보면, Sigmoid의 경우, 일정 수치 이상의 x값에서는 1로 일정이하의 값 에서는 0 으로 값이 고정된다.
따라서, 누적되는 기울기 값들이 점점 흐려지게 된다.
그래서, 이를 해결하고자 나온 것이, ReLU이다. ReLU는 0부터는 일정 기울기로 값이 증가하게 된다.
f(x) = max(0,x)
하지만 역시, 값이 감소하는 상황에서는 0으로 고정 되므로, 기울기가 가려지게 된다.
(그렇다고, 기울기가 계속 일정하면, 딥러닝의 핵심인 Non-linearity가 깨어지게 됨)
그래서 다시 나온것이 Leaky ReLU이다.
이는 0 이하일때에도 일정량의 기울기를 유지해 준다.
하지만, 역시 과하게 깊은 경우에는 기울기가 잘 전달되지 않는 문제점이 남아있다.
ResNet은 이 문제를 해결하기 위해 독특한 방식을 제안하였다. 바로, 일정 노드 마다 앞의 결과를 뒤에 붙여 버려서, Gradient가 전달될 수 있는 지름길을 만들어 놓는 것 이다.
이를 통해 Gradient가 "더 빠르게/잘" 전달되게 되었다.
여기서, "더 빠르게" 도 상당히 집중해 볼 부분이다. 실제 논문에서도, ResNet 을 14층 쌓았을 때와, 일반 CNN을 14층 쌓았을 때, 최종 Accuracy의 차이는 없었지만, 더 빠르게 수렴하였음을 이야기 하고 있다. (Inception Net에서도 ResNet이 꼭 필요한가에 대해선 회의적이었지만, 수렴 속도가 빨라지는 것은 동의하였으며, Inception v4 가 제안된 논문에서 이를 적용한 Inception-ResNet 이라는 모델을 제안하였다.)
그리고, 맨 위 그림에서 처럼, 기존에는 일정 이상의 깊이의 모델이 학습이 되지 않는 현상이 발생하였지만(Over-fitting은 아님, Training set 에서도 오히려 Error가 높기 때문), 깊은 모델에서도 그런 문제가 생기지 않는것을 확인하였다.
결과적으로, 대회에 출품하는 버전에서는 152개의 레이어를 쌓은 모델을 사용하여, 3%의 오차로 우승을 거머쥐었다.
이 글을 통해, ResNet의 컨셉이 잘 이해되었길 바란다.
간단히 살펴보는 ResNet은 이만 마치며,
다음 편, ResNet 논문 리뷰 편 에서 다시 돌아오겠다.
'Study-Machine Learning > Deep Learning' 카테고리의 다른 글
CAM - Class Acvtivation Map 논문 (Learning deep features for discriminative localization) 리뷰 (0) | 2018.11.15 |
---|---|
VGG Net 과 CAM (Class Activation Map) 구현 (0) | 2018.11.14 |
VGG Net (0) | 2018.11.08 |
4. CNN : Convolution Neural Nerwork with keras (0) | 2018.07.21 |
3.DNN : DeepNeauralNetwork with keras (0) | 2018.07.19 |