일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Inception V1
- GoogLeNet
- DL
- Peephole Connection
- classification
- Inception Module
- Skip Connectioin
- Regression
- Optimizer
- GCN
- iTerm2
- Skip Connection
- Manager
- Linear
- Residual Connection
- virtualenv
- version
- ResNet
- sigmoid
- vim-plug
- Bottleneck Layer
- python
- RNN
- AI
- jupyter
- cnn
- Generative
- Gated Skip Connection
- DCGAN
- Vanilla RNN
- Today
- Total
IT Repository
(8) Gradient Vanishing 본문
Gradient Vanishing¶
모델의 크기가 커질 때, 특히 모델의 층이 깊어질 때에 발생하는 문제는 Overfitting외에도 한가지가 더 있습니다.
바로 Backpropagation을 할 때에 Gradient가 점차 소실되어 깊은 층에 있는 파라미터가 거의 업데이트되지 않는 문제입니다.
<가정>
$g = xy$ 이고, $\dfrac{dL}{dx} = \cdots \cdot \dfrac{dg}{dx}$ 가 Gradient를 구하기 위한 Chain Rule
이 경우에 $\dfrac{dg}{dx} = y$ 입니다.
이 때에 y가 Sigmoid의 결과값이고 Sigmoid에 매우 작은 값이 인풋으로 들어온다고 가정해봅시다.
Sigmoid 함수는 아주 작은 값이 인풋으로 들어올 때에 거의 0에 수렴하게 됩니다.
이러한 이유로 Chain Rule에 따라 계산하면 우리가 구하고자 하는 Gradient는 Sigmoid 함수에의해 거의 0에 수렴하게 됩니다.
Gradient의 크기만큼 파라미터를 업데이트해나가는 것이 Gradient Descent의 핵심이었습니다.
따라서, y 이전의 파라미터들(x 포함)은 업데이트되지 않습니다.
이러한 Gradient Vanishing 문제를 해결하기 위해서 최근에는 Sigmoid함수보다는 ReLU 함수를 주로 사용합니다.
(아래에 Sigmoid와 ReLU의 그래프를 그래두었으니 참고하시기 바랍니다.)
Rectified Linear Unit (ReLU) Activation
$\text{ReLU}(x) = max(0, x)$
Sigmoid는 인풋 값이 너무 커지거나 작아지면(그래프의 양 끝) Gradient가 0으로 수렴해버립니다.
반면, ReLU는 인풋이 0보다 크기만 하다면 전 구간에서 Gradient가 사라지지 않습니다.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-5, 5, 1001)
sigmoid = 1 / (1+np.exp(-x))
relu = np.maximum(0, x)
plt.figure(figsize=(11, 5))
ax1 = plt.subplot(1,2,1)
ax1.plot(x, sigmoid)
ax1.set_title("Graph of Sigmoid")
ax2 = plt.subplot(1,2,2)
ax2.plot(x, relu)
ax2.set_title("Graph of ReLU")
plt.show()
지금까지 Sigmoid, Softmax, ReLU의 Activation function에 대해서 알아보았습니다.
아래는 그 외의 Activation function 들입니다.
Activation Functions
$\begin{array} \ \text{Sigmoid} = \dfrac{1}{1+e^{-x}} & \text{tanh} = \dfrac{2}{1 + e^{-2x}} -1 \cdots \text{(참고. Sigmoid의 아웃풋 범위가 (-1, 1)로 변형된 모양)} \\ \text{ReLU} = max(0, x) & \text{Leaky ReLU} = max(0.1x, x) \\ \text{Maxout} = max(w_1^Tx + b1, w_2^Tx + b2) & \text{ELU} = \begin{cases} x & x>=0 \\ \alpha(e^x - 1) & x<0 \end{cases} \end{array}$
(이 외에도 많은 Activation function 들이 있습니다.)
'Basic fundamentals' 카테고리의 다른 글
(10) Optimizer (0) | 2020.01.13 |
---|---|
(9) Other Techniques of Optimize (0) | 2020.01.13 |
(7) Regularization (0) | 2020.01.13 |
(6) Overfitting (0) | 2020.01.13 |
(5) Model Capacity (0) | 2020.01.13 |