RNN와 LSTM, GRU에 대한 단상

RNN의 태동

RNN은 단일 셀에서 동일한 연산에 대해 동일한 가중치를 반복사용함으로서 가중치를 공유한다.
즉, CNN이 지역성을 토대로 연산량을 줄였다면 RNN은 시계(Time-Step)를 토대로 연산량을 줄였다고 볼 수 있다.

RNN의 연산은 크게 어렵지 않다.
일반적인 연산에서 이전 은닉층의 정보를 추가하기만 하면 된다.
그 결과 연산은 다음과 같이 수행된다.

h_{t} = a(W_{h}*h_{t-1} + W_{x}*x_{t} + b_{h})
o_{t} = a(W_{o}*h_{t} + b_{o})

h_{t-1} term이 관여한다는 점을 제외하면 일반적인 MLP와 구조가 동일하다.
그러나 RNN 또한 기울기 소실문제에 직면할 수 밖에 없다.
MLP의 경우 sigmoid나 tanh 함수와 같은 강력한 squeeze function에 의해 기울기가 소실된다.
그래서 ReLU와 같이 비선형성을 가미하지만 squeezing이 약한 활성화 함수를 적용하여 기울기 소실문제를 해결한다.
하지만 RNN의 경우 CNN과 달리 시계가 존재하며 이 과정에서 CNN보다 기울기 소실이나 기울기 폭발 가능성이 높아진다. [참고]
특히 ReLU은 상한이 없기 때문에 더욱 기울기 폭발이 일어나기 쉽다.
이러한 까닭에 CNN은 ReLU, RNN은 tanh를 활성화함수로 사용해야한다고 일반적으로 논의된다. [참고]

이 문제를 해결하는 단순한 방법으로는 가중치 정규화(Weight Decay)나 가중치 플리핑(Gradient Flipping), 단위행렬을 이용한 가중치 초기화(Identity Matrix Initialization, [논문])와 같이 가중치 자체를 건드리는 방법을 생각해볼 수 있다.
하지만 이는 네트워크의 구조적 문제를 외적인 방법으로 해결하려는 일환에 불과하다.
그리고 이것이 LSTM이 태어나게 된 이유이다.

LSTM의 태동

LSTM에는 기존의 RNN이 가진 기울기 소실 문제를 해결하기위해 장기 기억(Long Term Memory)을 담당하는 Cell state(셀 상태)가 도입되었다. [참고]
셀 상태 개념을 도입하기 위해서는 기존의 RNN 구조를 다소 변경해야 한다.
이를 보기좋게 정리한 것이 입력, 삭제, 수정 게이트로 구성된 다음의 시각화 자료이다.

구체적인 설명은 다른 블로그들이 잘 해놓았으니 여기서는 대략적으로만 언급하고 넘어간다.
입력 게이트(Input gate)는 RNN처럼 현재시점의 입력값(x_{t})과 과거시점의 은닉값(h_{t-1})을 사용하여 종합 입력값을 계산한다.
삭제 게이트(Forget gate)는 이전의 셀 상태에서 일부를 삭제(forget)하며 이를 위해 현재시점의 입력값(x_{t})과 과거시점의 은닉값(h_{t-1})을 활용한다.
수정 게이트(Update gate)는 일부가 잊혀진 이전 셀 상태에 현재의 종합 입력값을 더하여 현재의 셀 상태를 계산(수정, update)한다.
이를 수식으로 표현하면 다음과 같다.

Input gate: z_{t} = i_{t} \circ g_{t}
i_{t} = \sigma(W_{hi}*h_{t-1} + W_{xi}*x_{t} + b_{i})
g_{t} = tanh(W_{hg}*h_{t-1} + W_{xg}*x_{t} + b_{g})
Forget gate: f_{t} = \sigma(W_{hf}*h_{t-1} + W_{xf}*x_{t} + b_{f})
Update gate: C_{t} = f_{t} \circ C_{t-1} + z_{t}

보다시피 LSTM의 연산에는 너무 많은 파라미터가 필요하다.
이를 해결하고자 다양한 연산량 감소 방법들이 제안되었고, 그 중 GRU라는 모델이 자주 사용되는 것으로 알려져 있다.

GRU의 태동

GRU(Gated Recurrent Unit)는 LSTM의 입력, 삭제, 수정 게이트를 수정, 초기화 게이트의 두 가지로 축소했다.

Forget gate: f_{t} = \sigma(W_{hf}*h_{t-1} + W_{xf}*x_{t} + b_{f})
Update gate: C_{t} = f_{t} \circ C_{t-1} + (1 - f_{t}) \circ z_{t}
g_{t} = tanh(W_{hg}*h_{t-1} + W_{xg}*x_{t} + b_{g})

당연히 GRU가 LSTM보다 우월한지는 알기 어렵다.
다만 GRU는 LSTM보다 더 적은 수의 가중치를 가진다는 장점이 있다.

댓글 남기기