본문 바로가기
지능형시스템_

[머신러닝] - RNNs (Recurrent Neural Networks)

by CHML 2016. 10. 6.
1. 개요

기존의 FNNs (Feedforward Neural Networks)는 각각의 학습 벡터에 대해 독립적으로 학습을 진행하였다. 그러나 실세계에서는 문장, 영상 및 음성 데이터 등 시간 $t-1$에서의 입력과 결과가 $t$에서의 입력과 결과에 영향을 주는 경우가 많이 존재한다.


[그림 1] 플립 북 (Flip book)


플립 북 (flip book)은 이전과 다음의 데이터가 서로 연관되어 있는 대표적인 예시이다. 플립 북이라는 것은 어떠한 동작을 하나의 종이에 그리고, 다음 종이에는 해당 동작을 미세하게 변화시킨 그림을 그리는 작업을 반복하여 마치 그림이 움직이는 것과 같은 효과를 보여주는 것이다 [그림 1]. 플립 북에서 $n-1$번째 종이에 그려진 그림이 $n$번째 종이에 그려질 그림에 영향을 주는 것은 너무나도 당연하다. 플립 북뿐만 아니라, 우리가 실세계에서 보고, 듣는 것들은 일반적으로 시간에 대해 이전의 상태와 다음의 상태가 연관되어서 변한다. RNNs (Recurrent Neural Networks)는 이렇게 이전의 데이터와 연관되어 변화하는 데이터들을 처리하기 위해 고안되었다.


2. RNNs의 구조 및 종류

RNNs는 하나의 단일 알고리즘이 아니라, 이전의 출력이 다음의 결과에 영향을 주는 형태의 인공신경망들을 지칭한다. RNNs의 구조를 추상화하여 나타내면 아래의 [그림 2]와 같다.


[그림 2] 일반적인 RNNs의 구조


RNNs는 [그림 2]와 같이 출력층 (output layer)의 출력이 다시 입력층 (input layer)로 입력되는 피드백 (feedback) 작용이 존재한다는 점이 FNNs와의 가장 큰 차이점이다. 이러한 구조를 통해 RNN은 $t-1$에서의 입력과 $t$에서의 입력 모두를 고려하여 $t$에서의 출력을 결정할 수 있게 된다. RNN은 단층으로 구성될 수도 있기 때문에 [그림 2]에서 나타난 은닉층 (hidden layer)는 인공신경망 모델에 따라 없을 수도 있다.

RNN의 대표적인 모델로는 FRNN (Fully Connected RNN), RMLP (Recurrent Multilayer Perceptron) 그리고 SRN (Simple Recurrent Network)라고 불리는 Elman network가 있다. RNNs는 FNNs를 기반으로 하는 구조이기 때문에 FRNN, RMLP, Elman network 모두 입력층-은닉층-출력층의 순서로 출력이 전파되어 최종 출력이 계산된다. 각각의 RNN 모델이 갖는 차이점은 피드백 방식을 어떠한 계층에, 어떠한 방식으로 하는지에 있다.


1) FRNN (Fully Conncted RNN)

FRNN은 가장 직관적으로 생각할 수 있는 RNN 모델이다. 아래의 [그림 3]과 같이 FRNN에서는 $t-1$의 출력이 $t$에서의 입력에 포함된다. 한 가지 특이한 점은 출력의 크기가 $L$이라고 할 때, FRNN의 출력층에서는 \({y}_{1}, {y}_{2}, {y}_{3}, ..., {y}_{L}\)에 해당하는 출력 뉴런만 존재하는 것이 아니라, 실제 출력은 하지 않고 다음 입력에 영향을 주기만 하는 \({y}_{L+1}, {y}_{L+2}, {y}_{L+3}, ..., {y}_{L+M}\)에 해당하는 뉴런이 존재한다는 것이다.


[그림 3] FRNN의 구조


입력 벡터의 크기가 $N$이고, 출력 벡터의 크기가 $L$인 FRNN에서 입력층의 크기는 $N+M$가 되며, 출력층의 크기는 $L+M$이 된다.


2) RMLP (Recurrent Multilayer Perceptron)

RMLP는 MLP 구조에 피드백 작용을 추가한 인공신경망이다. 아래의 [그림 4]와 같이 RMLP에서는 모든 층에서 피드백 작용이 발생한다. 예를 들어, 시간 $t-1$에서 출력층의 출력은 시간 $t$에서 출력층의 입력에 포함되며, 시간 $t-1$에서 은닉층의 출력은 시간 $t$에서 은닉층의 입력에 포함된다. 즉, 인공신경망을 구성하는 각 층에서 개별적으로 피드백 작용이 발생한다.


[그림 4] RMLP의 구조


RMLP는 FRNN과 다르게 피드백 작용을 위한 뉴런들 사이에는 연결이 존재하지 않는다.


3) Elman Network (Simple Recurrent Network, SRN)

마지막으로 소개할 RNN은 SRN이라고도 불리는 Elman network이다. Elman network는 아래의 [그림 5]와 같이 은닉층과 은닉층의 출력을 저장하는 context 층이 존재한다. 일반적인 RNNs와 같이 Elman network에서 context 층은 $t-1$의 은닉층 출력을 저장하여 $t$에서의 은닉층 입력에 포함하기 위해 이용된다.


[그림 5] Elman network의 구조


Elman network는 FRNN, RMLP에 비해 구조가 간단하기 때문에 Simple Recurrent Network (SRN)이라고도 불린다.


3. RNNs의 출력

RNNs는 FNNs와 동일한 방식으로 인공신경망의 출력을 계산하지만, 피드백 작용으로 인해 계산식에는 약간의 차이가 존재한다. 예를 들어, 위의 [그림 3]과 같은 FRNN의 경우에 시간 $t$에서 입력층의 출력 (출력층에 입력되는 데이터)인 ${z}_{i}$는 [식 1]과 같이 정의된다. 아래의 [식 1]에서 ${x}_{k}$와 ${u}_{k}$는 입력층 $k$번째 뉴런의 출력을 의미한다.



또한, 출력층 $j$번째 뉴런의 출력 ${y}_{j}(t)$는 아래의 [식 2]과 같이 계산된다.



위의 [식 1, 2]에서 알 수 있듯이 RNNs의 출력은 이전의 입력에 영향을 받기 때문에 FNNs에서 이용하는 역전파 (backpropagation) 알고리즘을 이용하여 학습을 할 수 없다. RNNs의 학습에는 주로 역전파 알고리즘에 시간의 개념을 추가한 BPTT (Back Propagation Through Time)을 이용한다. BPTT는 매우 복잡하고, 많은 내용을 포함하고 있기 때문에 다음 글에서 자세하게 설명한다.