출처: 모두를 위한 딥러닝 강좌 시즌 1 by Sung Kim
우리가 사용하는 데이터 중에는 Sequence Data가 있다.
ex) 음성 인식과 자연어 처리, time-series 데이터(주식, fmri 등)
이러한 sequence data는 기존의 NN과 CNN으로는 다룰 수 없고, Recurrent Neural Network(RNN)을 통해 다룰 수 있다.
이야기에서 단어 하나만 가지고 전체의 맥락을 이해할 수 없듯이, RNN이 sequence data를 다룰 때에는 현재의 상태와 함께 이전의 상태를 함께 고려한다.
RNN에서 이전의 상태(state)를 반영하여 현재의 상태를 계산하는 방식은 다음과 같다.
Vanilla RNN은 RNN의 가장 기본적인 구조로, 입력과 출력 데이터가 one-to-one 관계를 맺는다.
예시로 주어진 Character-level language model은 주어진 sequence data에서 현재 철자 다음에 올 철자를 예측하는 모델이다.
RNN은 어떻게 활용하는지에 따라서 여러 가지 목적으로 사용할 수 있다.
- one to many(일대다): Image Captioning = image -> sequence of words
- many to one(다대일): 감성 분류(Sentiment Classification) = sequence of words -> sentiment
- many to many(다대다 좌): 기계 번역(Machine Translation) = sequence of words -> sequence of words
- many to many(다대다 우): 프레임 수준 비디오 분류(video classification on frame level)
RNN 또한 많은 층으로 깊은 모델로 구성해 더 복잡한 학습이 가능하게 할 수 있다.
RNN도 깊어지고 layer가 많아지다 보면 학습하는 데에 어려움이 있다고 한다.
요즘은 이를 극복한 다른 방법으로 RNN과는 조금 다른 방법인 LSTM과 GRU 모델을 사용한다고 한다.