본문 바로가기

Time Series Analaysis/Time Series Analysis

Recurrent Neural Network(RNN)


본 글은 Recurrent Neural Network(RNN)에 대해 '파이토치 첫걸음' 책과 '딥러닝 파이토치 교과서' 책을 참고하여 작성하였습니다.


0. Introduction

▶ Recurrent Neural Network(RNN)이란?

Recurrent Neural Network(RNN)은 순서가 있는 데이터(시계열 데이터)에서 의미를 찾아내기 위해 고안된 모델입니다.

  • 시퀀스 데이터(sequence data): 순서가 존재하는 데이터
  • 시계열 데이터(time series data): 순서가 존재하지만 특별한 시간에 따른 의미가 존재하는 데이터

▶ RNN의 핵심 구조

RNN의 'Recurrent(순환하는, 정기적으로 일어나는, 반복되는)'는 이전 시점의 은닉층 노드 $h_{t}$가 현재 시점 $h_{(t+1)}$의 은닉층 노드의 입력(input)이 되면서 '반복되는 순환 구조를 갖는다'는 의미를 갖습니다. 이 부분이 다른 인공신경망 모델과의 가장 큰 차이점입니다. [Figure 1] 그림을 통해 RNN 구조에 대한 설명에 대한 이해를 돕고자 합니다.

[Figure 1] RNN의 구조

 

 

[Figure 1]은 2개의 은닉층(hidden layer)를 갖고 있는 RNN을 표현했습니다.

 

"First hidden layer"

첫번째 은닉층 $h1$을 살펴보면 각 은닉층 노드 $h1_{t}$의 입력값은 현재 입력값 $i_t$와 이전 시점의 은닉층 노드 값 $h1_{t-1}$입니다.

 

"Second hidden layer"

두번째 은닉층 $h2$를 살펴보면 각 은닉층 노드 $h2_{t}$의 입력값은 이전 은닉층의 노드 $h1_{t}$ 값과 이전 시점의 은닉층 노드 값 $h2_{t-1}$입니다.

 

 

결국, $h_{t-1}$은 현재까지 입력된 데이터에 대한 요약된 정보를 갖습니다. 새로운 입력 $x_t$가 네트워크에 들어올 때마다 기억은 조금씩 수정되며 결국 최종적으로 남겨진 기억은 모든 입력 전체를 요약한 정보가 됩니다. 즉, RNN은 '기억(memory)'를 갖습니다.

※ 첫번째 입력 $x_1$ → 첫번째 기억  $h_1$ 생성 번째 입력 $x_2$ →  기존 기억 $h_1$과 새로운 입력 $x_2$를 참고하여 새 기억 $h_2$를 만듦 → · · ·   이 과정을 입력 길이만큼 반복

 

RNN의 구조에 대한 자세한 내용은 [Section 1: Structure of RNN]에서 살펴보겠습니다.

 

▶ RNN 계층(layer)과 셀(cell)

[Figure 2] RNN 계층과 셀

 

RNN cell은 오직 하나의 time step만 처리합니다($x_t$ → cell → $y_t$). 즉, RNN cell은 RNN 계층의 for loop 구문을 갖는 구조로 실제 계산에 사용되는 RNN 계층의 구성요소입니다. 


1. Structure of RNN

▶ Input Layer → Hidden Layer → Output Layer

RNN은 은닉층 노드들이 연결되어 이전 단계 정보($t=1,2,\cdots, n-1$)를 은닉층 노드 $h_{t=n}$에 저장할 수 있도록 구성한 신경망입니다. 과거와 현재 정보를 반영하기 위하여 $x_{t-1}$에서 $h_{t-1}$을 얻고 다음 단계에서 과거 정보 $h_{t-1}$현재 정보 $x_t$를 사용하여 $h_{t}$를 얻습니다.

 

[Shared Weight ]

[Figure 3] RNN 구조

RNN에서는 세 개의 가중치 v가 존재합니다([Figure 3] 참조).

  • $W_{xh}$: 입력층(input layer)에서 은닉층(hidden layer)로 전달되는 가중치
  • $W_{hh}$: $t$ 시점의 은닉층 노드에서 $t+1$ 시점의 은닉층 노드로 전달되는 가중치 
  • $W_{hy}$: 은닉층에서 출력층으로 전달되는 가중치

