문장, 음성, 주가 등 시간에 따른 순차적 특성이 중요한 데이터를 시계열 데이터라고 합니다.
일반적인 신경망은 이 입력을 독립적으로 다룹니다.
하지만 “나는 밥을 먹었다”와 “밥이 나를 먹었다”는 같은 단어로 구성되어 있지만, 순서에 따라 의미가 완전히 달라집니다.
이처럼 이전 입력의 정보를 기억하면서 순차적으로 데이터를 처리하기 위해 등장한 신경망이 순환 신경망입니다.

흔히 RNN(Recurrent Neural Network)이라 불리고 한국말로는 순환 신경망이라고 부릅니다.
RNN에서 이전 단계의 정보를 저장하고 전달하는 값을 은닉 상태라고 합니다. 새로운 입력이 들어오면 현재 입력과 이전 은닉 상태를 결합하여 새로운 은닉 상태를 만들고, 이를 다시 다음 단계로 전달합니다.
예를 들어 문장을 단어별로 입력한다면 첫 번째 단어를 처리하여 만들어진 은닉 상태가 두 번째 단어를 처리할 때 사용됩니다.
같은 과정이 반복되면서 은닉 상태에는 지금까지 입력된 단어들의 정보가 요약되어 저장됩니다.
RNN은 데이터를 시간 순서로 하나씩 처리하는데 이 순서 단위를 time step이라고 합니다.
현재 시점을 t라고 하였을 때
RNN은 현재 입력 와 이전 시점의 은닉 상태 를 사용하여 현재 은닉 상태 를 계산합니다.
현재 은닉 상태는 다음과 같이 나타낼 수 있습니다.
먼저 현재 입력과 이전 은닉 상태에 각각 가중치를 곱한 뒤 그 결과를 더합니다. 이후 편향을 더하고 활성화 함수를 적용하여 현재 은닉 상태를 만듭니다.
CNN과 마찬가지로 활성화 함수를 사용하면 단순 선형관계가 아닌 복잡한 관계도 나타낼 수 있습니다.
RNN은 다른 신경망 모델과 마찬가지로 역전파를 통해 가중치를 수정합니다.
하지만 RNN은 다른 역전파와는 다르게 시간 순으로 펼친 다음 끝부터 처음까지 가중치를 차례로 수정합니다.
이러한 방식을 BPTT(Backpropagation through time)이라고 합니다.
하지만 이 방식을 사용하게 되면 끝부분의 오차가 앞쪽으로 가면서 activation함수의 미분값이 계속 곱해지기 때문에 0에 가까운 값으로 가중치를 수정하게 될 수 있습니다.
이러한 문제를 기울기 소실이라고 합니다.
반대로 큰 값이 계속 곱해지면 기울기가 지나치게 커지는 기울기 폭주 현상도 나타날 수 있습니다.
이에 따라 학습이 불안정해질 수 있습니다.
또한 문장이 길어질 경우 앞 내용이 점점 희석되는 장기 의존성 문제도 있습니다.
이런 문제점 때문에 기존 RNN을 개선한 LSTM(Long Short-Term Memory)이 등장하게 되었습니다.

기존 RNN은 하나의 은닉 상태 를 다음 시점으로 전달하지만, LSTM은 셀 상태 와 은닉 상태 를 함께 전달합니다.
LSTM의 전체적인 입력과 출력은 다음과 같이 표현할 수 있습니다.
셀 상태는 RNN 개념에서 추가된 것이고 이전 시점의 중요한 정보를 다음 시점으로 전달하는 역할을 합니다.
LSTM에서는 셀 상태가 네트워크를 따라 비교적 적은 변형을 거치며 전달되기 때문에 장기간 유지해야 하는 정보를 저장하기에 적합합니다.
이런식으로 LSTM은 RNN의 장기 의존성 문제를 해결합니다.
하지만 모든 정보를 저장하지는 않고 필요한 정보는 저장하고 불필요한 정보는 저장하지 않습니다.
이 과정을 게이트가 수행합니다.
LSTM에서 셀 상태는 다음과 같이 갱신됩니다.
: 이전 시점 셀 상태
: 현재 시점 셀 상태
: 망각 게이트
: 입력 게이트
: 현재 입력으로부터 만들어진 새로운 후보 정보
망각 게이트는 이전 셀 상태 에서 어떤 정보를 유지하고 어떤 정보를 삭제할지 결정합니다.
입력 게이트는 현재 입력에서 어떤 새로운 정보를 셀 상태에 저장할지 결정합니다.
먼저 현재 입력과 이전 은닉 상태를 이용하여 새로운 후보 정보 를 만듭니다.
이후 입력 게이트 가 후보 정보 중 실제 셀 상태에 추가할 정보의 비율을 결정합니다.
기존 RNN에서는 역전파 과정에서 활성화 함수 미분값이 곱해지기 때문에 기울기가 소실되는 문제가 있었습니다.
반면 LSTM에서는
위처럼 활성화 함수의 미분값이 곱해지는 대신 망각 게이트가 기울기를 조절합니다.
여러 시점에서 전달되는 기울기는 다음과 같이 나타낼 수 있습니다.
전달되는 기울기 값을 망각 게이트를 통해 조절하는 방식으로 LSTM은 RNN의 기울기 문제를 해결할 수 있습니다.