0. LSTM이란?
• LSTM : RNN의 한 종류로, RNN의 장기 의존성 문제(long-term dependencies)를 해결하기 위해서 나온 모델
- 직전 데이터뿐만 아니라, 더욱 거시적으로 과거 데이터를 고려하며 데이터를 예측 가능
- 총 6개의 파라미터와 4개의 게이트로 구성

LSTM의 전체 architecture

1. LSTM의 구조
1) Cell state
: LSTM의 핵심은 cell state으로, 모듈 그림에서 수평으로 그어진 윗 선에 해당함

- Cell state는 메모리와 같은 존재로, State가 오래 경과하더라도 Gradient가 잘 전파됨
- Cell state는 Gate라고 불리는 구조에 의해서 정보가 추가되거나 제거됨
- Gate는 Training을 통해서 어떤 정보를 유지하고 버릴지 학습
2) Gates
LSTM은 3개의 Gate를 가지고 있고, 이 gate들은 cell state를 보호하고 제어함
세 개의 gate 모두 활성화함수로 시그모이드를 적용
① forget gate (f) : 과거 정보를 잊기 위한 게이트
② input gate (i) : 현재 정보를 기억하기 위한 게이트
③ output gate (o) : 최종 결과를 내보내기 위한 게이트
2. LSTM의 단계별 진행
1) Forget Gate
- 과거 정보를 얼마나 잊을 것인지 결정하는 단계
- h(t−1)와 x(t)를 받아서, sigmoid layer를 통해 0과 1 사이의 값을 C(t−1)에 보냄
- 결과값이 1이면 이전 상태의 모든 정보를 보존
- 결과값이 0이면 "이전 상태의 모든 정보를 버림

- 현재 정보를 얼마나 기억할 것인지 결정하는 단계
① h(t−1)와 x(t)를 받아서, sigmoid layer를 통해 i(t) 계산
② tanh layer를 통해 새로운 후보 값들인 ~C(t)라는 vector 생성
③ i(t)와 ~C(t)의 정보를 합쳐, cell state를 업데이트할 재료 생성

3) State Update
- 이전 cell state인 C(t−1)를 업데이트해서 새로운 cell state인 C(t)를 만드는 단계
① 이전 cell state를 얼마나 잊을건지(forget gate) 곱해줌
② 현재 cell state를 얼마나 반영할건지(inpute gate) 더해줌
③ 최종 결과를 다음 상태의 cell state로 내보냄

4) Output Gate
- 다음 State로 내보낼 output(hidden state)을 구하는 단계
① cell state에 tanh를 취함
② h(t−1)와 x(t)를 받아 sigmoid layer를 통해 O(t)를 계산
③ O(t)와 tanh 결과를 곱해 output(hidden state)을 내보냄

3. LSTM의 장점 및 단점 분석
1) 장점
- 기존의 RNN은 단기 메모리만을 가지고 recurrently 학습을 했다면, LSTM은 단기 메모리와 장기 메모리를 나눠 학습 후, 두 메모리를 병합해 이벤트 확률을 예측함
-> 과거의 정보를 훨씬 잘 반영해 기존 RNN보다 좋은 성능 가짐
2) 단점
- 메모리가 덮어씌워질 가능성이 있음
- 연산속도 느림
추가적으로, RNN, LSTM, GRU의 근본적인 단점
- many to many 번역 문제에서 기본적인 RNN 형태에서는 출력 길이를 조절할 수는 있지만 들어오는 문장마다 가변적일 수는 없음 -> 순서를 고려하기 쉽지 않음
- 이런 문제를 해결하기 위해 seq2seq(sequence-to-sequence) 등장함

🌿 참고링크
- swish 활성화 함수
- LSTM