대소기 2021. 12. 16. 17:46

Vanilla RNN

* Vanilla RNN은 장기의존성 문제(Problem of Long-Term dependencies)로 인해 긴 sequence의 data를 입력으로 받는 것이 권장되지 않는다.

* 이는 RNN의 backpropagation과정인 BPTT에 대한 이해, gradient vanishing에 대한 이해가 선행되어야 하지만, 이번 포스팅에서는 이를 수식적으로 살펴보기 보다는 간단한 예시로 넘어가려고 한다(BPTT에 대한 포스팅은 추후에 올리겠다).

* 예를 들어 긴 sequence, 100단어로 구성된 문장의 마지막 단어를 예측하는 모델의 경우를 살펴보자. 마지막 단어를 유추하기 위해서는 hidden state를 통해 전달되어 온 이전 정보들을 통해 문장에 대한 맥락을 파악하게 될 것이다. 그런데 문제는 문장 첫 번째 단어 X에 아주 중요한 정보가 들어있다고 가정해보자. 이 단어 X에 대한 정보는 time step을 지나면서 새로 추가되는 input들에 의해 점점 희석될 것이다. 결국 마지막 time step에 전달된 hidden state는 이 단어 X에 대한 정보를 거의 담고 있지 않게 된다. 이러한 문제점 때문에 장기기억이 가능한 모델의 개발이 필요하다.

LSTM(Long Short - Term Memory)

* LSTM은 기존 RNN에 몇 가지 gate를 추가하여 이전 기억의 일부를 망각하고, 이전 기억의 일부는 기억한다는 특징이 있다.

* 또한 vanilla RNN은 hidden state만 다음 셀에 전달했지만, LSTM은 hidden state에 추가적으로 cell state를 다음 cell에 전달하게 된다.

* 그럼 각 gate의 기능에 대해 살펴보고 cell state와 hidden state에는 어떤 정보들이 흘러가는지를 살펴보도록 하자.

1) Input Gate

* input gate는 현재 정보를 기억하기 위한 gate이다. 총 2가지 정보가 input으로 취급된다. 첫 번째로는 현재 시점 t의 입력 x이다. 두 번째는 이번 시점에 전달된 hidden state, 그러니까 이전 시점의 hidden state $h_{t-1}$이다.

* sigma로 표시된 오른쪽은 sigmoid function을 activation function으로 사용한다. 왼쪽은 hyperbolic tangent를 사용한다. 

* 각각 activation function에 입력될 때의 가중치는 같지 않으며($W_xi, W_xg$와 같이 다르다) activation function을 거친 두 개의 결과 값(이번 시점의 정보)은 일부가 기억되고 일부는 기억되지 않는다. 그 자세한 메커니즘은 밑에서 설명하겠다.

 

2) Forget Gate

* Forget Gate는 기억을 삭제하기 위한 gate이다. 입력 x와 hidden state h가 sigmoid함수를 거치고 나면 0~1사이의 값으로 변환될 것이다. 이 0~1사이의 값이 남아있는 기억의 정도를 나타내는 것이며, 0에 가까울 수록 많은 기억이 삭제된다는 것을 나타낸다.

 

3) Cell State(장기 상태)

* Cell State는 장기 상태라고도 말한다. 

* 현재 시점의 cell state를 구하는 수식을 보면 알 수 있듯이 $f_t$ 즉, forget gate의 출력 값이 0이 된다면 현재 시점의 cell state는 이전 시점의 cell state의 정보가 전혀 반영되지 않게 된다. 이러한 측면에서 forget gate는 이전 기억을 얼만큼 반영할지, 다시 말하면 얼마나 이전 기억을 삭제할지를 담당하는 gate인 것이다.

* 반대로 입력 gate $i_t$의 결과값이 0이 된다면, 현재 시점의 입력이 전혀 cell state에 반영되지 않을 것이다. 이런 의미에서 입력 gate는 현재 시점의 정보를 기억하는 역할을 하는 것이다.

 

4) Output Gate 와 Hidden State(단기 상태)

* hidden state는 단기 상태라고도 부른다.

* 출력 gate는 activation function으로 sigmoid 함수를 사용한다.

* output gate의 출력 값 $O_t$는 tanh를 거친 cell state와 연산되어 현재 시점의 hidden state를 생성한다. 이 hidden state는 곧바로 출력층으로 전달되어 output $y_t$가 되기도 한다.

 

 

GRU(Gated Recurrent Unit)

* LSTM이 input, forget, output gate 3개의 gate로 구성되었던 것과는 달리, GRU는 reset gate, update gate 두 개의 gate로 구성되어 있다. 또한 cell state, hidden state 2개의 state가 1개의 hidden state로 간소화 되었다. 즉 LSTM은 GRU와 성능은 비슷하지만 더 간소화된 버전이라고 볼 수 있다.

* 경험적으로는 데이터가 적을 경우 GRU를 사용하는 것이 좋다고는 한다.

 

https://wikidocs.net/22888

 

2) 장단기 메모리(Long Short-Term Memory, LSTM)

바닐라 아이스크림이 가장 기본적인 맛을 가진 아이스크림인 것처럼, 앞서 배운 RNN을 가장 단순한 형태의 RNN이라고 하여 바닐라 RNN(Vanilla RNN)이라고 합니다 ...

wikidocs.net