Cell state는 기억해야할 필요가 있는 모든 정보를 담고 있는 벡터라면
hidden state는 현재 time step에서 예측값 layer의 입력으로 사용 될 벡터라고 할 수 있다. cell state의 많은 정보 중에서 지금 당장 필요한 정보만을 filtering한 벡터라고 볼 수 있다.
{c_t, h_t} = LSTM(x_t, c_t-1, h_t-1)
hidden state 계산 과정을 살펴보자. Wxh, Whh를 붙여서 W라고 하고 [xh]와 계산하는 것과 같다.
x(h,1), h(h,1), Wxh(h,h), Whh(h,h) 이라고 하자.
xh의 concat은 (2h,1)이다. Wxh, Whh의 concat은 (h,2h)
input gate, forget gate, output gate, gate gate를 위해 4번 f(Wxh*x + Whh*h + b)를 수행해야 하므로 서로 다른 4개의 W'를 이어 붙여서 결국 W(4h,h)이다.
자 그럼 W *[xh]를 한 결과를 가지고 각 게이트 별로 다른 activation이 수행된다.
i : whether to write to cell
f : whether to erase cell
o : how much to reveal cell
g : how much to write to cell
sigmoid를 통과한 확률값은 기존 벡터가 갖던 값을 앞으로 얼마나 반영할지 혹은 그 확률로 반영할지 말지를 결정한다.
1. Forget gate
이전 가정을 그대로 따라오면서 cell state (h,1) 의 h가 3이라고 가정하고 [3,5,-2]로 예를 들어보자.
sigmoid를 거친 결과 f_t도 (h,1)이고 [0.3, 0.7, 0.1] 이라고 해보자.
그럼 두 벡터를 elementwise multiply해서 각 값에서 몇 퍼센트씩 잊어버릴 것인지 결정한다. [0.9, 3.5, -0.2]가 된다.
2. Input gate, Gate gate
input gate를 거쳐서 나온 확률 벡터 i_t, 그리고 tanh를 거친, 의미를 지니고 있는 벡터 C_t 틸다 두개를 elementwise muliplication한다. 즉 새로 들어온 정보 중에 얼마만큼만 update에 반영할지를 결정한다.
그럼 새롭게 구한 cell state C_t는 기존 정보를 잊은 결과(f_t * C_t-1) + 새로운 정보를 추가(i_t * C_t 틸다) 로 구해진다.
3. Output gate : generate Hidden State
output gate를 통과하고 나온 벡터와 현재 시점에서 구한 tanh(cell state C_t)를 elementwise 곱한다. 이 역시 얼마나 output으로 쓸지를 곱하는 것이다.
Cell state는 기억해야할 필요가 있는 모든 정보를 담고 있는 벡터라면
hidden state는 현재 time step에서 예측값 layer의 입력으로 사용 될 벡터라고 할 수 있다. cell state의 많은 정보 중에서 지금 당장 필요한 정보만을 filtering한 벡터라고 볼 수 있다.
예를들면 인용문을 생성하는 lstm이라고 하면 "가 열려 있음을 기억할 필요가 있지만(cell state) 아직 인용문이 끝나지 않아서 단어를 내뱉어야 한다면(hidden state) cell state에서 filtering해서 단어를 뱉어낸다고 볼 수 있다.
4. Gate Recurrent Unit, GRU
lstm을 경량화 하였다. 메모리도 적게 쓰고 빠르다. 오직 hidden state만 있다.
GRU는 update gate(input gate)를 통과한 z_t, reset gate(forget gate)를 통과한 r_t 를 구한다.
의미를 담고 있는 h_t 틸다는 previous hidden state에 reset할 확률을 곱한 r_t*h_t-1 과 x_t를 가지고 구한다. (이때 W는 [Wxh, Whh]) lstm에서 gate gate를 통과해서 C_t 틸다를 구한 것과 대조적이다.
lstm에서는 forget gate, input gate의 확률을 반영해서 새 cell state를 구하는 반면
GRU에서는 update 확률 z_t와 (1-z_t)를 각각 곱해서 새 hidden state를 구한다. 즉 새 정보를 60퍼센트 보존한다면 이전 정보는 40퍼센트 잊는 셈이다.
5. LSTM Backpropagation
RNN에서 BPTT시에 계속 Whh가 곱해졌던 반면, LSTM에서는 앞에 cell에서 전파되는 gradient가 x(약간 변형)와 +로 거의 복사되어 전달 되기 때문에 vanishing/exploding gradient을 얼추 해소한다.
'boostcamp AI tech > boostcamp AI' 카테고리의 다른 글
Beam search (1) | 2023.11.30 |
---|---|
Seq2Seq with attention (1) | 2023.11.30 |
Word Embedding - Word2Vec, GloVe (1) | 2023.11.27 |
Naive-Bayse Classifier (1) | 2023.11.27 |
Short history of Generative model (0) | 2023.11.24 |