EXCELSIOR

RNN - LSTM(Long Short Term Memory networks) 본문

DeepLearning/알고리즘

RNN - LSTM(Long Short Term Memory networks)

Excelsior-JH 2017. 5. 30. 14:18

이번 LSTM은 Chris송호연님의 블로그와 aikorea.org를 많이(실은 거의...) 참조하였으며, 이미지 출처는 원 저작자인 Colah.github.io 입니다.
문제가 될경우 삭제 하겠습니다..ㅜㅜ


1. LSTM 배경 - 장기 의존성(Long-Term Dependency) 문제점

RNN의 장점은 이전의 정보를 공유하여 활용할 수 있다는 것이다. 하지만, 시점간의 간격(Gap)이 크지 않을 경우에 가능하며 이러한 문제의 원인은 Vanishing Gradient에서 알 수 있듯이 BPTT에서 Chain Rule에 의해 [-1, 1]사이의 값들이 계속 곱해지다보니 앞쪽으로 갈 수록 그 값이 작아져, 결국에는 소멸해버려 Parameter들의 업데이트가 되지 않는 문제가 발생하기 때문이다.
이러한 문제를 해결하기 위해 등장한 것이 바로 LSTM이다.




[그림 1] RNN에서의 Vanishing Gradient Problem
(출처: Colah.github.io/posts/2015-08-Understanding-LSTMs)


2.LSTM 네트워크

LSTM(Long Short Term Meomory networks)는 RNN의 한 종류이다. LSTM은 장기 의존성 문제를 해결할 수 있으며 Hochreiter(1997)가 제안한 알고리즘이다.
아래의 그림을 통해 기존 RNN과 LSTM차이를 살펴보도록 하자.

[그림 2] RNN과 LSTM

기존의 RNN은 Hidden Layer에서 Hidden State(St)를 계산할 때 단순히 St=tanh(Uxt+WSt)로 계산하였지만, LSTM에서는 총 4가지의 계산과정이 있다.
아래의 LSTM의 Hidden Layer에서 볼 수 있듯이 Neural Network Layer가 4개가 존재한다. 각각에 대해 자세히 알아 보도록 하자.

[그림 3] LSTM의 구조

2.1. Cell State

LSTM의 핵심이라고 할 수 있는 이 Cell State는 아래의 그림4에서 볼 수 있듯이, 단순한 연산(곱셉, 덧셈)을 거쳐 LSTM Unit(초록색 박스)을 통과한다. 이러한 Cell State를 통해 이전 정보(Ct1)는 큰 변화 없이 다은 단계로 전달된다.

[그림 4] Cell State 구조

Cell Stateinput, forget, output 세 개의 게이트(gate)들을 이용하여 정보의 반영 여부를 결정해 준다. 각 게이트 들은 그림4에서 볼 수 있듯이 simgmoid곱셈으로 이루어져 있다. Simgmoid0<σ<1의 값을 출력해 각 정보가 어느정도로 영향을 줄 것인지 결정하는 역할을 한다.
LSTM은 Cell State를 컨트롤하기 위해 세가지 게이트(gate)들로 이루어져있다.
LSTM의 세가지 게이트들의 핵심은

  • 무엇을 쓰고 > input gate
  • 무엇을 읽고 > out gate
  • 무엇을 잊을 것인가 forget gate 이다.

2.2. LSTM의 단계

1) Forget Gate Layer

LSTM의 첫번째 단계는 어떠한 정보를 반영할지에 대한 결정을 하는 게이트이다. 이러한 결정은 sigmoid layer통해 이루어진다. ht1xt를 입력값으로 받아 sigmoid활성화 함수를 통해 0 ~ 1사이의 값을 출력한다. 1에 가까울 수록 정보의 반영을 많이하고, 0에 가까울 수록 해당 정보의 반영을 적게한다는 의미이다.

[그림 5] Forget Gate Layer 구조 및 식

2) Input Gate Layer

두번쨰 단계는 새로운 정보가 Cell State에 저장이 될지를 결정하는 게이트이다. Input Gate에는 두개의 Layer가 있는데, 하나는 sigmoid layer로 (이레이어를 input gate라고 함) 어떤 값을 업데이트 할 것인지 결정하는 레이어이다. 다른하나는 Ct~라고 불리는tanh layer로 구성되어 있으며, Cell State에 더해질 vector of new candidate values(후보값들의 벡터)를 만드는 레이어(Update gate)이다.

[그림 6] Input Gate Layer 구조 및 식

3) Update Cell State(Ct1)

이렇게 forget gateinput gate에서 출력된 값들을 Cell State Ct1Ct업데이트해준다.

  • ftCt1 계산 해준뒤
  • itCt~ 을 더해준다. 최종 Ct의 식은 아래의 그림과 같다.

[그림 7] Cell State 업데이트

4) Output Gate Layer

마지막 단계는 출력값(ht)을 결정하는 단계이다. ht는 Cell State(Ct)를 필터링해준 값이다. 먼저, 출력할 Cell State의 부분을 결정하는 sigmoid layer를통해 계산한다(ot). 그런다음, 앞 단계에서 업데이트 된 Cell State(Ct)를 **tanh**를 통해 -1 ~ 1사이로 출력된 값을 곱해준다.

[그림 8] Output Layer 구조 및 식

3. GRU(Gated Recurrent Unit)

GRU는 LSTM의 변형된 버전이라고 할 수 있으며, Cho, et al.(2014)에 제안되었다.
LSTM과 다른점은 다음과 같다

  • GRU는 Reset Gate(rt)와 Update Gate(zt) 2개의 게이트로 이루어져있다.
  • LSTM에서 forget gateinput gate를 GRU에서는 update gate(zt)로 합쳐 주었다.
  • LSTM에서 forget gate역할이 rtzt 둘 다에 나눠졌다고 볼 수 있다.
  • 출력값(ht)를 계산할 때 추가적인 비선형(nonlinearity) 함수를 적용하지 않는다.

[그림 9] GRU 구조



1 Comments
  • 프로필사진 사랑별탐험 2019.11.20 17:05 안녕하세요. 좋은 내용 올려주셔서 감사합니다. 문의 드릴게 있는데 내용중 중간 중간 수식이 보이지 않는것 같은데 확인 부탁드려도 될까요?
댓글쓰기 폼