본문 바로가기

머신러닝/분석 base

Resnet

Resent의 등장 배경

딥러닝에서 층이 지나치게 깊으면 gradient vanishing/exploding 문제가 생겨서 학습 성능이 오히려 떨어짐.

위 문제를 해결하기 위해 층 수에 대해 학습 성능이 어느정도 비례하도록 만드는 딥러닝 모델이 resnet임. 

train set, test set 모두에서 layer이 깊을 수록 학습 성능이 떨어지는 경향이 있다.

 

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