본문 바로가기

딥러닝/nlp 논문

LSTM (Long-Short Term Memory)이란?

(배경) vanilla RNN 모델의 장기 의존성 문제(the problem of Long-Term Dependencies)

시점이 지날수록 x1의 정보는 손실된다.

기존의 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

xt와 ht-1에 동일한 Wf가 곱해지는 것은 아니다!

  • 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