콘텐츠로 이동

Recurrent Neural Network (순환신경망, RNN)

time series data와 같은 (임의의 길이를 가지는) sequential data를 다루는데 적합한 ANN.
feedback connection을 가짐.

RNN은 1개의 layer라도
기본적으로 feedback connection에 의해
time 축 상으로 weight를 공유하는 layer가 쌓이는 효과를 가짐.

여기에 다른 weights 를 가지는
여러 layer들을 쌓을 수도 있기 때문에 매우 복잡한 ANN이 됨.


Feed-forward Network vs. RNN

ANN은 node들을 edge로 연결한 일종의 system 이라고 볼 수 있다.

일반적으로 system은
특정 input에 대해 특정 output을 mapping 시켜주는
transformer (DL의 transformer architecture아님) 또는 function으로 해석되며,
input과 output을 가지는 sub-system의 연결 방식에 따라 구분되기도 한다.

ANN의 연결방식에서
input에서 output으로 연결이 하나의 방향으로만 이루어진 경우, feed-forward network라고 부른다.

  • feed-forward network는 일종의 memoryless system (or instantaneous system )임.
  • 이전 결과에 상관없이 현재의 input에 의해서만 output이 결정됨.
  • sequence type의 input을 처리할 때, input의 전체 length가 한번에 feed-forward network에 주어져야함.
    • 이는 input의 크기가 고정됨을 의미.

Feed-forward network에 해당하는 instantaneous system과 대조되는 것이
바로 dynamic system (memory system, state machine) 임.
dynamic systems에서는 feedback connection이 존재 한다.

