Doby's Lab

Gradient Vanishing / Exploding에 대하여 본문

AI/Concepts

Gradient Vanishing / Exploding에 대하여

도비(Doby) 2023. 1. 17. 23:25

 

 

✅ 1. Intro

Gradient Vanishing / Exploding의 문제에 대해 알아보겠습니다.

이 문제에 대해 왜 발생하는지를 알기 위해 앞서 Back Propagation에 대해 포스팅으로 정리해 두었습니다.

https://draw-code-boy.tistory.com/519

 

Back-Propagation(역전파)에 대하여

✅ Contents 1. Intro 2. Gradient Descent 3. Back Propagation (1): MLP 구조 및 함수 정의 4. Back Propagation (2): \(w_{1,1}^{(2)}\) 업데이트 5. Back Propagation (3): \(w_{1,1}^{(1)}\) 업데이트 6. Outro 7. Reference ✅ 1. Intro Batch Normali

draw-code-boy.tistory.com


✅ 2. Gradient Vanishing

📄 2.1. What

Gradient Vanishing이란 가중치 업데이트를 하면서 점점 가중치의 변화가 줄어들며, 거의 정착되어 보이는 것처럼 보이고, 이로 인해 최적의 모델을 찾을 수 없게 되는 현상입니다.


📄 2.2. Why

왜 발생하는지에 대해 알아봅시다. 앞서 다룬 Back Propagation 포스팅의 MLP 구조에서 input layer의 가중치가 업데이트를 할 때 더해주는 항을 가져와보겠습니다.

$$ \frac{\partial J_{total}}{\partial w_{1,1}^{(1)}}
= \frac{\partial J_{total}}{\partial a_1^{(3)}}
\times\frac{\partial a_1^{(3)}}{\partial z_1^{(3)}}
\times\frac{\partial z_1^{(3)}}{\partial a_1^{(2)}}
\times\frac{\partial a_1^{(2)}}{\partial z_1^{(2)}}
\times\frac{\partial z_1^{(2)}}{\partial w_{1,1}^{(1)}} $$

 

이 MLP에서 활성화 함수로 모든 layer에 대해 sigmoid 함수를 사용했습니다.

sigmoid 함수에 대한 미분을 나타내는 항은 아래의 2개로 정리됩니다.

$$ \frac{\partial a_1^{(3)}}{\partial z_1^{(3)}}=\phi(z_{1}^{(3)})(1-\phi(z_{1}^{(3)})),\;\frac{\partial a_1^{(2)}}{\partial z_1^{(2)}}=\phi(z_{1}^{(2)})(1-\phi(z_{1}^{(2)})) $$

 

그런데 시그모이드 함수는 아래와 같이 생긴 함수입니다.

0일 때의 미분 값이 제일 최댓값으로 보이는데 시그모이드 함수를 미분했을 때, 최댓값을 보면 아래와 같습니다.

0.25가 시그모이드 함수 미분의 최댓값인데 이러한 값을 가중치 업데이트 할 때마다 곱하여 가중치에서 빼준다고 생각합시다.

곱할수록 0에 가까워지는 값으로 기존의 가중치에 변동을 주어봤자 크게 변할 수가 없을 것입니다.

 

또한, Layer가 깊어질 때, input layer에 다가갈수록 곱해지는 항들이 매우 늘어납니다. 이에 따라 input layer에 다가갈수록  시그모이드 함수의 미분 값 곱셈이 많아질 것이고, Vanishing 현상이 더 심하게 일어난다고 이해할 수 있습니다.


📄 2.3. Solve

그렇다면 이러한 문제점을 해결하기 위해서는 어떤 방안들이 있는지 알아봅시다.

 

2.3.1. ReLU

기본적으로 활성화 함수를 시그모이드 함수가 아닌 다른 함수를 쓰는 방법이 있습니다.

대표적으로는 'ReLU' 함수가 있습니다.

ReLU 함수를 미분했을 때는 입력 값이 양수라면 기울기가 1이라 보존되지만, 0이 되어버리는 경우에는 여전히 Vanishing 문제를 해결하지 못하는 게 됩니다. 이러한 점을 보완하여 나온 함수가 'Leaky ReLU' 함수입니다.

2.3.2. Batch Normalization

