LSTM이란?
바닐라 RNN 이후 바닐라 RNN의 한계(지점 사이 거리가 멀 경우 Backprop시 그래디언트가 점차 줄어 학습능력이 크게 저하되는 것)를 극복하기 위한 다양한 RNN의 변형이 나오게 되었다.
그 중에서도 LSTM은 바닐라 RNN의 Long-Term Dependency 문제를 해결하기 위해 제안되었으며 RNN의 hidden state에 cell-state를 추가한 구조이다.
모듈요소
- 노란색 박스는 학습된 neural network layer를 나타낸다.
- 분홍색 동그라미는 vector 합과 같은 pointwise operation을 나타낸다.
- 각 선은 한 노드의 output을 다른 노드의 input으로, vector 전체를 보내는 흐름을 나타낸다.
- 합쳐지는 선은 concatenation을 의미하고,
- 갈라지는 선은 정보를 복사해서 다른 쪽으로 보내는 fork를 의미한다.
LSTM 구조
Cell state
- LSTM의 핵심은 Cell State인데, 모듈 그림에서 수평으로 그어진 윗 선에 해당한다.
- 메모리와 같은 존재이며, 컨베이어 벨트와 같아서 State가 꽤 오래 경과하더라도 Gradient가 잘 전파된다.
- 또한, Cell State는 Gate라고 불리는 구조에 의해 정보가 추가되거나 제거된다.
- Gate는 training을 통해 어떤 정보를 유지하고 어떤 정보를 버릴지 학습한다
Gates
-
LSTM은 3개의 Gate를 가지고 있고, 이 gate들은 cell state를 보호하고 제어한다.
forget gate (f) : 과거 정보를 잊기 위한 게이트
input gate (i) : 현재 정보를 기억하기 위한 게이트
output gate (o) : 최종 결과를 내보내기 위한 게이트
-
이 3개의 Gate에는 공통적으로 시그모이드 함수가 존재하는데 시그모이드 함수를 지나면 0과 1사이의 값이 나오게 되는데 이 값들을 가지고 게이트를 조절한다.
Forget Gate
- '과거 정보를 잊기’를 위한 단계이다.
- 이 단계에서는, ht−1와 xt를 받아서, sigmoid layer를 통해 0과 1 사이의 값을 Ct−1에 보내준다.
- 그 값이 1이면 "이전 상태의 모든 정보를 보존해라"가 되고, 0이면 "이전 상태의 모든 정보를 버려라"가 된다.
- 현재 정보를 얼마나 기억할 것인지에 대한 단계이다.
- 이 단계에서는, ht−1와 xt를 받아서, sigmoid layer를 통해 it를 구한 뒤
- tanh layer를 통해 새로운 후보 값들인 ~Ct라는 vector를 만들고, it와 ~Ct의 정보를 합쳐, cell state를 업데이트할 재료를 만들게 된다.
State Update
- 이전 cell state인 Ct−1를 업데이트해서 새로운 cell state인 Ct를 만드는 단계이다.
- 이전 cell state를 얼마나 잊을건지(forget gate) 곱셈
- 현재 cell state를 얼마나 반영할건지(inpute gate) 덧셈
- 최종 결과를 다음 상태의 cell state로 내보낸다.
Output Gate
- 다음 State로 내보낼 output(hidden state)을 구하는 단계.
- cell state에 tanh를 취한 뒤
- ht−1와 xt를 받아 sigmoid layer를 통해 ot를 계산한 후
- ot와 tanh 결과를 곱해 output(hidden state)을 내보낸다.
참고자료
- https://wooono.tistory.com/242
- https://wikidocs.net/22888
- https://ratsgo.github.io/natural%20language%20processing/2017/03/09/rnnlstm/