아래 식과 같이 $h_{0}$에서부터 $h_{4}$까지 가는 동안 똑같은 weight와 activation function($ \phi $)을 거치게 된다.
activation function이 sigmoid/tanh라고 가정해보면 0~1사이의 값으로 줄어들고(정보를 줄이는 것) 이를 계속 반복해서 거치면 vanishing gradient가 발생하게 된다.
activation function이 ReLU이고 h값이 양수라면 계속 W값이 곱해지면서 exploding gradient 문제가 발생한다.
네이버 부스트캠프
LSTM (Long Short Term Memory)
RNN / LSTM
들어오는 입력도 3개, 나가는 것도 3개, 그러나 실제로 출력되는 것은 $h_{t}$ 하나이다.
Previous cell state : 내부에서만 흘러가고 time-step t까지의 정보를 다 취합해서 summarize해주는 역할
Core Idea
Cell state에서 다음 time-step으로 넘겨줄 때
어떤 정보가 유용하고 어떤 정보가 유용하지 않은지를 잘 조작하여 정보를 취합해서 summarize하는 과정을 거치게 된다.
이런 조작들을 gate에서 수행하게 된다.
Forget Gate
어떤 정보를 버릴지 판단한다.
현재 입력 $x_{t}$와 이전의 output $h_{t-1}$이 Sigmoid에 들어가서 $f_{t}$ 는 항상 0~1사이의 값을 갖게된다.
$f_{t}$는 이전의 cell state에서 나오는 정보 중에 어떤 것을 버리고 어떤것을 버릴지 선택하게 된다.
Input Gate
현재 입력이 들어왔을 때 이 정보중에 어떤 정보를 올릴지 말지를 정한다.
$i_{t}$는 이전의 prev hidden state와 현재 입력 $x_{t}$를 가지고 만들어지는데, 어떤 정보를 cell state에 추가할지 말지에 대한 정보를 갖고 있다.
$ \tilde{C}_{t} $ 도 이전의 prev hidden state와 현재 입력 $x_{t}$이 들어와서 따로 학습되는 neural network를 통해서 tanh를 통과해서 나오는 모든 값이 -1~1로 정규화 되어 있는 예비 Cell State이라고 볼 수 있다.
이전의 Cell State와 현재 정보와 이전 output으로 만들어진 $ \tilde{C}_{t} $을 잘 섞어서 Cell State를 update해주면 된다.
$i_{t}$와 forget gate에서 나온 것을 곱해서 버릴것은 버리고
$ \tilde{C}_{t} $에 $i_{t}$를 곱해서 올릴 값은 올리고
이 둘을 합쳐서 새로운 Cell State를 Update하게 된다.
Output Gate
어떤 값을 밖으로 내보낼지를 정하는 역할이다.
Gated Recurrent Unit
2개의 gate만 있다. Reset gate, Update gate
Cell State가 없고 Hidden State만 있다.
LSTM에 비슷하며 단순해진 모델 네트워크 파라미터가 적은데 적은 파라미터로 좋은 output을 내면 generalization 성능이 좋기 때문에 여러 Task에서 LSTM보다 GRU를 사용할 때 성능이 높아지는 경우를 종종 본다.