ANN 의 경우, feedback connection이 있는 구조를 Recurrent Neural Network (RNN) 라고 칭함.

  • feedback connection은 system이나 subsystem에서의 output을 앞단이나 자신의 input으로 사용되도록 연결 된 것을 가리킴.
    • feedback connection이 있는 경우, network는 일종의 loop를 이루게 됨.
  • dynamic system은 feedback connection을 통해 과거의 output이 현재의 output에 영향을 주도록 구현됨.
    • dynamic system은 과거의 input과 output에 대한 기억에 해당하는 state를 가지고 있으며,
    • state와 input`에 의해 output이 결정 된다.
    • 현재의 state는 과거의 state와 현재의 input에 의해 결정됨.
  • 과거의 output을 기억하여 이를 이용한다고 볼 수 있으며 때문에 memory를 가진 system 이라고 부름.

참고 : feedback connection 요약자료
참고 : Dynamic System and Instantaneous System


RNN의 구조

다음의 그림은 RNN의 구조를 보여줌.

  • input \(\textbf{x}\)에 대해서 weight \(U\)가 곱해짐.
  • \(\textbf{h}\)는 hidden state라고 불려지며 일종의 memory 라고 볼 수 있음.
  • feedback connection을 통해 과거의 \(\textbf{h}\)와 현재의 input \(\textbf{x}\)에 의해 현재의 state가 결정됨.
  • hidden state로부터 output이 나오는 부분이 위 그림에선 단순히 \(W\)로 표현했으나 이는 RNN에서 고정된 것이 아님.
    • 단순한 dense layer를 사용할 수도 있으나
    • 그보다 복잡하게 구성될 수도 있음.
  • hidden state라고 불리는 이유는 output으로 그대로 나오지 않는 경우(위 그림에선 W 와 곱해짐)가 대부분이라, I/O 만으로는 확인할 수 없기 때문임.
    • 간단하게 그릴 때는 output과 hidden state를 같게 표시하기도 함.

이를 수식적으로 표현하면 다음과 같음.

\[ \textbf{h}_t = f(U \textbf{x}_t + W \textbf{h}_{t-1} + \textbf{b})\\ \textbf{y}_t = g(V \textbf{h}_t + \textbf{c}) \]
  • 위 그림에서는 bias 에 해당하는 \(\textbf{b}, \textbf{c}\)는 빠져 있음.
  • \(f(...)\) : non-linear activation function, (tanh, ReLU 등)
  • \(g(...)\) : non-linear output function, (softmax, sigmoid 등)
  • \(W, V, U\): parameters (=weight matrix)
  • \(\textbf{c}, \textbf{b}\): bias vector

RNN 의 구조적 특징은 feedback connection을 가지고 있다는 것임.
이 feedback connection을 통해, 과거의 input들을 기억(?)하고 있는 state 를 가짐. 동시에 임의의 길이의 input data를 다룰 수 있음.

RNN은 이전 input에 대한 정보를 가지고 있는 state가 있기 때문에
이론상으로는 무한히 긴 input sequence 을 처리할 수 있다 (매 time에 입력받는 데이터 사이즈는 고정됨).

  • sequence에서 특정 time의 data point에 해당하는 vector (이 vector의 최대길이는 고정)가 RNN에 입력됨.
  • 이후 다음 time의 data point에 해당하는 vector가 RNN에 입력됨.
  • 이 경우 input들은 각각이 입력된 시간을 가지며, state들도 어느 시점의 state인지가 구분됨.

때문에 RNN은 input과 output으로 sequential data를 사용할 수 있음.
자세한 건 RNN의 topologies를 참조 : url

  • 여기서 sequence는 vector을 한 timestep의 item으로 가지는 sequence임.

unrolling RNN

위의 RNN 그림을 풀어서(unrolling)로 표시하면 다음과 같음

  • feedback connection을 time별로 풀어서 표현함.
  • 무한한 길이의 sequence type이 input으로 주어지면 unrolling로 그릴 경우 역시 무한한 길이로 표현됨.
  • 참고로 이 그림에서 한번에 들어가는 input (특정 시점의 input vector)가 바로 \(\textbf{x}_{t-1}\)임.

이론상이라고 한 이유는 RNN에서 현재 output 또는 state를 결정할 때 오래전에 입력된 input일수록 영향력이 줄어든다는 문제점을 가지고 있기 때문임.
오래전 input이라도 현재의 output을 결정하는데 매우 중요한 정보일 수 있는데, RNN에서는 input이 들어온 시점이 오래될수록 현재 output에 대한 영향력이 줄어듬 (오래된 일에 대한 기억력이 좋지 못하다고 볼 수 있음)
이를 해결하기 위해 LSTM, GRU 등이 제안되었지만 완전히 해결이 된 것은 아님.


Input Data Type.

임의의 길이의 sequence를 처리할 수 있기 때문에 RNN은 다음과 같은 데이터를 처리하는데 사용됨.

  • 문장 (자연어).
  • 문서 (자연어).
  • 사람 음성과 같은 audio data
  • 주식 데이터 나 특정기간의 기후 데이터.

특히 RNN은 번역이나 speech-to-text 등에 많이 사용되었던 방식임

현재 번역과 같은 자연어 처리에는 transformer를 기반으로 처리하는 게 일반적임. RNN은 초기 기계번역에 사용됨.


RNN의 응용분야.

RNN은 sequential data를 다루는데 가장 기본적으로 적용되는 모델이라고 할 수 있으나,
Transformer의 등장으로 그 사용 범위가 줄어들고 있는 추세이다.

  • 아주 짧은 sequential data에는 fully connected layer로 구성된 방식도 가능함(max-length가 고정됨)
  • 1D convolution을 통한 sequential data처리도 가능함.
  • 하지만 최근엔 Transformer 방식이 가장 널리 사용됨.

RNN이 많이 사용되는 방식은 과거의 input들을 통해 pattern을 기억하고 이를 바탕으로 미래의 output을 예측하는 형태이다.
예를 들면, 특정 단어들의 list를 입력으로 받고 다음에 올 단어를 예측하거나, 지난 특정 기간의 날씨정보를 입력받아 내일의 날씨를 예측하는 task에서 RNN은 자연스럽게 적용할 수 있음.