이전글(RNN)에서 다룬 RNN은 가장 기본적이라는 뜻에서 바닐라 RNN이라고 한다.
바닐라 RNN 이후, 바닐라의 한계를 극복하기 위한 변형 RNN이 나온다.
그 중 하나가 장기 의존성 문제를 보완한 장-단기 메모리, LSTM이다.

바닐라 RNN은 출력결과가 이전 계산 결과에 의존한다. 그래서 짧은 비교적 짧은 시퀀스에 효과를 보인다.
위 사진처럼 시점이 길어질수록 앞의 정보가 희석되어 뒤로 갈수록 충분히 전달되지 못한다.
의 정보량은 시점이 길어질수록 손실된다.
문제는 가장 중요한 정보가 앞쪽에 있을 수 있다는 것이다.
"미국에 여행을 왔는데 건물도 예쁘고 먹을 것도 맛있었어. 그런데 글쎄 직장 상사한테 전화가 와서 어디냐고 묻더라고 그래서 나는 말했지 저 여행왔어요 여기 [?]"
정답은 맨 앞에 있다. RNN이 충분한 기억력을 가져야 풀 수 있을 것이다.
이런 문제를 장기 의존성 문제(the problem of Long-Term Dependencies)라고 한다.

LSTM은 장기 의존성 문제를 보완하기 위해 은닉층 메모리 셀에 입력 게이트, 삭제 게이트, 출력 게이트를 추가했다. 이 게이트들은 불필요한 기억은 지우고, 기억할 것을 정한다.
이 세개의 게이트에는 공통적으로 시그모이드 함수를 사용하는데, 시그모이드 함수를 지나면 0과 1사이의 값이 되고 이 값으로 게이트를 조절한다.
또한 셀 상태(cell state)라는 값을 추가했다. 위 그림에서 t시점의 셀 상태를 로 표현한다. 셀 상태 또한 은닉 상태처럼, 다음 시점의 셀 상태를 구하기 위해 이전 시점의 셀 상태를 입력으로 사용한다.

입력 게이트는 현재 정보를 기억하기 위한 게이트이다.
는 현재 시점 의 값과 입력 게이트로 이어지는 가중치를 곱한 값과 이전 시점의 은닉 상태가 입력 게이트로 이어지는 가중치를 곱한 값을 더해 시그모이드를 지난 값이다. 이 값은 0과 1사이의 값이다.
도 현재 시점 의 값과 입력 게이트로 이어지는 가중치를 곱한 값과 이전 시점의 은닉 상태가 입력 게이트로 이어지는 가중치를 곱한 값을 더해 하이퍼볼릭탄젠트 함수를 지난 값이다. 이 값은 -1과 1사이의 값이다.
와 는 기억할 정보의 양을 정한다.

삭제 게이트는 기억을 삭제하기 위한 게이트이다.
현재 시점 의 값과 이전 시점의 은닉 상태가 시그모이드를 지난 값이다. 이 값은 0과 1사이의 값이다.
는 삭제 과정을 거친 정보의 양이다. 0에 가까울 수록 많은 정보가 삭제된 것이다.

와 이전 시점의 셀값의 원소별 곱 부분()은 이전의 기억에서 얼마나 남길 것인지 정한다.
와 의 원소별 곱 부분()은 입력된 정보를 얼마나 기억할 것인지를 정한다.
따라서 이전 입력을 얼마나 기억할지와, 입력받은 현재 시점의 정보를 얼마나 반영할지 업데이트 한다.

는 현재 시점의 입력값과 이전 시점의 은닉 상태가 시그모이드 함수를 지난 값이다. 이 값은 현재 시점의 은닉 상태를 결정하는 일에 쓴다. 즉 필터 역할이라고 할 수 있다.
는 -1과 1사이의 값이 되고 출력 게이트 값과 원소별 곱을 하면서 값이 걸러져 은닉 상태가 된다. 이 은닉 상태 값은 출력층으로도 간다.
출력 게이트()는 현재 시점의 입력값을 걸러주는 필터, 은닉 상태()는 걸러진 정보의 요약본이라고 할 수 있다.
LSTM은 바닐라 RNN의 한계인 장기 의존성 문제를 극복하기 위한 중요한 발전이다.
게이트 메커니즘과 셀 상태를 도입해 중요한 정보는 더 오래 기억하고 불필요한 정보는 삭제하여 긴 데이터에서도 성능을 낼 수 있었다.
추상적인 내용을 직관적으로 설명하는 건 정말 어려운 일같다. 다음 글은 RNN 언어 모델을 정리해야겠다.😺