RNN은 자연어 처리 분야에서 많이 쓰이는 딥러닝의 가장 기본적인 시퀀스 모델이다.
예를 들어 자연어 처리 모델을 통해 한국어-영어 번역을 한다고 하자. 입력으로 주어지는 한국어 문장도 단어의 시퀀스이고 출력으로 나와야 하는 번역된 영어 문장도 시퀀스라고 할 수 있다. 이러한 시퀀스들을 처리하기 위해 고안된 모델을 시퀀스 모델이라고 한다.
RNN 구조
RNN을 표현할 때는 일반적으로 위 그림에서 좌측과 같이 화살표로 사이클을 그려서 재귀 형태로 표현하기도 하고, 우측처럼 여러 시점으로 펼져서 표현하기도 한다. 우측을 자세히 보면 이전 시점의 은닉 상태값이 다음 시점의 메모리셀에 입력값으로 사용된다.
RNN 수식
은닉층 :
$$ h_t = tanh(W_xx_t + W_hh_{t-1}+b) $$
출력층 :
$$ y_t = f(W_yh_t + b) $$
현재 시점의 은닉상태 값은 h_t 라고 할때, 이 값은 이전 시점 t-1 에서의 은닉상태 값, 그리고 현재 시점의 입력층 에서 x_t 을 받아서 갱신된다. 이전 시점의 은닉상태와 현재 시점의 입력값은 각각 W_{hh} , W_{xh} 를 학습을 위한 가중치로 가진다. 각 가중치와 입력값을 곱하고 편향 b_h 를 더한 뒤 활성함수 Tanh 에 넣으면 현재 시점의 은닉상태 값 h_t을 구할 수 있다.
RNN 활용
RNN은 입력과 출력의 길이가 고정되어 있지 않아서 설계에 따라 다앙한 용도로 사용할 수 있다.