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으로 연결이 향하는 computational graph에 recurrent cycle이 없는 network 를 feed-forward network라고 부름.
- feed-forward network는 일종의 memoryless system (or instantaneous system )임.
- 이전 결과에 상관없이 현재의 input에 의해서만 output이 결정됨.
- 대표적인 예가 dense feed-forward network임
- Fixed-size input을 사용하는 dense feed-forward network로 sequence를 처리하려면 sequence를 고정 길이 vector로 변환해야 함.
- 엄격히 애기하면 모든 feed-forward architecture에 적용되는 제약은 아니나 일반적으로는 제한되는 경우가 대다수임.
Feed-forward network에 해당하는 instantaneous system과 대조되는 것이
바로 dynamic system (memory system, state machine) 임.
Dynamic system은
- internal state 또는 delay를 가지므로 output이 현재 input만으로 결정되지 않음.
- 이를 위해 dynamic systems에서는 feedback connection이 존재 하는 경우가 많음.
- Feedback connection은 dynamic systems를 구현하거나 표현하는 한 가지 방식임.
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에 의해 결정됨.
- dynamic system은 과거의
- hidden state를 통해 earlier input과 previous hidden state의 information을 기억하여 이를 이용한다고 볼 수 있으며 때문에 memory를 가진 system 이라고 부름.
Simple RNN에서는
- previous hidden state가 current hidden state에 recurrently 반영되며,
- 이를 통해 earlier input의 information이 current output에 영향을 줄 수 있음.
참고 : 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를 같게 표시하기도 함.
이를 수식적으로 표현하면 다음과 같음.
- 위 그림에서는 bias 에 해당하는 \(\textbf{b}, \textbf{c}\)는 빠져 있음.
- \(f(...)\) : non-linear activation function, (
tanh,ReLU등) - \(g(...)\) : output function, (
identity,softmax,sigmoid등) - \(U, V, W\): parameters (=weight matrix)
U: input-to-hidden weight matrixV: hidden-to-hidden recurrent weight matrixW: hidden-to-output weight matrix
- \(\textbf{b}_h, \textbf{b}_o\): bias vector
RNN의 구조적 특징은 feedback connection을 가지고 있다는 것임.
이 feedback connection을 통해, 과거의 input들을 기억(?)하고 있는 state 를 가짐. 동시에 임의의 길이의 input data를 다룰 수 있음.
RNN은 이전 input에 대한 정보를 가지고 있는 state가 있기 때문에
NN은 parameter 수를 변경하지 않고 variable-length sequence를 처리할 수 있음
(매 time에 입력받는 데이터 사이즈인 feature dimension은 고정됨).
- Sequence의 각 time step에서는 고정된 feature dimension을 가진 input vector가
RNN에 입력됨. - 이후 다음 time의 data point에 해당하는 vector가
RNN에 입력됨. - 이 경우 input들은 각각이 입력된 시간을 가지며, state들도 어느 시점의 state인지가 구분됨.
때문에
RNN은 input과 output으로 sequential data를 사용할 수 있음.
자세한 건RNN의 topologies를 참조 : url
- 여기서 sequence는 vector을 한 timestep의 item으로 가지는 sequence임.
unrolling an RNN (Unrolled RNN)¶
위의 RNN 그림을 풀어서(unrolling or unfolding)로 표시하면 다음과 같음

