chatGPT를 위한 NLP 기초 : LSTM
앞서 살펴본 RNN은 hidden layer를 학습하는 과정에서 기울기 소실 문제가 발생하여 장기 의존 관계를 잘 학습할 수 없다는 치명적인 한계가 있었다. 그래서 RNN에 게이트를 추가하여 이를 개선하였다. 대표적으로 LSTM이나 GRU 계층이 있지만 이번 시간에는 LSTM에 대해서 살펴보도록 하겠다.
출처 : 밑바닥부터 시작하는 딥러닝2
RNN 계층은 과거 방향으로 의미 있는 기울기를 전달함으로써 시간 방향의 의존관계를 학습할 수 있다. 기울기는 학습해야 할 의미 있는 정보가 들어있고 그것을 과거로 전달함으로써 장기 의존 관계를 학습한다. 그런데 이 기울기가 사그라들면서 가중치 매개변수는 전혀 갱신되지 않게 된다. 즉, RNN 계층은 시간이 거슬러 올라갈수록 기울기가 작아지거나 커진다.
ReLU 함수를 사용하면 기울기 소실을 줄일 수 있다. 그 이유는 입력이 0 이상이면, 역전파 시 상류의 기울기를 그대로 하류로 흘려보내기 때문이다.
출처 : http://colah.github.io/posts/2015-08-Understanding-LSTMs/
위의 그림은 LSTM의 그래프이다. 이중 LSTM은 Long Short-Term Memory를 뜻하며 기울기 소실 문제를 해결하기 위해 고안된 RNN 레이어이다. 그렇다면 LSTM은 어떻게 장기 의존성 문제를 해결할 수 있을지 알아보도록 하겠다.
출처 : https://velog.io/@yuns_u/LSTMLong-Short-Term-Memory%EA%B3%BC-GRUgated-Recurrent-Unit
LSTM에는 3개의 Gate Layer를 가지고 있다. 첫 번째로 Forget Gate Layer는 cell state의 기존 정보를 얼마나 잊어버릴지 결정하는 게이트이다. 두 번째로 Input Gate Layer는 새롭게 들어온 정보를 기존 cell state에 얼마나 반영할지를 결정하는 게이트이다. 마지막으로 Output Gate Layer는 새롭게 만들어진 cell state를 새로운 hidden state에 얼마나 반영할지를 결정하는 게이트이다.
여기에서 중요한 것은 cell state이다. 위의 그림에는 ct로 표기되어 있는데 이는 전에 체인을 관통하여 흐르며 long-term memory의 역할을 수행한다. 다시 한번 정리하면 기존의 RNN은 time step의 셀에 hidden state만 전달하였지만 LSTM은 여기에 cell state도 추가로 함께 전달한다.
RNN에서는 역전파를 할 때 'X' 노드에서 행렬 곱을 반복하여 계속해서 기울기가 소실되었다. LSTM은 cell state가 있어 행렬 곱이 아닌 원소별 곱을 한다. 매 시각 다른 게이트 값을 이용해 원소별 곱을 계산하는 것이다. 그래서 곱셈의 효과가 누적되지 않아 기울기 소실이 일어나지 않는다.