RNN을 개선한 LSTM(Long short term memory)

1. introduction

 

Vanilla RNN을 개선하였다. 그래서 gradient vanishing/exploding을 개선하여 좋은 성능을 보임

 

the problem of long term dependency를 해결하고자 time-step이 먼 경우에도 필요한 정보를 처리할 수 있도록

 

단기로 기억되는 hidden state 정보를 길게 가져오자.

 

Vanilla RNN은 현재 input의 정보와 이전 시점의 hidden 정보를 조합하여 새로운 hidden 정보를 만든다.

 

$$h_{t} = f_{w}(x_{t} + h_{t-1})$$

 

반면 LSTM은 전 시점에서 다른 역할을 하는 2가지 정보와 input 정보를 이용함

 

$$f(C_{t}, h_{t}) = LSTM(X_{t}, C_{t-1}, h_{t-1})$$

 

 

2. core idea

 

cell state vector를 이용하여 필요한 정보를 최대한 길게 보낸다

 

그래서 the problem of long term dependency를 개선했다. 필요로하는 정보가 최대한 멀리 전달될수 있도록 하여서

 

기본적으로 모듈을 반복하는 RNN이므로 모듈간 parameter는 shared parameter

 

 

3. 기본구조

 

모듈내부에 cell state를 업데이트하는 역할을 하는 input,forget,output gate를 만들었다.

 

필요로 하는 정보를 cell state를 통해 그대로 멀리 흘려보내면서 순간 step의 예측에 필요로하는 정보는 빼내 사용할 수 있도록 만든다.

 

gate gate는 뭔지 모르겠는데?

 

 

4. forget gate

 

cell state로부터 흘러보낼 정보를 update함

 

$1-f_{t}$만큼 $C_{t}$에서 forget해버리고, $f_{t}$만큼 가져가서 cell state로 계속 흘러보내겠다.

 

$f_{t}$와 $C_{t}$의 element wise product를 한다.

 

cell state의 $C_{t}$에서 $f_{t}$만큼 기억한다

 

forget gate에서 어떻게 업데이트가 이루어지는지

 

5. input gate

 

input인 $X_{t}$와 hidden vector $h_{t-1}$이 input gate로 가서 cell state에 어느 정도 주입할지 정보를 계산하여

 

$i_{t}$ , $\bar{C_{t}}$를 만들고 $i_{t}\bar{C_{t}}$만큼 cell state에 주입한다.(element wise product)

 

특히 주의할 점은 $X_{t}$와 $h_{t-1}$이 forget gate에서 계산되고 남은 값이

 

input gate로 가는게 아니라 그냥 forget gate로도 가고 input gate로도 가는거다.

 

forget gate에서 잊어버리고 남은 cell state의 정보량 $f_{t}C_{t-1}$과 더해서 최종적으로 cell state로 흘러보낸다.

 

cell state를 업데이트할때 쓰는 모든 product 연산은 element wise product다.

 

input gate는 어떻게 업데이트 되는지

 

6. output gate

 

input인 $X_{t}$와 hidden vector $h_{t-1}$이 output gate로 그대로 가서 어느정도 output을 할지 가중치로 $O_{t}$를 계산

 

cell state에서 계속 흐르는 정보가 output gate의 tanh()로 들어가 output으로 빼낼 정보를 계산.

 

cell state는 마치 물이 흐르듯이 다음 step으로 넘어간다. 물이 흐르는곳에서 물 조금 뺀다고 양이 변하거나? 그러진 않잖아

 

$O_{t}$와 $tanh(C_{t})$의 곱으로 output gate의 hidden vector를 계산하고 hidden state로 보낸다.

 

예측 수행을 해야한다면 hidden vector를 output 방향으로도 보낸다.

 

그 후 output layer에 집어넣어 prediction으로 $y_{t}$를 뽑아낸다.

 

 

 

”를 열고 닫아야 하는 대화를 생성하는 NLP task에서 “가 열려있다는 정보가 cell state로 계속 전달

 

순간 step에서 “를 닫아야한다면 tanh()를 이용한 output gate에서 정보가 나가 hidden vector로 구해지면서 정보표출

 

예측을 할 필요가 있을 때 hidden vector는 두 갈래로 똑같이 나뉨.

 

하나는 다음 step의 hidden vector로 가고 하나는 output layer로 들어가 예측 업무를 수행

 

input gate와 forget gate를 지나가서 정보가 없어지는 것이 아니라 output gate로 input인 $X_{t}$ 와 hidden vector $h_{t-1}$가 그대로 온다

 

 

 

7. 실제 사용

 

nn.LSTM으로 사용

 

lstm의 경우 hidden vector h0뿐만 아니라 cell state vector도 첫 벡터 C0를 0으로 초기화해서 넣는다

 

 

TAGS.

Comments