1. 순환신경망
순환신경망(Recurrent Neural Network, RNN)은 시퀀스 데이터나 순차적인 정보 처리가 필요한 문제에 효과적으로 사용되는 인공신경망의 한 종류입니다. 순차 데이터를 처리하여 정확한 예측을 하려면, 과거의 데이터를 어느 정도 기억하고 있어야 합니다. 그래서 RNN은 일반적인 신경망과 달리, 내부에 순환 구조를 가지고 있어 이전의 입력 정보(숨겨진 상태)를 현재의 계산에 반영할 수 있습니다. 이로 인해 시간에 따른 데이터의 의존성을 학습할 수 있고 자연어 처리와 같이 순서정보가 담긴 데이터나 시계열 데이터를 다루는데 적합한 신경망이라고 할 수 있습니다.
2. 순환신경망 구조
2.1. 기본적인 RNN 구조
기본적인 RNN 구조는 입력층, 은닉층, 출력층으로 구성됩니다. 은닉층은 시퀀스의 각 시점에서 이전 시점의 은닉 상태를 받아 현재 입력과 결합하여 새로운 은닉 상태를 생성합니다.
- 수식 표현:
- 은닉상태: $h_t = \tanh(W_{xh} x_t + W_{hh} h_{t-1} + b_h)$
- 출력: $y_t = W_{hy} h_t + b_y$
2.2. RNN의 입출력 텐서 형태
- input size = (batch size, sequence length, input_size)
- out shape = (batch size, sequence length, num_directions * hidden size)
- 은닉 상태 = (num_layers * num_directions, batch, hidden_size)