Long Short-Term Memory(LSTM), Gated Recurrent Unit(GRU)

pseeej·2021년 9월 17일
0

NLP

목록 보기
6/9
post-thumbnail

Long Short-Term Memory(LSTM)

Core Idea

  • 주요 개념 : cell state 정보를 transformation을 거치지 않고 전달함으로써 long-term dependency 문제 해결
  • time step이 먼 경우에도 필요한 정보를 효과적으로 처리하고 학습할 수 있도록 함으로써 gradient vanishing 및 explosion 문제 해결

What is LSTM?

  • 단기 기억을 담당하는 기억 소자로, 보다 길게 기억할 수 있도록 개선한 model
  • ht=fw(xt,ht1)h_t = f_w(x_t, h_{t-1})
  • Ct,ht=LSTM(xt,ct1,ht1){C_t, h_t} = LSTM(x_t, c_{t-1}, h_{t-1})
  • CtC_t : cell state vector의 완전한 정보를 가지고 있음
  • hth_t : cell state vector를 한 번 더 가공하여 그 time step에서 노출할 필요가 있는 정보만을 남긴 filtering된 정보를 담는 vector

Long short-term memory

  • cell state, hidden state vector 계산 위한 중간 결과물

    • ii : input gate. cell을 받음
    • ff : forget gate. cell을 지움
    • oo : output gate. 얼마나 cell을 공개시킬지 결정
    • gg : gate gate. 얼마나 cell을 사용할 것인지 결정
  • ww : 선형 변환 위한 matrix

  • 2h2h : xtx_tht1h_{t-1} 모두 hh의 dimension 가질 때. (h+h)=2h(h+h)=2h

  • 각 gate는 cell state에서 흐를 수 있는 정보의 양 등을 결정

  • i,f,o,gi, f, o, g vector들은 Ct1C_{t-1}를 적절하게 변환하는 데에 사용

  • Forget gate

    - ft=σ(Wf[ht1,xt]+bf)f_t = \sigma(W_f\cdot[h_{t-1}, x_t]+b_f)
    - ht1h_{t-1}xtx_t가 만나는 곳에서 선형결합
    - sigmoidsigmoid 거친 뒤의 ftf_t에서는 forget하지 않을 정도 기록
    - (30%를 forget한다면 0.7로 기록)
    - Ct1C_{t-1}의 값과 ftf_t를 내적한 값을 xx에 기록

  • 생성된 정보들은 input gate에 의해 더해지거나 제외될 수 있음

    - it=σ(Wi[ht1,xt]+bi)i_t = \sigma(W_i\cdot[h_{t-1}, x_t]+b_i)
    - Ct~=tanh(Wc[ht1,xt]+bc)\widetilde{C_t}=tanh(W_c\cdot[h_{t-1},x_t]+b_c) → -1에서 1 사이 값 가짐

  • 이전 cell state에 현재의 정보를 추가함으로써 새로운 cell state 생성
    - Ct=ftCt1+itCt~C_t=f_t\cdot C_{t-1}+i_t\cdot\widetilde{C_t}
    - ftCt1f_t\cdot C_{t-1}를 통해 필요한 정보만 유지

  • cell state를 tanh 또는 ouput gate로 보냄으로써 hidden state 생성

  • hidden state를 다음 time step으로 보내고, 필요하다면 output으로 내보내거나 next layer로 보냄
    - ot=σ(W0[ht1,xt]+b0)o_t=\sigma(W_0[h_{t-1},x_t]+b_0)
    - ht=ottanh(Ct)h_t=o_t\cdot tanh(C_t), output layer의 입력
    - CtC_t는 기억해야 하는 모든 정보를 담고 있음

  • dimension별로 적절한 비율만큼 값들을 작게 만들어서 최종적인 hth_t 구성

  • 필요한 정보만을 담고 있음

Gated Recurrent Unit(GRU)

What is GRU?

  • LSTM의 model 구조 경량화해서 적은 memory 요구량과 빠른 개선이 가능하도록 함
  • LSTM의 CtC_t(Cell state vector)와 hth_t(hidden state vector)를 hth_t로 일원화
  • 2개의 독립된 gate를 통해 하던 연산을 하나의 gate만으로 계산하도록 함

    - zt=σ(Wz[ht1,xt])z_t = \sigma(W_z\cdot[h_{t-1},x_t]), input gate
    - rt=σ(Wr[ht1,xt])r_t = \sigma(W_r\cdot[h_{t-1},x_t])
    - ht~=tanh(W[rtht1,xt])\widetilde{h_t}=tanh(W\cdot[r_t\cdot h_{t-1},x_t])
    - ht=(1zt)ht1+ztht~h_t = (1-z_t)\cdot h_{t-1}+z_t\cdot \widetilde{h_t} (LSTM에서는 Ct=ftCt1+itCt~C_t=f_t\cdot C_{t-1}+i_t\cdot \widetilde{C_t})
    - LSTM의 ftf_t1zt1-z_t로 작용하여 가중평균 내는 형태로 계산됨
  • input gate가 커지면 커질수록 forget gate에 해당하는 값이 작아짐
  • hidden state vector hth_tht1h_{t-1}ht~\widetilde{h_t}로 계산됨

Backpropagation in LSTM/GRU

  • 덧셈을 통해서 원하는 정보를 만들어줌으로써 gradient vanishing, explosion 문제 해결

Summary on RNN/LSTM/GRU

  • RNN은 architecture design에 굉장히 유연함
  • vanila RNN은 simple하지만 잘 작동하지 않음
  • RNN의 기울기에 대한 backward flow는 explode와 vanish 가능성이 있음
  • LSTM과 GRU는 gradient flow를 향상시켜줌
profile
세진니의 눈물 가득 블로그

0개의 댓글