Resent의 등장 배경
딥러닝에서 층이 지나치게 깊으면 gradient vanishing/exploding 문제가 생겨서 학습 성능이 오히려 떨어짐.
위 문제를 해결하기 위해 층 수에 대해 학습 성능이 어느정도 비례하도록 만드는 딥러닝 모델이 resnet임.
gradient vanishing / exploding
[input ↔ L1 ↔ L2 ↔ L3 ↔ ... ↔ output]
일반 딥러닝 네트워크에서 층이 지나치게 많아지면 back propagation 과정에서 미분을 많이 하게 된다.
뒤 층의 미분값이 크면 앞 층의 미분값이 점점 커지고 (gradient exploding) , 뒤 층의 미분값이 작으면 앞 층의 미분값이 작아지면서 (gradient vanishing) 학습 성능이 낮아진다.
Resnet의 skip connection
입력 데이터가 합성곱 계층을 건너 뛰어 출력에 바로 더해져서 연결된다. skip connection이 없다면 두 합성곱 계층의 출력이 F(x)가 되는데, resnet에서는 여기에 x를 더해 H(x) = F(x) + x로 정의한다. 네트워크의 출력값인 F(x)를 최소로 만드는 방향으로 학습을 진행해야 하고, 이는 H(x) - x (residual)을 최소로 만드는 것으로 이를 residual learning이라고 한다.
이렇게 하면 gradient인 F'(x) + 1이 적어도 1은 가지게 되어 gradient vanishing이 해결된다.
위와 같이 합성곱 계층을 2개 층마다 건너뛰면서 층을 깊게 하여 학습을 진행 할 수 있다.
'머신러닝 > 분석 base' 카테고리의 다른 글
Pytorch (2) | 2021.03.04 |
---|---|
Keras, TensorFlow (0) | 2021.03.04 |
Boosting & Adaboost (0) | 2021.02.09 |
Bagging & Random Forest : Programming (0) | 2021.02.09 |
Bagging & Random Forest (0) | 2021.02.09 |