RNN의 문제
- gradient vanishing
- 관련 정보와 그 정보를 사용하는 지점 사이의 거리가 멀 경우 역전파 과정에서 기울기가 점차 줄어들어 학습능력이 크게 저하되는 문제가 발생
- tanh(..tanh(...tanh(..))) 이렇게 tanh를 반복적으로 적용하는데, tanh는 미분하면 1보다 작기 때문에 gradient vanshing
- 따라서 RNN은 long-range dependency를 잘 학습하지 못한다.
LSTM
- gate-sigmoid를 이용하여 0~1 사이의 값을 구한다
- forget gate : 이전 cell state 정보를 얼마나 잊어버릴지 (0에 가까울수록 많이 잊어버림)
- input gate : 새로운 정보를 cell state에 얼마나 반영할지 (1에 가까울수록 많이 반영한다)
- output gate : cell state 정보를 hidden state에 얼마나 내보낼지 (1에 가까울수록 많이 내보낸다)
- gradient vanishing 문제의 완화
curt-park.github.io/2017-04-03/why-is-lstm-strong-on-gradient-vanishing/
LSTM가 gradient vanishing에 강한이유?
The reason why LSTM is strong on gradient vanishing
curt-park.github.io
RNN의 backpropagation
$$ h^{<t>} = tanh(W_{hh}h^{<t-1>}+W_{xh}x^{<t>}+b_h) $$
$$ \frac{\partial h^{<t>}}{\partial h^{<t-1>}} = W_{hh} tanh'(W_{hh}h^{<t-1>}+W_{xh}x^{<t>}+b_h) $$
$$ \frac{\partial h^{<t_1>}}{\partial h^{<t_2>}}
= \frac{\partial h^{<t_1>}}{\partial h^{<t_1-1>}} * \frac{\partial h^{<t_1-1>}}{\partial h^{<t_1-2>}} * ... *\frac{\partial h^{<t_2+1>}}{\partial h^{<t_2>}} $$
$$ \prod_{t=t_2}^{t_1-1} W_{hh} tanh'(W_{hh}h^{<t>}+W_{xh}x^{<t+1>}+b_h) $$
W_hh의 값이 -1 ~ 1 사이라면 곱해질수록 0에 가까워지고,
W_hh의 값이 -1 미만, 1 초과라면 곱해질수록 gradient가 exploding된다.
LSTM의 backpropagation
$$ C^{<t>} = f_t*C^{<t-1>} + i_t\tilde{C^{<t>}} $$
$$ \frac{\partial C^{<t>}}{\partial C^{<t-1>}} = f_t $$
$$ \frac{\partial C^{<t_1>}}{\partial C^{<t_2>}} =\frac{\partial C^{<t_1>}}{\partial C^{<t_1-1>}} * \frac{\partial C^{<t_1-1>}}{\partial C^{<t_1-2>}} * ... * \frac{\partial C^{<t_2+1>}}{\partial C^{<t_2>}} $$
$$ \frac{\partial C^{<t_1>}}{\partial C^{<t_2>}} =\prod_{t=t_2+1}^{t1}f_t $$
forget gate의 값이 1에 가깝다면(=이전 hidden state를 잊어버리지 않는 것) gradient가 유지되어 전달될 것이고,
forget gate의 값이 0에 가깝다면(=이전 hidden state를 잊어버리고 새로운 hidden state 계산된 것) gradient가 0에 가까울 것이다.
forget gate의 의미와 gradient의 크기가 유사하게 된다.
GRU
- LSTM를 조금 더 간단하게 수정한 버전
- LSTM에서는 cell state, hidden state가 사용된 반면, GRU에서는 hidden state만 사용한다.
- LSTM에서는 3개의 gate(forget, input, output)가 사용된 반면, GRU에서는 forget, input gate만 사용한다.
- z_t가 1에 가깝다면 이전의 hidden state를 많이 잊어버리고, 새로운 정보를 많이 반영
- z_t가 0에 가깝다면 이전의 hidden state를 많이 유지하고, 새로운 정보를 덜 반영
$$ z_t = \sigma(W_z[h_{t-1}, x_t]) $$
$$ r_t = \sigma(W_r[h_{t-1}, x_t]) $$
$$ \tilde{h}_t = tanh(W[r_t*h_{t-1}, x_t]) $$
$$ h_t = (1-z_t)*h_{t-1}+z_t*\tilde{h}_t $$
'🙂 > Coursera_DL' 카테고리의 다른 글
WEEK8 : negative sampling (0) | 2020.12.26 |
---|---|
WEEK8 : Word Embedding (word2vec) (0) | 2020.12.26 |
WEEK7 : RNN (0) | 2020.12.25 |
WEEK7 : convNet in 1D, 2D, 3D (0) | 2020.12.25 |
WEEK7 : Neural Style Transfer (1) | 2020.12.25 |