- feedback connection을 time별로 풀어서 표현함.
- 무한한 길이의 sequence type이 input으로 주어지면 unrolled RNN으로 그릴 경우 역시 무한한 길이로 표현됨.
- 참고로 이 그림에서 한번에 들어가는 input (특정 시점의 input vector)가 바로 \(\textbf{x}_{t-1}\)임.
이론상이라고 한 이유는 RNN에서는 earlier input의 information이 successive hidden states를 거쳐 later hidden state에 유지되어야 함. 그러나 recurrent state transition이 반복되면서 earlier information을 구분하는 hidden-state representation이 충분히 유지되지 않을 수 있음.
오래전 input이라도 현재의 output을 결정하는데 매우 중요한 정보(long-term dependency가 존재)일 수 있는데,
RNN에서는 input이 들어온 시점이 오래될수록 현재 output에 대한 영향력이 감소하기 쉬운 구조인지라 distant time steps 사이의 long-term dependency를 학습하기 어렵다는 한계를 가짐. (오래된 일에 대한 기억력이 좋지 못하다고 볼 수 있음)달라 말하면, RNN은 "멀리 떨어진 time step들 사이의 의존 관계(=long-term dependency)" 를 제대로 모델링하기 어려움.
이를 해결하기 위해LSTM,GRU등이 다양한 memory cell varaints가 제안되었지만 완전히 해결이 된 것은 아님.
Input Data Type.¶
임의의 길이의 sequence를 처리할 수 있기 때문에 RNN은 다음과 같은 데이터를 처리하는데 사용됨.
- 문장 (자연어).
- 문서 (자연어).
- 사람 음성과 같은 audio data
- 주식 데이터 나 특정기간의 기후 데이터.
특히 RNN은 번역이나 speech-to-text 등에 많이 사용되었던 방식임
현재 번역과 같은 자연어 처리에는
transformer를 기반으로 처리하는 게 일반적임.RNN은 초기 기계번역에 사용됨.
RNN 계열 모델의 장단점¶
장점¶
- 동일한 recurrent cell을 모든 time step에 반복 적용하고, 이전 state를 현재 계산에 사용하는 구조로 인해 다음의 장점을 가짐:
- Sequential data modeling에 자연스럽게 적합함 : 이전 state를 현재 계산에 반영하므로 sequence의 순서 정보를 직접적으로 다룰 수 있음.
- Variable-length sequence 처리에 적합함 (구조적으로 fixed maximum length 불필요): 동일한 recurrent cell을 반복 적용하므로 길이가 다른 sequence에도 같은 구조를 사용할 수 있음.
- Parameter sharing : 모든 time step에서 동일한 weight를 공유하므로 sequence 길이가 증가해도 parameter 수는 증가하지 않음.
- Temporal dependency를 modeling 가능 : 이전 state를 통해 과거 정보가 현재 prediction에 반영됨.
- Streaming / online processing에 유리함 : 전체 sequence를 한 번에 입력하지 않아도, input이 들어오는 순서대로 state를 갱신하면서 처리할 수 있음.
- LSTM과 GRU 같은 memory cell variants를 사용하면 recurrent structure의 장점을 유지하면서 다음을 추가로 얻을 수 있음:
- gating mechanism을 통해 중요한 정보를 선택적으로 유지하거나 제거할 수 있음.
- Simple RNN보다 long-term dependency 학습에 유리함.
- Vanishing Gradient 문제를 완화할 수 있음.
단점¶
- 이전 state 와 현재 input 에 의해 현재의 state와 output이 결정되는 순차적 구조로 인해 다음의 한계를 가짐:
- 서로 다른 time step의 input 사이에 direct interaction이 불가 하며, 이전 state를 매개로 간접적으로만 정보가 전달됨.
- 멀리 떨어진 time step 사이의 정보가 여러 recurrent state를 거쳐 전달되어야 하므로 long-term dependency 학습에 한계 를 가짐.
- 현재 time step의 계산이 이전 time step의 state에 의존하므로 sequence 방향의 computation 병렬화가 어려움.
- 반면 Transformer는 일반적으로 fixed maximum sequence length를 설정하지만, 해당 범위 내의 모든 time step input을 동시에 처리할 수 있어 sequence 방향의 병렬화에 훨씬 유리함.
- Vanishing/Exploding Gradient 문제가 발생할 수 있음:
- time 축으로 펼치면 매우 깊은 network와 같은 형태가 되어, BPTT 과정에서 gradient가 여러 time step에 걸쳐 반복적으로 곱해짐.
- RNN layer를 여러 층으로 쌓으면 time 방향뿐 아니라 layer 방향으로도 gradient path가 길어져 Vanishing/Exploding Gradient 문제가 더 심해질 수 있음.
- Vanishing Gradient가 발생하면 매우 이른 time step의 input이 현재의 loss와 weight update에 미치는 영향이 sequence가 길어질수록 매우 작아져 long-term dependency 학습이 어려워짐.
tanhactivation은 hidden state의 값을 제한하여 activation의 폭주를 억제하는 데 도움을 주지만, Vanishing/Exploding Gradient 문제 자체를 해결하지는 못함.- 특히
tanh가 saturation 영역에 들어가면 derivative가 0에 가까워져 Vanishing Gradient를 악화시킬 수 있음 (다만 logistic sigmoid보다 zero-centered이고 최대 derivative도 더 커서 일반적으로 gradient propagation에는 더 유리함.).
- 특히
- LSTM 과 GRU 같은 memory cell variants는 gating mechanism과 memory path를 통해 gradient와 정보를 더 오래 전달할 수 있도록 하여, 특히 Vanishing Gradient와 long-term dependency 문제를 완화 함. 다만 이를 완전히 제거하지는 못함.
RNN의 응용분야.¶
RNN은 sequential data를 다루는데 가장 기본적으로 적용되는 모델이라고 할 수 있으나,
Transformer의 등장으로 그 사용 범위가 줄어들고 있는 추세이다.
- 아주 짧은 sequential data에는 fully connected layer로 구성된 방식도 가능함(max-length가 고정됨)
- 1D convolution을 통한 sequential data처리도 가능함.
- 하지만 최근엔
Transformer방식이 가장 널리 사용됨.
RNN이 많이 사용되는 방식은 과거의 input들을 통해 pattern을 기억하고 이를 바탕으로 미래의 output을 예측하는 형태이다.
예를 들면, 특정 단어들의 list를 입력으로 받고 다음에 올 단어를 예측하거나, 지난 특정 기간의 날씨정보를 입력받아 내일의 날씨를 예측하는 task에서 RNN은 자연스럽게 적용할 수 있음.