본문 바로가기
  • 공부 기록 인생 기록
Python/NLP

장단기 메모리(Long Short-Term Memory, LSTM)

by 티권 2023. 3. 26.

장기 의존성 문제(the problem of Long-Term Dependencies)

- 은닉층의 과거의 정보가 마지막까지 전달되지 못하는 현상

 

바닐라 RNN은 출력 결과가 이전의 계산 결과에 의존함

아래 그림 처럼 x1의 정보량은 시점이 길어질수록 점점 옅어짐

-> 장기 의존성 문제 발생

 

LSTM은 이러한 바닐라 RNN의 단점을 극복한 모델


LSTM 구조

 

바닐라 RNN과의 차이점

- 은닉층의 메모리 셀에 입력 게이트, 망각 게이트, 출력 게이트를 추가

-> 불필요한 기억을 지우고, 기억해야할 것들을 정함

- 은닉 상태를 계산하는 식이 조금 더 복잡

- 긴 시퀀스 데이터 처리에 성능이 훨씬 더 좋음

- 셀 상태(cell state) 라는 값이 추가 됨, C(t)

  -> 은닉 상태처럼 이전 시점의 셀 상태가 다음 시점의 셀 상태를 구하기 위한 입력으로서 사용됨

셀 상태, C(t)

 

삭제 게이트, 입력 게이트, 출력 게이트를 통해서 은닉 상태, 셀 상태를 구함

 


입력 게이트

- 현재 시점(t)의 정보를 기억하기 위한 게이트

- i(t) : x(t)와 h(t-1)이 입력됨. 시그모이드 함수를 지나 0과 1사이의 값을 가짐

- g(t) : x(t)와 h(t-1)이 입력됨. 하이퍼볼릭탄젠트 함수를 지나 -1과 1사이의 값을 가짐

-> 이 두 개의 값을 가지고 이후에 셀 상태를 계산함


삭제 게이트

- 기억을 삭제하기 위한 게이트

- f(t) : x(t)와 h(t-1)이 입력됨. 삭제 과정을 거친 정보의 양을 의미함. 시그모이드 함수를 지나 0과 1사이의 값을 가짐

-> 1에 가까울 수록 정보가 덜 삭제된 것


셀 상태 구하기

1. 입력 게이트에서 구한 g(t)와 i(t)를 성분곱 -> t 시점에서 기억할 값

2. 삭제 게이트에서 구한 f(t)와 c(t-1)을 성분곱 

3. 이 두가지 결과값을 더함 -> t시점에서의 셀 상태 (c(t))

 

삭제 게이트의 출력값 f(t) 0~1

- 삭제를 많이 할수록 0에 가까워짐

- f(t)가 0이라면, t-1시점의 셀 상태가 t시점의 셀 상태를 결정하기 위한 영향력이 0이 됨

  -> 입력 게이트의 결과만이 t시점의 셀 상태를 결정

  -> 삭제 게이트 완전히 닫히고, 입력 게이트를 연 상태

  -> 이전 정보를 많이 완전히 삭제하고, 현재 정보만 가져가는 상태

 

입력 게이트의 출력값 i(t) 0~1

- i(t)가 0이라면, t시점의 셀 상태는 오직 t-1시점의 셀 상태에만 의존함

  -> 입력 게이트 완전히 닫히고, 삭제 게이트를 연 상태

 

삭제 게이트

- 이전 시점의 입력(c(t-1))을 얼마나 반영할지

 

입력 게이트

- 현재 시점의 입력(g(t))을 얼마나 반영할지

 

 

셀 상태란, 현재 시점의 입력과 이전 시점의 입력을 얼마나 반영할지 정하는 것.


출력 게이트와 은닉 상태

 

출력 게이트

- x(t)와 h(t-1)를 시그모이드 함수에 넣어서 출력 -> o(t)

 

은닉 상태

- c(t)를 하이퍼볼릭탄젠트 함수에 넣어서 출력된 값과, 출력 게이트의 출력값(o(t))을 곱함 -> h(t)

- c(t) 는 -1 ~ 1 사이의 값. 출력 게이트의 값과 연산되면서 값이 걸러지는 효과 발생. 은닉 상태


요약

- 입력 게이트, 망각 게이트를 통해 셀 상태 도출

- 셀 상태로 현재 시점의 입력과 이전 시점 입력을 얼마나 반영할지 정함

- 은닉 상태로 다음 시점으로 보낼 값을 정함 

'Python > NLP' 카테고리의 다른 글

어텐션(인코더-디코더 Attention, Dot-Product Attention)  (0) 2023.06.27
시퀀스-투-시퀀스(seq2seq)  (0) 2023.04.11
워드투벡터(Word2Vec)  (0) 2023.03.20
워드 임베딩이란  (0) 2023.03.20
RNN 언어 모델(RNNLM)  (0) 2023.03.19