본문 바로가기
기술/딥러닝

[Boostcamp AI Tech] RNN (Recurrent Neural Network)

by 팡팡구리 2021. 8. 15.
반응형

Sequential Model


Sequential Data를 처리하는 데 있어 가장 큰 어려움은

기본적으로 입력의 차원을 정확히 알 수 없다는 점이다.

그러므로 몇 개의 입력이 들어오든 Sequential Model은 동작할 수 있어야 한다.

 

Naive Sequetial Model은 고려해야 하는 과거 정보량이 점차 늘어나는 문제가 있었다.

ex) X1, X2, ... ,X7가 있을 때, X2는 X1의 정보만 고려하면 되지만 X7은 X1 ~ X6까지 고려해야 했음

 

이를 가장 간단하게 해결하기 위한 아이디어로 past timespan을 고정하는 방안이 나왔고

이것을 Autoregressive Model이라고 한다. 즉, 항상 past timespan만큼만 정보를 사용하는 것이다.

past timespan만큼만 dependent하다고 보는 방법이 Autoregressive Model

 

Autoregressive Model 중 대표적인 모델로 Markov Model (first-order autoregressive model)이 있다.

Markov Model의 가장 큰 특징은 '나의 현재는 과거에만 dependent하다'고 가정하는 것이다.

여기서 과거는 바로 전 과거에 해당한다. 이 가정으로 인해 많은 정보를 버릴 수 밖에 없지만

결합확률분포 (joint probability distribution)를 쉽게 표현할 수 있다는 장점을 가진다.

그리고 이러한 장점으로 인해 추후 정리할 Generative Model에 많이 활용된다.

Markov Model은 바로 전 과거에만 현재 정보가 dependent하다고 가정한다. 이 때문에 결합확률분포를 표현하기 쉬운 장점을 가진다!

 

그러나 앞서 언급했듯 Markov Model은 원래라면 고려해야할 과거 정보들을 고려하지 않는다는 단점이 있다.

때문에 Latent Autoregressive Model은 중간에 Hidden state를 배치한다.

이 Hidden state는 과거의 요약된 정보를 가지고 있다고 본다.

그리고 이 다음번 timestep은 이 과거의 요약된 정보 하나에 dependent한다.

그렇기 때문에 출력만 봤을 때는 과거 하나의 정보에만 dependent한 것처럼 보이지만

사실은 요약된 과거 정보에 dependent하다고 볼 수 있다.

 

출력은 마치 과거 하나의 정보에만 dependent하게 보이지만 이 ht는 과거 정보들의 요약에 해당한다.

 

 

RNN (Recurrent Neural Network)


RNN은 자기 자신으로 돌아 들어오는 구조가 존재

ht는 xt에만 dependent한게 아니라 t-1에서 얻어진 어떤 cell state에도 dependent함

 

RNN을 시간순으로 풀면 다음과 같은 도식으로 표현할 수 있다.

 

RNN은 과거에 얻어진 정보들이 취합되어 현재 또는 미래에 고려되는 구조이다.

그러나 RNN은 이 과거 정보들이 계속해서 취합되기 때문에

먼 과거 정보가 살아남기가 힘들다는 단점이 존재하며 이를 Long-Term Dependency 문제라 한다.

 

RNN 학습을 아래 수식으로 보게 되면 계속해서 중첩되는 구조가 들어가 있는 것을 알 수 있다.

만약 아래에서 활성화함수가 sigmoid라면 h0이 h4로 들어가기까지 값이 줄어들 것이고 정보를 잃을 것이다.

반대로 활성화함수가 relu이고, h0값이 양수라면 계속해서 값이 커지면서 네트워크가 exploding될 것이다.

 

 

RNN은 과거 정보가 계속 중첩되기 떄문에 먼 과거의 정보가 반영되지 않는 Long-Term Dependency 문제가 발생할 수 있다.

 

 

LSTM (Long Short Term Memory)


LSTM은 RNN의 Long-Term Dependency를 해결하기 위해 등장했다.

LSTM은 다음과 같은 구조로 연결되어 있다.

 

아래 그림에서 Previous cell state는 내부에서 흘러가고 지금까지(t까지)의 정보를 취합한 정보에 해당한다.

LSTM은 Previous cell state, Previous hidden state, Input 3개가 입력으로 들어오며 실제 출력은 Output 1개가 나간다.

 

이제 각각의 Gate들을 살펴보면

먼저 Forget Gate는 어떤 정보를 버릴 지를 결정하는 Gate에 해당한다.

Input Gate는 들어온 정보 중에 어떤 정보를 cell state에 올릴 지를 결정하는 역할을 수행한다.

 

그리고 이 Forget Gate와 Input Gate에서 나온 값들을 가지고

cell state를 update해주면 우리는 updated cell state를 얻게 된다.

LSTM에서는 이 updated cell state를 Output Gate에 통과시켜 output을 만드는 조작을 취한다.

 

결과적으로 보면 현재 입력으로 들어온 정보들을 바탕으로 이전까지 요약된 정보를 지울지,

혹은 현재 입력으로 들어온 정보들을 바탕으로 새롭게 쓸지를 취합한 것이 updated cell state이고

이 updated cell state을 한번 더 조작해 어떤 값을 밖으로 빼낼지 정하는 것이

Output Gate의 역할이라고 할 수 있다.

 

 

GRU (Gated Recurrent Unit)


GRU는 Gate가 2개로, Reset Gate와 Update Gate로 이뤄져있다.

또한, LSTM과는 다르게 따로 cell state가 있지 않고 hidden state만이 있다.

즉, hidden state가 곧 output이고 다음번 Unit에 들어가게 된다.

 

GRU는 2개의 Gate만 가지고도 LSTM과 비슷한 역할을 하며,

똑같은 task에 대해서 LSTM보다 GRU가 성능이 좋은 경우가 종종 있다.

GRU는 hidden state만을 사용한다는 게 LSTM과의 큰 차이점이다.