본문 바로가기

AI/TensorFlow 학습

16. TensorFlow 2.x - LSTM 소개

참조: https://youtu.be/ObqWwNmj7ig?si=31aUr4_4_a3HXJux

 

앞에서 배운 SimpleRNN의 단점중의 하나가 장기 의존성 문제인데,

이것은 RNN을 사용하는 이유인 과거를 기억해서 현재를 더 정확하게 추론하고자 하는 것에 반하는 것이다.

이는 tanh 함수에서 원인을 찾을 수 있는데, SimpleRNN의 구조를 보면

과거의 값이 전달되는 경로는 다음 차례의 입력으로 쓰이는 tanh 함수의 결과(Ht-1)가 -1 ~ 1 사이 값이 되고,

이 값은 다른 값과 곱해질 때 크기를 작게 만들게 된다. (Ht-1 x Whh <= Whh)

따라서, 다음 단계로 넘어갈 수록 과거의 값이 희미해 지게 되는 것이다.

 

이러한 문제를 해결하기 위해서 LSTM 모델이 개발되었다.

LSTM 모델에서는 Cell State를 나타내는, Ct 라는 변수를 도입해서 이 문제를 해결하였는데,

다음 단계에서 입력으로 Ht-1 뿐만 아니라 Ct-1도 같이 넘기는 것이다.

 

LSTM 모델을 좀 더 자세히 보면,

과거의 값에 대해서 얼마나 가중치를 줄지를 결정하는 forget GATE,

현재의 값과 과거의 값을 어떻게 처리할지 결정하는 input GATE,

그리고, 그 결과를 계산하는 output GATE로 구성되어 있다.

각 gate에 대해서 살펴보자.

 

 

forget GATE에서는 과거의 출력 Ht-1과 현재의 입력 Xt에 의해서 과거의 셀 상태 값(Ct-1)을 얼마나 반영할지 결정하는 Ft를 계산하고 Ct-1과 곱한다. Ft는 sigmoid 함수의 출력이므로 0~1 사이 값이고, 이것으로 과거의 정보를 얼마나 유지할 지 정해지는 것이다.

조금씩 어려워지고 있는데, 그냥 이런게 있구나 정도로만 알아두고 넘어가도록 하자. 

 

 

input GATE에서는, 과거의 출력값(Ht-1)과 현재의 입력값(Xt)에 가중치를 두어서 It, ~Ct, 두가지 데이터를 만들게 된다. (~Ct는 물결을 C위에 표기가 되지 않아 여기서만 이렇게 표기했다.)

It는 현재 데이터와 과거 결과값에 가중치(Uin, Win)를 두어서 어떤 정보를 더 반영할 지 결정하고,

~Ct는 다른 가중치(Uc, Wc)를 사용하여 현재의 데이터를 생성한다.

즉, 위 슬라이드에서 설명한 대로, 현 시점에서 가지고 있는 정보가 얼마나 중요한지를 반영한 결과를 만들어 낸다.

 

 

cell state(Ct)는 과거의 cell state(Ct-1) 값과 그 가중치, 현재의 상태(It, ~Ct)와 그 가중치를 계산한 결과로 현재의 상태를 나타낸다고 볼 수 있다.

 

 

output GATE는 과거의 결과(Ht-1)와 현재의 입력(Xt)를 cell state(Ct)값의 비중으로 현재의 결과를 출력하도록 한다. (여기서 곱하기는 pointwise 연산임.)

 

정리하면, 구조만 다를 뿐이지 다른 신경망과 동일하게 학습을 통해 각 단계(GATE)에서 최적의 파라미터들을 찾아내는 것이다.

 

다음 글에서는 실제 LSTM을 사용하는 예제를 실습해보자.