안녕하세요. 이번에는 RNN 계열의 LSTM 모델에 대해 보도록 하겠습니다.
참고자료는 다음과 같습니다.
아래 그림들과 전체적인 LSTM 구조
www.coursera.org/lecture/nlp-sequence-models/long-short-term-memory-lstm-KXoay
peephole 등 LSTM의 세부적인 내용
dgkim5360.tistory.com/entry/understanding-long-short-term-memory-lstm-kr
LSTM은 RNN의 단점 중 하나로 네트워크가 깊어질수록 gradient가 사라지고 멀리 있는 hidden layer의 특성을 잘 학습하지 못하는 단점이 있었습니다. 이를 극복하기 위해 변형된 모델을 만들었는데 그 중 하나가 LSTM 입니다. 구조를 보면 다음과 같습니다.
그림 1의 왼쪽 수식은 LSTM에서 사용하는 모델들의 식입니다. 오른쪽 위의 그림은 LSTM이 t번째 hidden layer에서 학습하는 구조이며, 아래 3개 그림은 1,2,3번째 hidden layer 부분에서 어떻게 연속적으로 학습이 이루어지는지 나타냅니다. 우선 수식은 다음과 같습니다.
* $\Gamma_{u} = \sigma(W_{u} [a^{<t-1>}, x^{<t>}] +b_{u} ) = \sigma(W_{ua} a^{<t-1>}+ W_{ux} x^{<t>}] +b_{u} ) $입니다. $W_{ua}$는 $a^{<t-1>}$과 gate와의 가중치 행렬이며 $W_{ux}$는 input과 gate와의 가중치 행렬입니다.
- $\tilde{c}^{<t>}$ : 현재 계산되어진 cell값으로 과거 t-1의 hidden layer와 현재 input 값을 반영하여 만든 값입니다. 여기서 c는 cell을 말하는데 cell은 결과값을 저장하는 역할을 합니다.
$c^{<t-1>}$ : 1번째 hidden layer를 구할 때부터 계속 이어져 온 cell입니다. 여기 cell은 과거의 결과값을 저장하는 역할을 합니다. Coursera 영상이나 제가 썼던 RNN 글에서 보면 cat이란 단어가 주어이면 was라는 단어가 나중에 나와야하는데 이 부분을 저장하고 있는 layer라 생각하시면 이해가 좀 더 쉬울 것입니다.
- $a^{<t-1>}$ : t-1 시간에서 만들어진 hidden layer입니다.
- $x^{<t>}$ : t 시간의 input vector입니다.
- $\Gamma_{u}$ : 현재 계산된 cell값을 update로 쓸 비율입니다. Gate라고도 부르며, Sigmoid 함수를 넣어 0~1사이 값으로 만들었으며, vector형태로 각 $\tilde{c}^{<t>}$랑 element-wise로 곱하며, 이는 모든 $\Gamma$가 같습니다.
- $\Gamma_{f}$ : forget rate로 $c^{<t-1>}$에 대한 값 중 쓰지않을 비율값입니다. 0~1사이 값입니다.
- $\Gamma_{o}$ : forget rate로 $c^{<t-1>}$에 대한 값 중 쓰지않을 비율값입니다. 0~1사이 값입니다.
- $W. b$ : 가중치, bias 행렬입니다.
- $c^{<t>}$ : 과거의 cell값과 현재 계산된 cell값을 적절히 반영한 최종 t 시간의 cell값입니다.
- $a^{<t>}$ : t 시간의 hidden layer 값으로 $c^{<t>}$을 얼마나 output에 반영할지에 대한 값입니다.
전체적인 계산을 보면 다음과 같습니다.
1. 과거 cell인 $c^{<t-1>}$의 값이 왔을 때 정보 중 일부를 forget 시킵니다.
2. 현재 cell값인 $\tilde{c}^{<t>}$을 구하여 $\Gamma_{u}$를 곱하여 현재 cell 중 일부 정보를 저장한 객체를 만듭니다.
3. 1,2에서 구한 값을 더하여 현재와 과거의 cell을 적절히 조합한 새로운 cell을 만듭니다. ($c^{<t>}$)
4. t번째 hidden layer인 $a^{<t>}$를 만드는데 cell값을 $\Gamma_{o}$만큼 반영한 값으로 만듭니다.
여기서 cell은 오랫동안 특정 값을 저장할 수 있어 과거 정보를 저장하는데 효과적이라고 합니다.
이러한 LSTM의 변형모델 중 대표적인 것으로 peephole을 추가한 모델입니다. 여기서 Gate 함수에 $C^{<t-1>}$값이 추가되어 다음과 같은 식이 됩니다.
$\Gamma_{u} = \sigma(W_{u} [a^{<t-1>}, x^{<t>}, C^{<t-1>}] +b_{u} )$
$\Gamma_{f} = \sigma(W_{f} [a^{<t-1>}, x^{<t>}, C^{<t-1>}] +b_{f} )$
$\Gamma_{o} = \sigma(W_{o} [a^{<t-1>}, x^{<t>}, C^{<t-1>}] +b_{o} )$
이 모델은 모든 게이트에 대해 $C^{<t-1>}$가 엿볼 수 잇다고 해서 peephole connection이라는 이름이 붙게 됩니다.
여기까지가 LSTM에 대한 설명이었습니다.
궁금하신 점이나 수정할점 있으시면 말씀해주세요!
감사합니다.
'모델 > 기타' 카테고리의 다른 글
LMNN(Large Margin Nearest Neighbors) (0) | 2021.04.08 |
---|---|
Recurrent Neural Network (0) | 2020.12.27 |
Variational AutoEncoder(VAE) (0) | 2020.12.18 |
DTW(Dynamic Time Warping) (0) | 2020.08.02 |