참조: 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 연산임.)
다음 글에서는 실제 LSTM을 사용하는 예제를 실습해보자.
'AI > TensorFlow 학습' 카테고리의 다른 글
18. TensorFlow 2.x - GRU 소개 (0) | 2024.08.16 |
---|---|
17. TensorFlow 2.x - LSTM 예제 (0) | 2024.08.14 |
15. TensorFlow 2.x - SimpleRNN 소개 (0) | 2024.08.09 |
14. TensorFlow 2.x - RNN(Recurrent Neural Network) 소개 (0) | 2024.08.08 |
13. TensorFlow 2.x - 개선된 CNN모델에 대한 CIFAR10 예제 (0) | 2024.08.08 |