논문: https://ieeexplore.ieee.org/abstract/document/6795963
저자: Sepp Hochreiter(Fakultät für Informatik, Technische Universität München, 80290 München, Germany), Jürgen Schmidhuber(IDSIA, Corso Elvezia 36, 6900 Lugano, Switzerland)
인용: S. Hochreiter and J. Schmidhuber, "Long Short-Term Memory," in Neural Computation, vol. 9, no. 8, pp. 1735-1780, 15 Nov. 1997, doi: 10.1162/neco.1997.9.8.1735.
참고:
1. Advanced Architectures of RNN (LSTM, GRU) - 딥러닝 홀로서기 (Youtube) https://youtu.be/cs3tSnAsyRs?si=w_0aQVuLscRvhTQv
2. Olah의 LSTM 한글 번역글 https://brunch.co.kr/@chris-song/9
0. 초록 (Abstract)
순환신경망(RNN)에서 시간 간격이 늘어날수록 정보를 저장하는 능력을 학습하는 일은 어렵다. 입력 길이가 늘어날수록 많은 시간이 소요되며 역전파 (error back flow)에서 기울기가 소실되는 현상이 발생한다. 저자는 해당 문제를 해결하기 위해 Long Short-Term Memory (LSTM)을 제안한다. LSTM은 역전파 통로 (constant error carrousels)를 사용하여 1000번 이상의 단계에서도 일정한 역전파를 수행한다. LSTM 내 다양한 Gate가 역전파 통로를 열고 닫는 법을 학습한다. LSTM의 다른 장점으로는 계산 비용이 O(1)이다. LSTM은 계산을 해당 셀 안에서만 수행한다. (LSTM is local in space and time) 결론적으로 LSTM은 많은 우수한 성과를 보여주었다.
1. 서론 (Introduction)
순환신경망은 최근 들어온 입력에 대한 정보를 저장하기 위해 순환 통로 (feedback connection)를 사용한다. 이는 단기 기억 메모리 (short-term memory)라 부른다. 단기 기억 메모리의 단점은 특정 입력 단어에 대해 정답 (teacher signal)이 늦게 나타날수록 이를 학습하기 힘들다. 이는 기울기 소실 등이 발생하기 때문이다. LSTM은 기울기 학습 알고리즘을 사용하여 이 문제를 해결한다. 이 알고리즘은 기존 RNN의 역전파에서 소실되는 error flow를 일정하게 유지한다. 이는 LSTM의 특별한 요소들이 (후에 나올 Cell state와 Gates를 의미한다.) 담당한다.
4. LSTM (Long Short-Term Memory)
Memory cells and gate units
기존 기법의 단점인 정보 손실을 막고, 일정한 error flow를 유지하기 위해 저자는 역전파 통로 (constant error carrousel CEC)를 만든다. 역전파 통로는 lienar unit에 input gate unit과 output gate unit을 추가한다. 전자는 입력 데이터에서 불필요한 부분을 제거하고 후자는 기존 데이터에서 불필요한 부분을 제거한다. 이 결과를 memory cell이라 부른다. 아래 그림의 box가 memory cell의 구조이다.
input gate unit과 output gate unit은 다음과 같다.
\begin{align*}
& y^{\text{in}_j}(t) = f_{\text{in}_j}(\text{net}_{\text{in}_j}(t));
& y^{\text{out}_j}(t) = f_{\text{out}_j}(\text{net}_{\text{out}_j}(t)).
\end{align*}
여기서 $y^{\text{in}_j}(t)$과 $y^{\text{out}_j}(t)$에 들어가는 $\text{net}$은 다음과 같다.
\begin{align*}
& \text{net}_{\text{in}_j}(t) = \sum_{u} w_{\text{in}_j, u} y^u(t-1);
& \text{net}_{\text{out}_j}(t) = \sum_{u} w_{\text{out}_j, u} y^u(t-1).
\end{align*}
input gate unit이후 output gate unit를 거치기 전에 내부 상태(internal state)를 한 번 더 업데이트한다. 내부 상태는 $s_{c_j}$로 표현되며 계산은 다음과 같다.
\begin{align*}
& s_{c_j}(0) = 0, \quad s_{c_j}(t) = s_{c_j}(t-1) + y^{\text{in}_j}(t) \cdot g\big(\text{net}_{c_j}(t)\big) \quad \text{for } t > 0.
\end{align*}
위 식을 통해 구한 $s_{c_j}$를 사용하여 $y^{c_j}(t)$와 $\text{net}_{c_j}(t)$를 구한다.
\begin{align*}
& y^{c_j}(t) = y^{\text{out}_j}(t) h(s_{c_j}(t)),
& \text{net}_{c_j}(t) = \sum_{u} w_{c_j, u} y^u(t-1).
\end{align*}
지금까지 input gate cell, internal state, output gate cell을 설명하며 내부 함수들에 대한 정의를 기술하지 않았다. 해당 내용은 논문 8. Acknowledgments > Appendix > A.1 Algorithm Details 를 참고하길 바란다.
Why gate units?
입력데이터는 필요한 정보와 불필요한 정보를 가지고 있다. 둘의 충돌을 막기 위해 input gate가 존재한다. 또한 출력데이터도 필요한 정보를 유지하고, 불필요한 정보를 제거하기 위해 output gate unit이 존재한다. 이를 통해 역전파 정보들이 사라지지 않고 유지될 수 있다.