출처 : http://m.blog.naver.com/leerider/100190679279

순환 신경망 (Recurrent Neural Networks)

사람의 생각에는 지속성이 있다. 예를 들어 영화속의 장면을 보고 다음 장면을 추측할 수 있다. 하지만 기존의 신경망은 이런 일에 적합하지 않았다. 위의 문제를 해결하기 위해 RNN이 탄생하게 됬다.

RNN은 내부에 루프를 가진 네트워크이다.

위 그림을 보면 network A는 input값 X_t과 이전값(X_t-1)을 받아서 output값 h_t를 출력한다. 루프를 통하여 이전 단계의 정보를 받으며, 또한 다음단계로 현재 단계의 정보를 전달한다.

위의 그림 처럼 network  A가 순서대로(0,1,2,3….t) 동작한다고 생각하면 된다. 중요한 것은 현재 단계의 정보가 다음 단계에 전달되어 output값에 영향을 준다는 것이다. 이렇게 RNN은 음성 인식, 언어 모델, 번역, 영상에 주석 달기 등에 매우 많은 범위에서 사용한다고 한다.

장기 의존성 문제 (The Problem of Long-Term Dependencies)

RNN은 이전 정보를 현재 작업으로 연결하게 할 수 있다는 점으로 굉장히 매력적이다. 하지만 RNN은 굉장히 멀리 있는 이전 작업의 정보를 현재 작업에 직결되게 연결 하기는 힘들다. 예를 들어 “구름이 OO에 떠 있습니다.”라고 하면 OO은 “하늘”이라는 것을 금방 알 수 있다. 하지만 중간에 긴 문장이 들어가면 예측은 어려워 진다. “나는 프랑스에서 자랐습니다…… 나는 OOO어를 잘 합니다.”라고 하다면 OOO이 프랑스라는 것을 예측하기 힘들어 진다. 위와 같은 문제를 장기 의존성 문제라고 한다. 기존의 RNN에서는 위 문제를 해결하기 힘들다고 한다.

LSTM Network

LSTM(Long shot-term memory)이름에서 보이는 것 처럼 장기 의존성 학습을 할 수 있는 RNN의 한 종류이다.  LSTM은 장기 의존성 문제를 피하고자 설계되었으며, 학습보다는 기억하는 것이 기본적인 동작이라고 볼 수 있다.

표준 RNN에서는 전단계의 정보를 다음단계로 전달할때 tanh와 같은 간단한 구조를 이용한다. 하지만 LSTM에는 4개의 층으로 이뤄지는 특별한 구조를 갖고 있다.

그림으로 비교하면 확실하게 어떤 차이가 있는지 알 수 있다. 이제부터 LSTM의 구조가 어떻게 이뤄지는 알아 볼 것이다.

그림에 표시된 기호들은 위의 그림과 같이 정의한다.

The core idea behind LSTMs

LSTM의 core는 cell state이다. 위에 그림에서 모든 네트워크를 통과하는 위쪽의 선이라고 할 수 있다. cell state는 일종의 컨베이어 벨트라고 볼 수 있다. cell state는 작은 linear interaction만으로 체인 전체를 통과한다. 거기에 있는 정보는 바뀌지 않은체 지나가기 쉽다.

LSTM은 gate라 불리는 structures를 통하여 cell state에 정보를 더하거나 지울 수 있다. gate는 선택적으로 정보를 전달 할 수 있다. 그과정은 sigmoid neural net layer와 pointwise multiplication operation으로 구성되어 있다.

 

Sigmoid layer에서는 0과 1을 출력한다. 1은 “모두 통과함”을 의미하고 0은 “아무것도 통과 못함”을 의미한다.

LSTM은 cell state를 보호하기 위해 3개의 gate를 가진다.

Step-by-Step LSTM Walk Through

LSTM에서 첫 단계는 cell state에서 어떤 정보를 버릴지 결정한다. 위 과정은 forget gate layer라고 부르는 sigmoid layer가 결정한다. forget gate layer에서는 ht-1과 xt를 input으로 받고 ft를 output으로 준다. forget gate layer의 output값에 따라서 Ct-1 즉 전단계의 상태가 유지되는지 유지 된지 않는지 결정된다. sigmoid 함수이기 때문에 0과 1사이의 숫자가 출력되고 1은 “완전 유지함” 0은 “완전 제거함”이다.

문장을 통하여 성별을 파악하는 언어 모델이 있다고 가정해 보자. 현재 문장에서 주어를 통해서 성별을 파악할 수 있다. 하지만 다음 문장에서 새로운 주어가 나왔다면 이전 주어를 지우고 새로운 주어를 입력받아야 한다.

다음 단계에서는 새로운 정보를 cell state에 저장할지 결정한다. 이 단계는 두 부분으로 이뤄져 있다. 첫번째는 “input gate layer”로 불리고 어떤 값을 update할지 결정하는 sigmoid layer있다. 다음으로 tanh layer는 cell state에 더할 후보인 Ct vector를 만든다. 다음 단계로 위의 두 값을 합쳐서 cell state를 update시킨다.

이제 Ct-1을 Ct로 update 해보자. 전 단계에서 이미 다 정해져 있기 때문에 그것을 따라 계산하기만 하면 된다.

첫번째로 Ct-1을 ft와 곱한다. ft는 이전단계를 보존할지 말지를 결정하는 값이다. 그다음에 it*Ct를 더한다. 그 값은 우리가 얼만큼 update할지 결정된 값이다.

 

마지막 단계로 무엇을 출력할지 결정한다. output값은 filter된 cell state를 기반한다. 첫번째로 sigmoid gate를 이용하여 출력할 cell state의 부분을 결정한다.(Xt와 ht-1을 입력으로 받아 sigmoid gate를 통하여 cell state값과 곱할 값을 출력한다.) 다음으로 cell state를 tanh함수를 통과 시키고 sigmoid gate의 결과값과 곱한다. 그렇다면 우리가 원하는 output만 선택할 수 있을것 이다.

위의 있는 내용은 기본적인 LSTM의 동작과정을 정리한 것이며 조금씩 변형된 LSTM network가 있다.

출처 : http://firmcode.tistory.com/15