AI/Fundamental

LSTM (Long Short-Term Memory) 신경망 모델 공부하기

방황하는 데이터불도저 2023. 8. 28. 18:46

이 글을 읽기 전에

해당 내용은 08-02 장단기 메모리(Long Short-Term Memory, LSTM) - 딥 러닝을 이용한 자연어 처리 입문 을 보고 공부한 내용입니다. 잘못된 부분이 있다면 댓글 부탁드립니다.
 
아래의 내용을 보기 전에 RNN을 먼저 공부하고 오시는 것을 추천드립니다!
https://kyull-it.tistory.com/139

 

RNN(Recurrent Neural Network) 순환신경망 공부하기

08-01 순환 신경망(Recurrent Neural Network, RNN) - 딥 러닝을 이용한 자연어 처리 입문 글을 참고하여 공부한 내용을 정리하였습니다. RNN은 Input값과 Output값을 Sequence 단위로 끊어서 처리하는 Sequence Model

kyull-it.tistory.com


LSTM  (Long Short-Term Memory)

SimpleRNN에서는 짧은 Sequence에 대해서만 효과를 보인다는 단점이 있다. x_1에 대한 정보량이 점점 h_t로 갈수록 옅어지는 것이다. 아주 긴 문장에서 문장의 뒷부분에서 초반에 나온 단어에 대해 고려해줄 수 없다는 한계가 있는 것이다. → 장기 의존성 문제 (the problem of Long-Term Dependencies)

이를 보완해주기 위해 나온 것이 LSTM; Long Short-Term Memory; 장단기 메모리이다. 기억할 것은 기억하고, 잊을 것은 잊는 전략으로 데이터를 학습한다.
 

  • 은닉층의 메모리 셀 구성 : 입력게이트, 망각/삭제 게이트, 출력 게이트
  • 메모리 셀 상태로는 1) 은닉상태 h_t, 2) 셀 상태 C_t를 사용한다. 

 
1. 입력게이트(Input Gate) : 현재 정보를 저장하기 위한 게이트

결과값 : 선택된 기억할 정보의 양

2. 삭제게이트(Forget Gate) : 기억을 삭제할 정보의 양을 정해줄 게이트

결과값 : 0에 가까울수록 삭제된 양이 많고, 1에 가까울수록 온전히 기억하는 것이다.

3. 셀 상태(Cell State) : 선택된 기억을 다음으로 넘겨주기 위한 연산을 수행.

  • t시점의 셀상태 C는 삭제 게이트의 결과와 입력게이트에서 선택된 기억의 결과값을 더하여, 다음 셀로 넘어간다.
  • 삭제게이트 : f_t의 값은 이전 시점의 입력을 얼마나 반영할 것인지에 대한 것.
  • 입력게이트 :  i_t ⊗ g_t  의 값은 현재 시점의 입력을 얼마나 반영할 것인지에 대한 것.
  • 주의! : 이렇게 구해진 Cell state는 Memory state라고도 불림.

⊗ : Hadamard Product 하다마르 곱 : element-wise 곱을 수행

4. 출력게이트(Output Gate) : 다음으로 넘겨줄 현재 은닉상태를 계산. 

  • 입력데이터에 대해 은닉상태에 대한 feed forward 연산을 수행함

  • feed forward 결과값과 현재 셀 상태의 출력게이트 결과값에 대해 하다마르 곱을 수행함 

결과값은 출력층과 다음 은닉층으로 전달됨

  • 주의! : 이렇게 구해진 hidden state는 Carry state / Output state라고도 불림.

 

* python, tensorflow, numpy로 구현한 LSTM 모델 cell의 연산 source code는 제 Github에서 보실 수 있습니다.

   https://github.com/kyull-it/My-Neural-Networks/blob/main/LSTM.ipynb


정리 요약 

  • 이전 뉴런의 은닉 상태, 셀 상태의 값을 다음 뉴런으로 전달한다.
  • 입력게이트, 삭제게이트에서 기억/삭제할 정보의 양 = 현재의 셀 상태를 계산한다. (입력데이터와 이전 은닉 상태로 연산)
  • 출력게이트에서 기억/삭제할 정보를 결정한다. = 현재의 은닉 상태를 계산한다.
    (출력데이터=SimpleRNN과 동일 + 현재 셀 상태와 연산)