Recurrent Neural Network Architectures

본글은 Yoshua Bengio(Univ. of Montreal)의 RNN강의를 요약/재해석한 것이다.

Simple RNN Architectures

정적인 NN(Neural Network)와 대비해서 RNN(Recurrent Neural Network)의 기본 개념을 이해하기 위해서는  가장 기본적 RNN의 개념을 이해할 필요가 있다. Simple RNN의 구조를 아래 그림과 같이 표현할 수 있다.

simple-rnn

기본 단위를 살펴보면, RNN에서의 S(t)는 현재 입력(current input) x(t)와 이전 State(previous state)인 S(t-1)가 변수인 함수로 표현된다. 현재 입력이 State의 독립변수라는 것은 정적 NN과 다를바 없지만, 이전 state가 독립변수라는 점이 RNN을 설명하는 가장 큰 특징이다. 이전 state가 다시 S(t-2)의 함수이고, 이 S(t-2)는 또한 x(t-2)를 입력값으로 가지므로, 결국 S(t)는 꼬리를 무는 연결관계에 의해 이전의 모든 입력(x)들의 함수라는 것을 알 수 있다. 이것을 다르게 해석하면, 현재의 state 값은 이전의 모든 입력값에 영향을 받아 결정된다는 점이고, 이점은 dynamic system과 유사한 특징을 가지게 된다. Dynamic system에서는 일련의 입력이 시간의 변화에 따른 입력이지만, RNN에서는 시간의 개념을 가질 필요 없이 연관성을 가지는 모든 순차적 입력이 이용될 수 있다.

기본적 구조는 동일하되, 출력(Output)을 가지는 RNN(Vanilla RNN이라고 불리운다)은 아래 그림과 같다. 각 state에서 output을 출력하는 구조이나 반드시 모든 state에서 output을 출력할 필요는 없다.

simple-rnn-with-output

최근 자주 사용하는 매우 중요한 RNN 구조로 Generative RNN이 있으며, 그 구조는 아래 그림과 같이 나타낼 수 있다.

simple-rnn-with-loss

이 구조의 특징은 Vanilla RNN과는 달리 fully-connected generative model이라는 것을 알 수 있다. 이 구조는 생성된 시퀀스(sequence)의 확률 개념이 도입되는데, Loss/Cost function을 정의하는데 사용된다. 수학적 의미는 개별확률이 순차적으로 나타나는 일련(sequence)의 확률은 개별확률의 곱으로 표현된다(이는 language model중의 하나로 n-gram model이라고 한다). 이 구조의 특징은 RNN에 의해 생성된 출력(O(t-1))은 현재 입력(x(t))와 가상으로 연결되어 있으며, 그 값이 서로 같아야 예측 모델로서 의미가 있는 것이다. 즉, Loss function은 RNN이 입력값과 같은 시퀀스를 가지는 출력을 얼마나 잘 예측하는지를 표현하는 것이다. 일반적 인공지능 학습 메카니즘과 같이, 이 값은 optimization의 minimize target값으로 사용된다.

Fully-connected model이라는 점은 시퀀스상에 나타나는 많은 수의 x를 모두 고려해야 한다는 의미이며, 이 모든 x를 고려해서 만든 모델은 너무 복잡해지고  계산에 의해 알야야 할 패러미터들이 시퀀스가 길어질 수록 기하 급수적으로 증가한다. 이를 방지하기 위해, 중간 매체로서 S로 표현되는 intermediate state를 정의하고 이 것이 시퀀스상 이전에 입력된 값들에 의해 현재의 출력(output)에 영향을 미치는 요소를 함축하는 인자이다.

Conditional Distributions

RNN의 구조를 입력과 출력간의 관계 관점에서 표현하면 다음과 같은 네가지 구조를 들 수 있다.

simple-rnn-variants

Advanced/Modified RNN Architectures

기본적인 Vanilla RNN구조의 변형으로 NN의 구조를 보다 복잡하게 연결할 수 있으며 그 개념을 도식적으로 표현한 것이 아래 그림이다. 아래 그림의 왼쪽 위에 위치한 구조는 Vanilla RNN 구조를 나타낸 것이며, 아래 구조는 state layer를 적층(stacking)한 구조이다.

simple-rnn-with-depth

아래 그림은 또 다른 변형을 도식화한 것으로, Recursive RNN, Bidirectional RNN, Multidimensional RNN을 나타낸 것이다.

bidirectional-rnn-recursive-rnn

Bidirectional RNN은 시퀀스상의 앞서는 입력의 특징(feature)이 고려됨과 동시에 시퀀스상 나중에 일어나는 입력의 특징이 함께 고려되어 출력을 내는 구조를 가지고 있다. 이것이 물리적으로 의미하는 바는 전에 일어난 일과 후에 일어날 일을 모두 고려하여 결과를 예측한다는 의미이다(앞서 언급했듯이, 이것이 반드시 시간적 개념을 포함하는 것은 아니다). 즉 현재 state를 중심으로 양방향 주변의 입력값들을 모두 고려하여 결과값을 예측한다는 의미이다. 예를들어, 문장의 문맥(context)를 고려하여  단어를 선택할 때 이전에 나타난 단어와 이후에 나타날 단어를 모두 고려하여 문장을 생성해 낼 수 있다는 의미이다.

 

Advertisements

Recurrent Neural Network Architectures”에 대한 답글 1개

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중