Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기

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

[Figure 1] RNN의 구조

 

 

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

 

"First hidden layer"

첫번째 은닉층 h1을 살펴보면 각 은닉층 노드 h1t의 입력값은 현재 입력값 it이전 시점의 은닉층 노드 값 h1t1입니다.

 

"Second hidden layer"

두번째 은닉층 h2를 살펴보면 각 은닉층 노드 h2t의 입력값은 이전 은닉층의 노드 h1t 값과 이전 시점의 은닉층 노드 값 h2t1입니다.

 

 

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

※ 첫번째 입력 x1 → 첫번째 기억  h1 생성 번째 입력 x2 →  기존 기억 h1과 새로운 입력 x2를 참고하여 새 기억 h2를 만듦 → · · ·   이 과정을 입력 길이만큼 반복

 

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

 

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

[Figure 2] RNN 계층과 셀

 

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


1. Structure of RNN

▶ Input Layer → Hidden Layer → Output Layer

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

 

[Shared Weight ]

[Figure 3] RNN 구조

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

  • Wxh: 입력층(input layer)에서 은닉층(hidden layer)로 전달되는 가중치
  • Whh: t 시점의 은닉층 노드에서 t+1 시점의 은닉층 노드로 전달되는 가중치 
  • Why: 은닉층에서 출력층으로 전달되는 가중치

RNN의 경우 가중치 Wxh,Whh,Why는 모든 시점에서 동일(가중치 공유)하다는 큰 특징이 존재합니다.

 

[Calculate Hidden Layer ht]

ˆst=Whh×ht1+Wxhxt

ht=tanh(ˆst)

  • 입력값: 새로운 정보 xt와 과거 정보 ht1
  • 출력값: 새로 업데이트된 요약된 정보(기억) ht

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

 

[Calculate Output Layer ˆyt]

ˆyt=softmax(Why×ht)

 

[Feedforward : calculate error]

[Figure 4] RNN의 순방향 학습

심층 신경망에서 feedforward 학습과 달리 각 단계(t)마다 오차를 측정합니다. 즉, 각 단계마다 실제 값 ytˆyt의 오차(mean squared error)를 이용하여 측정합니다.

 

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

각 단계(t)마다 feedforward 단계에서 구한 오차E를 바탕으로  Wxh,Whh,Why 및 bias를 업데이트됩니다.

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

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

 

[Figure 5] Example of backpropagation

 

시점 t=2에 대해서,

y2=Whyh2(t=2)+b

h2(t=2)=tanh(W12h1(t=2)+W22h2(t=1)+b)

  • h2in=W12h1(t=2)+W22h2(t=1)+

h1(t=2)=tanh(Wihx2+W11h1(t=1)+b)

 

y2W22=y2h2(t=2)×h2(t=2)h2in×h2inW22

 

h2inW22=h2(t=1)으로 이전 시점들의 조합으로 이루어져있고 내부적으로 W22를 포함하고 있기 때문에 결과적으로 제대로 미분하기 위해서는 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