I'm Lim

Vanishing gradient / Exploding gradient 본문

Deep Learning/Fundamental

Vanishing gradient / Exploding gradient

imlim 2022. 11. 29. 11:15

Vanishing gradient & Exploding gradient

  모델의 성능 개선을 위해 가장 우선적으로 고려해볼 수 있는 경우는 모델의 레이어를 깊이 쌓는 일이다.

하지만, 레이어를 깊이 쌓으면 학습 도중에 가중치의 기울기가 사라지는 현상 혹은 폭발적으로 커지는 현상이 발생한다.

이를 각각 Vanishing gradient / Exploding gradient problem이라 한다.

Back Propagation 연산

1. Vanishing gradient

1 ) Vanishing gradient의 원인

  딥러닝은 Back propagation 연산 시, Activation function의 편미분 값과 모델의 가중치 값들을 이용하게 된다. 

Activation function 글에서 살펴봤듯이, sigmoid나 tanh를 사용하게 되면 편미분이 최대 0.25, 1의 값을 갖는다. 레이어가 깊어질수록 편미분 값들이 반복적으로 곱해지면서 1보다 작아지게 되고, 결국 기울기가 소실되는 Vanishing gradient를 야기한다.

 

  기울기를 이용하여 weight를 업데이트시키는 딥러닝에 이러한 vanishing gradient 문제는 학습속도를 늦추고, 학습이 제대로 이루어지지 못하게 만든다. 

2 ) Vanishing gradient 해결방법

  첫 번째 해결방법으로는 Activation function이 적절한 기울기를 갖도록 해주면 된다. Activation function의 기울기가 거의 대부분 1보다 작은 값을 갖고, 이 값들이 반복적으로 곱해지기 때문에 Vanishing gradient 문제가 발생한다. ReLU는 기울기가 1 아니면 0이기 때문에 Vanishing gradient 문제를 해결한다 (물론 기울기가 0인 경우에는 여전히 Vanishing gradient를 해결하진 못하지만).

 

  두 번째 해결방법은 Batch Normalization을 진행하는 것이다. Batch Normalization은 activation function에 들어갈 입력 값들을 정규화 시키는 과정인데, 이는 다시 말해 Saturation region으로 빠지지 않도록 도와준다. 물론 Batch Normalization도 완전한 해결방안이 되진 못한다 (Vanishing gradient / Exploding gradient의 발생확률을 낮춘다).

 

  마지막으로는 Weight Initialization이다. sigmoid나 tanh 함수에 Random Initialization으로 weight를 초기화하게 되면 activation value들이 saturation region으로 빠지게 된다. 이는 backward value가 0이라는 뜻이고, 곧 vanishing gradient가 발생한다. 이를 방지하기 위해 Xavier Initialization이나 He Initialization을 사용하게 된다.

2. Exploding gradient

1 ) Exploding gradient의 원인

  Back propagation 연산에는 Activation function의 편미분 값뿐만 아니라 가중치 값들도 관여하게 된다.

만약, 모델의 가중치들이 충분히 큰 값이라고 가정을 하면, 레이어가 깊어질수록 충분히 큰 가중치들이 반복적으로 곱해지면서 backward value가 폭발적으로 증가하게 된다. 이를 Exploding gradient라 한다.

 

  Vanishing gradient와 마찬가지로 Exploding gradient도 학습이 제대로 이루어지지 못하게 만든다.

2 ) Exploding gradient 해결방법

  Vanishing gradient 해결방법에서 첫 번째 해결방법인 ReLU는 exploding gradient를 막진 못한다. 그 이유는 기울기가 1 아니면 0인 ReLU에서 가중치가 충분히 크다면. backward value 값은 1보다 클 것이고, 이것이 반복적으로 곱해진다면 backward value가 폭발적으로 증가할 것이기 때문이다.

 

  이를 해결하기 위한 첫 번째 방법은 Weight decay를 적용하는 것이다. Weight decay는 가중치에 규제를 적용하여 가중치가 너무 큰 값을 가지지 않도록 한다. 이렇게 되면 back-propagtaion value가 너무 폭발적으로 증가하지 않도록 도와준다.

 

  두 번째 해결방법은 Gradient Clipping을 이용하는 것이다. 이 기법은 trick에 가까운데 단순히 기울기의 값에 제한을 두어 기울기가 너무 크지 않도록 하는 기법이다.

'Deep Learning > Fundamental' 카테고리의 다른 글

Gradient Descent / Newton Method  (0) 2022.12.28
Activation function / Overfitting problem  (0) 2022.11.28
Global Minima / Local Minima / Saddle Point  (0) 2022.09.18
Multi Layer Perceptron  (0) 2022.08.09
Back Propagation  (0) 2022.08.08
Comments