RNN의 경우 가중치 $W_{xh}, W_{hh}, W_{hy}$는 모든 시점에서 동일(가중치 공유)하다는 큰 특징이 존재합니다.

 

[Calculate Hidden Layer $h_t$]

$$\hat{s}_t = W_{hh} \times h_{t-1} + W_{xh} x_t$$

$$h_t = \text{tanh}(\hat{s}_t)$$

  • 입력값: 새로운 정보 $x_{t}$와 과거 정보 $h_{t-1}$
  • 출력값: 새로 업데이트된 요약된 정보(기억) $h_t$

RNN에서는 은닉층에서 주로 하이퍼볼릭 탄젠트 활성화 함수를 사용합니다.

 

[Calculate Output Layer $\hat{y}_t$]

$$\hat{y}_t = \text{softmax}(W_{hy} \times h_t)$$

 

[Feedforward : calculate error]

[Figure 4] RNN의 순방향 학습

심층 신경망에서 feedforward 학습과 달리 각 단계($t$)마다 오차를 측정합니다. 즉, 각 단계마다 실제 값 $y_t$와 $\hat{y}_t$의 오차(mean squared error)를 이용하여 측정합니다.

 

[Backpropgation Through Time(시간에 따른 역전파)]

각 단계($t$)마다 feedforward 단계에서 구한 오차$E$를 바탕으로  $W_{xh}, W_{hh}, W_{hy}$ 및 bias를 업데이트됩니다.

RNN의 경우, 모델을 학습하기 위해서는 결괏값과 목푯값의 차이를 손실 함수를 통해 계산하고 역전파하는데 기존의 역전파와 다르게 순환 신경망은 계산에 사용된 시점의 수에 영향을 받습니다. 예를 들어, $t=0$에서 $t=2$까지 계산에 사용됐다면 그 시간 전체에 대해 역전파를 해야 합니다.

※ 이에 따라 시간에 따른 역전파(BackPropagation Through Time)이라고 부릅니다.

 

[Figure 5] Example of backpropagation

 

시점 $t=2$에 대해서,

$y_2 = W_{hy}h2_{(t=2)} + b$

$h2_{(t=2)} = \text{tanh}(W_{12}h1_{(t=2)} + W_{22} h2_{(t=1)} + b)$

  • $h2_{\text{in}} = W_{12}h1_{(t=2)} + W_{22} h2_{(t=1)} + $

$h1_{(t=2)} = \text{tanh}(W_{ih}x_2 + W_{11}h1_{(t=1)} + b)$

 

$$\dfrac{\partial y_2}{\partial W_{22}} = \dfrac{\partial y_2}{\partial h2_{(t=2)}} \times \dfrac{\partial h2_{(t=2)}}{\partial h2_{\text{in}}} \times \dfrac{\partial h2_{\text{in}}}{\partial W_{22}}$$

 

$\dfrac{\partial h2_{\text{in}}}{\partial W_{22}}=h2_{(t=1)}$으로 이전 시점들의 조합으로 이루어져있고 내부적으로 $W_{22}$를 포함하고 있기 때문에 결과적으로 제대로 미분하기 위해서는 $t=0$ 시점까지 미분해야 합니다. RNN은 각 층별로 같은 가중치를 공유하기 때문에 발생하는 현상입니다. 

 

▶ RNN의 단점

오차가 멀리 전파될수록(왼쪽으로 전파) 계산량이 많아지고 전파되는 양이 점차 적어지는 문제(기울기 소멸 문제(vanishing gradient problem))가 발생합니다. 이를 보완하기 위해 오차를 몇 단계까지만 전파시키는 truncated BPTT를 사용할 수 있습니다.

※ truncated BPTT: 계산량을 줄이기 위해 현재 단계에서 일정 시점까지만(보통 5단계 이전까지만) 오류를 역전파

Truncated BPTT를 사용한 모델로는 LSTM과 GRU가 있으며 이에 대해서는 다음글에서 살펴보도록 하겠습니다.


 

'Time Series Analaysis > Time Series Analysis' 카테고리의 다른 글

Linear Gaussian State Space Model  (0) 2024.06.10
Convolutional LSTM network(ConvLSTM)  (0) 2024.01.29
Gated Recurrent Unit(GRU)  (2) 2024.01.23
Long Short Term Memory(LSTM)  (0) 2024.01.22