2017년 11월 2일 목요일

LSTM 네트워크 이해하기


 이 글은 http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 를 번역하여 정리한 글입니다.
-------------------------------------------------------------------------
 RNN(Recurrent Neural Network)은 히든 노드가 방향을가진 엣지로 연결되어 순환 구조를 이루는 Neural Network의 한 종류이다. RNN이 기존 Neural Network와 다른 점은 지금 들어온 입력 데이터와 과거에 입력 받았던 데이터를 동시에 고려한다는 점이다.
순환 신경망은 내부에 정보가 지속되는 것을 돕는 순환 구조를 가진 네트워크이며, 과거의 데이터가 미래에 영향을 주는 구조를 가지고 있다.
[그림 1] RNN의 기본구조


 [그림 1]에서 신경망 A는 $X_t$를 입력 값으로 가지고 $h_t$를 결과 값으로 출력한다. 루프는 정보가 전 단계의 네트워크에서 그 다음 단계로 전달되도록 한다. 순환 신경망은 하나의 네트워크가 여러 개로 복사된 형태를 보이고 있는데, 각각의 네트워크는 현재 갖고있는 정보를 다음 단계로 넘겨준다.



[그림 2] 펼쳐진 순환 신경망
 
 [그림 2]는 [그림 1]의 순환 구조를 펼쳐 놓은 것이다. RNN의 사슬 같은 모양을 통해 RNN이 시퀀스와 리스트를 처리하는 것과 관련이 있음을 알 수 있다. 따라서 순환 신경망은 연속적인 이벤트, 리스트에 관한 문제를 해결하기 위한 알고리즘으로 적절하기 때문에 시계열 모형 수립에 활용할 수 있다.
순환 신경망의 단점 중 하나는 정보가 오래된 정보를 현재 정보에 반영할 수 없다는 점이다. 이를 해결하기 위해 나타난 것이 LSTM이다. LSTM의 기본 동작 원리는 정보를 오랫동안 기억하는 것이며 [그림 3]은 LSTM의 구조를 나타낸 그림이다.


[그림 3] LSTM의 구조

[그림 3]에서 보이는 것처럼 LSTM에는 특별한 방식으로 상호작용하는 네 개의 층이 있다. 그 중에서 [그림 4]에 보이는 다이어그램의 위쪽을 통과해 지나가는 수평선인 cell state는 LSTM의 핵심 아이디어이다.
[그림 4] Cell State
 
 Cell state는 이전 노드에서 발생한 정보를 전달하는 일종의 컨베이어 벨트라고 생각하면 된다. cell state를 통해 전달되는 정보는 약간의 선형 상호작용(Linear Interaction)을 거치기 때문에 정보가 크게 변형되지 않은채로 전달 된다. LSTM은 cell state의 정보를 추가하거나 지우는데, 이러한 작업은 게이트라 불리는 구조에서 조절되며, 게이트에 의해 선택된 정보들만 게이트를 통과할 수 있다. [그림 5]에서 보는 것처럼 게이트는 시그모이드 신경망 층과 각 요소 별 곱셈 연산으로 구성된다.

[그림 5] LSTM의 게이트

시그모이드 층의 아웃풋은 0에서 1사이의 값이다. 값이 1일 경우 모든 정보를 통과시키고 0일 경우 어떤정보도 통과시키지 않는다는 것을 의미한다. [표 1]은 LSTM에서 사용되는 기호들에 대해 나타낸 표이다. 

[1] LSTM에 사용되는 기호

기호
설명
$x_t$
입력 벡터
$h_t$
출력 벡터
$C_t$
Cell state
$f_t$
forget 게이트의 출력 값
$i_t$
input 게이트의 출력 값
$o_t$
output 게이트의 출력 값

 LSTM에는 cell state를 제어하기 위해 forget, input, output 세 종류의 게이트가 있다. [그림 6]은 LSTM의 첫 단계인 forget 게이트에 대한 그림이다.

[그림 6] LSTMforget 게이트

 forget 게이트는 이전 노드에서 넘어온 정보($h_(t-1)$과 $x_t$ )를 얼마나 반영할 지 결정하는 시그모이드 층이다. 이 시그모이드 값은 0에서 1사이의 값을 갖는다.

[그림 7] LSTMinput 게이트
[그림 7]은 LSTM의 두 번째 단계인 input 게이트에 대한 그림이다. input 게이트는 어떤 정보를 저장할 지 결정하는 역할을 하는데, 이 단계는 시그모이드 층과 tanh층 두 단계로 구성되어 있다. 시그모이드 층은 어떤 값을 갱신할지 결정하는 역할을 하고, tanh층에서는 cell state에 추가될 수 있는 후보 벡터인 $C_t$를 생성한다.

[그림 8] LSTM cell state 갱신

  이제 오래된 cell state $C_t-1$을 새로운 cell state $C_t$로 갱신할 차례이다. [그림 8]은 cell state를 갱신하는 과정을 나타낸 그림이다. 갱신 과정은 이전 노드에서 넘어온 cell state $C_t-1$에 forget 게이트의 출력 값인 $f_t$를 곱한다.  그 다음 input 게이트에서 계산된 cell state를 갱신하기 위한 값인 $i_t * C_t$를 더해주면 $C_t$로 갱신 된다.

[그림 9] LSTM 노드별 출력값 설정

 마지막 단계는 무엇을 출력할 지 결정하는 단계이다. [그림 9]는 LSTM 노드의 출력 값을 결정하는 단계이다. 출력 값은 cell state $C_t$의 여과된 값을 기준으로 한다. 먼저 시그모이드 층이 작동되고 cell state의 값을 $tanh$층에서 -1 ~ 1 의 갑승로 바꾼다. 그 다음 원하는 값만 출력할 수 있도록 $tanh$ 층의 출력 값과 시그모이드  층의 출력 값을 곱해주면 다음 노드로 넘겨 줄 $h_t$ 값이 나온다.