(배경) vanilla RNN 모델의 장기 의존성 문제(the problem of Long-Term Dependencies)
기존의 RNN 모델은 input 문장의 길이가 길어질 수록, 즉 time step이 길어질 수록 앞의 정보가 뒤로 충분히 전달되지 못한다.
긴 문장이 input으로 들어왔을 때, 앞쪽에 위치하는 단어들은 아무리 중요한 단어라고 해도 멀리 떨어진 단어를 예측하는 데 거의 영향을 주지 못한다.
이는 back propagation 관점에서 이해할 수 있다. RNN에서 gradient를 구할 때는 이전 시점들에서의 gradient들까지 time series 하게 chain rule로 곱해야 해서 이 때의 back propagation을 backpropagation through time(BPTT)이라고 한다. 위와 같이 RNN model input 된 단어가 지나치게 많다면, 곱해지는 미분값들이 지나치게 많아져서 gradient vanishing이 일어나 제대로 학습되지 못한다.
이렇게 모델이 충분한 기억력을 갖지 못하는 문제를 장기 의존성 문제라고 한다.
LSTM(Long Short Term Memory Network)
RNN | LSTM |
- RNN의 장기 의존성 문제를 해결한 모델이 바로 LSTM이다.
- LSTM 셀의 상태(state)는 ht와 Ct로 나눌 수 있다.
- ht: 단기 상태 (short-term state)
- Ct: 장기 상태 (long-term state)
- LSTM에서는 h_t-1과 x_t의 2개의 input을 받고, cell state를 조절하기 위해 4개의 게이트를 계산한다.
- 여기엔 삭제 게이트(forget gate: ft), 입력 게이트(input gate: it, gt), 출력 게이트(output gate: ot)가 있다. [i, f, o, g]
- cell state에 무언가 더하거나 줄이는 능력은 이러한 gate에 의해 조절되고 이 gate는 sigmoid 또는 tanh layer를 거친다.
"LSTM은 불필요한 기억은 지우고 기억해야할 것은 기억한다."
(1) forget gate
- cell state로부터 어떤 정보를 버릴지 결정하는 gate
- sigmoid layer를 거친 결과가 0에 가까우면 이전 상태의 정보를 잊고, 1에 가까우면 이전 상태의 정보를 온전히 기억하게 된다, 즉 이전 cell state의 on/off의 정도를 결정한다고 할 수 있다.
- h_t-1과 xt가 삭제 가중치와 곱해진 후 sigmoid layer을 거친다.
- 입력 문장에서 새로운 주어가 왔을 때 이전 주어를 잊어버릴 수 있다.
(2) input gate
- 앞으로 들어오는 새로운 정보 중 어떤 것을 cell state에 저장할 것인지 결정하는 gate
- sigmoid layer와 tanh layer가 이를 결정한다.
- x_t와 h_t-1가 각각의 입력 가중치와 곱한 뒤 sigmoid layer / tanh layer을 거친다.
- 새로운 주어가 나왔을 때 forget layer에서 이전 주어를 잊어버리고, 새로운 주어를 기억할 수 있다.
(3) cell state update
ft * Ct-1
- ft와 Ct-1의 element wise multiplication으로, 이전 state의 element들에 대해 0~1사이 값을 곱하는 것.
- ft는 sigmoid layer을 거쳐 0~1 사이의 값을 가진다.
- ft의 특정 위치의 element가 0: Ct-1의 해당 위치의 element를 잊어버린다.
- ft의 특정 위치의 element가 1: Ct-1의 해당 위치의 element를 기억한다.
- => ft가 실제로 cell state의 on/off의 정도를 결정함.
it*gt
- i는 sigmoid function을 거쳐 0~1 사이의 값을, g는 tanh function을 거쳐 -1 ~ 1 사이의 값을 가진다.
- it와 gt의 element wise multiplication
- it * gt의 특정 위치의 element가 1: Ct의 해당 위치의 element가 1만큼 증가
- it * gt의 특정 위치의 element가 -1: Ct의 해당 위치의 element가 1만큼 감소
ft * Ct-1 + it * gt
위 두 행렬을 더해서 버릴 것은 버리고, 기억할 것은 기억하는 Ct가 계산됨.
(4) output gate
- 무엇을 output으로 내보낼 지 정하는 gate로 sigmoid layer를 이용한다.
- x_t와 h_t-1을 출력 가중치와 곱해서 sigmoid layer을 지나서 ot를 구한다.
- ot는 0~1 사이 값을 가져서 각 스텝에서 다음 hidden state를 계산할 때 cell state를 얼마나 노출시킬 지 결정한다.
- ot의 특정 위치의 element가 1: tanh(Ct)의 해당 위치의 element가 ht에서 온전히 노출된다.
- ot의 특정 위치의 element가 0: tanh(Ct)의 해당 위치의 element가 ht에서 노출되지 않는다.
LSTM의 forward propagation
x_t와 h_t-1이 hidden layer로 전달이 되고, layer 안에서 [ft, it, gt, ot]가 계산된다. ft, it, gt, ot는 동일한 x_t, h_t-1에 대해 모두 다른 가중치가 곱해진 뒤 it, ft, ot는 sigmoid가, gt는 tanh가 처리된 것이다. 위는 이 과정을 행렬로 나타낸 것이다.
xt와 ht-1이 hidden state로 들어가서 [ft, it, gt, ot], Ct가 계산되고 ht가 출력되는 과정을 도식화 한 것이다.
LSTM의 backward propagation
LSTM은 RNN과 비교하여 gradient vanishing 문제를 해결했다고 했는데, 어떻게 가능한걸까?
Ct로의 upstream을 dCt라고 하자. dCt가 덧셈 노드를 만나서 두 방향으로 dCt가 그대로 흘러간다. dCt가 원소별 곱셈 노드를 만나서 input을 바꿔 dCt와 곱해지기 때문에 dCt-1 = dCt * ft가 된다.
이렇게 구해진 gradient의 장점은 다음과 같다.
- 원소별 곱셈은 행렬곱에 비해 계산 비용이 적게 든다.
- 매 step마다 다른 값의 ft가 곱해진다.
'딥러닝 > nlp 논문' 카테고리의 다른 글
Attention 모델이란? (0) | 2021.04.04 |
---|---|
Seq2Seq (Sequence-to-Sequence) 이란? (0) | 2021.04.04 |
FastText (0) | 2021.03.18 |
Word2vec 논문 리뷰 (0) | 2021.03.18 |
NNLM, RNNLM, Word2vec (0) | 2021.03.17 |