시그모이드 함수의 미분 출력 값들이 0에 가까워지는 이유는 시그모이드 함수에 대한 입력 값이 크기 때문입니다.

이러한 점에 대해 입력 값에 대한 편차를 줄이고자 나온 방안이 Batch Normalization입니다.

Batch Normalization은 Batch 단위로 훈련할 때, 출력 값들에 대한 편차를 줄이고자 정규화하여 다음 Layer 혹은 활성화 함수에 보내는 방식으로 Vanishing에 대한 적절한 개선 방안입니다.

스케일에 대하여 정규화를 한 것이기 때문에 완전히 Vanishing 문제에 대하여 해결할 수 있다고 볼 수는 없습니다.


✅ 3. Gradient Exploding

📄 3.1. What

Gradient Vanishing이란 Vanishing과 상반되어 나타나는 현상으로 원인은 Vanishing과 유사한 원인이 있고, 다른 하나는 높은 Learning Rate로 인한 발생 원인이 있습니다.


📄 3.2. Why

Vanishing에서 사용한 input layer의 가중치의 업데이트 항을 다시 가져와보겠습니다.

$$ \frac{\partial J_{total}}{\partial w_{1,1}^{(1)}}
= \frac{\partial J_{total}}{\partial a_1^{(3)}}
\times\frac{\partial a_1^{(3)}}{\partial z_1^{(3)}}
\times\frac{\partial z_1^{(3)}}{\partial a_1^{(2)}}
\times\frac{\partial a_1^{(2)}}{\partial z_1^{(2)}}
\times\frac{\partial z_1^{(2)}}{\partial w_{1,1}^{(1)}} $$

 

이번에 주목해보아야 할 항은 미분을 함에 따라 생기는 가중치에 대한 항입니다.

$$ \frac{\partial z_1^{(3)}}{\partial a_1^{(2)}} = w_{1,1}^{(2)} $$

 

가중치 항은 충분히 학습을 통해 1보다 커질 수 있습니다. 이를 통해 layer가 깊어질수록 가중치가 많이 곱해질 것이고,

input layer에 가까워짐에 따라 Exploding 현상이 심하게 나타날 수 있습니다.


📄 3.3. Solve

가중치가 원인으로 발생하는 문제로 활성화 함수의 변경은 큰 도움이 되지 못합니다.

 

3.1 Regularization

가중치가 큰 값을 가지면서 발생하는 문제이기 때문에 규제를 적용하여서 너무 큰 값을 가지지 않도록 하면 Exploding을 막을 수 있습니다.

3.2 Gradient Clipping

Gradient가 일정 임계값을 넘어가게 되면 임계값을 넘어가지 않도록 가중치를 학습하는 방법입니다.


✅ 4. Reference

https://heytech.tistory.com/388

 

[딥러닝] 기울기 소실(Vanishing Gradient)의 의미와 해결방법

📚 목차 1. 기울기 소실의 의미 2. 기울기 소실의 원인 3. 기울기 소실의 해결방법 1. 기울기 소실의 의미 딥러닝 분야에서 Layer를 많이 쌓을수록 데이터 표현력이 증가하기 때문에 학습이 잘 될

heytech.tistory.com

https://velog.io/@nayeon_p00/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88%EA%B0%9C%EB%85%90-%EA%B8%B0%EC%9A%B8%EA%B8%B0-%EC%86%8C%EC%8B%A4%EA%B3%BC-%ED%8F%AD%EC%A3%BC-Gradient-Vanishing-Exploding

 

[딥러닝 기초개념] 기울기 소실과 폭주 (Gradient Vanishing / Exploding)

https://wikidocs.net/61375역전파 과정에서 입력층으로 갈수록, 기울기가 점차적으로 작아지는 현상이 발생할 수 있다. 이러한 현상으로 입력층에 가까운 층들에서 가중치들이 업데이트가 제대로 되

velog.io

https://imlim0813.tistory.com/42

 

Vanishing gradient / Exploding gradient

Vanishing gradient & Exploding gradient 모델의 성능 개선을 위해 가장 우선적으로 고려해볼 수 있는 경우는 모델의 레이어를 깊이 쌓는 일이다. 하지만, 레이어를 깊이 쌓으면 학습 도중에 가중치의 기울

imlim0813.tistory.com

 

728x90