순환 신경망 소개
이번 챕터에서는 기존의 방식에서 벗어난 새로운 형태의 신경망을 소개하고자 합니다. 앞서 이제까지 우리는 다음과 같은 형태의 신경망을 주로 다뤄왔습니다. 다음 그림과 같이 $\theta$ 라는 파라미터를 갖는 이 신경망은 선형 계층linear layer으로 구성되어 있을 수도 있고, 합성곱 계층convolutional layer으로 구성되어 있을 수도 있습니다.
\[\begin{gathered} y=f(x;\theta) \end{gathered}\]하지만 이번 챕터에서 소개할 신경망은 순서 또는 시간의 개념이 도입됩니다. 다음 그림에서도 $x_t$ 또는 $h_t$ 라는 표현에서 $t$ 가 추가되어 순서를 표시하고 있음을 볼 수 있습니다.
\[\begin{gathered} h_t=f(x_t,h_{t-1};\theta) \end{gathered}\]그리고 $t$ 가 끝에 다다르면 비로소 $y=h_t$ 가 되어 출력 값을 얻게 됩니다. 또한 앞의 수식에서 재미있는 점은 $h_t$ 를 얻기 위해서, $x_t$ 뿐만 아니라 $h_{t-1}$ 도 함께 함수의 입력으로 주어져야 한다는 것입니다. 즉, 이전 순서에서의 상태 결과인 $h_{t-1}$ 을 현재 입력 $x_t$ 와 함께 함수에 넣어주어 현재 상태 결과 $h_t$ 를 구하도록 되어 있습니다. 이러한 신경망의 형태를 순환 신경망Recurrent Neural Networks, RNN이라고 부릅니다.
기존 형태의 신경망은 주로 테이블 데이터tabular data나 이미지 데이터를 다루는데 사용되었습니다. 하지만 RNN의 경우에는 자연어처리natural language processing, NLP와 같은 순서 정보가 담긴 데이터나 시계열time-series 데이터를 다루는데 적합합니다.
어쩌면 이 책을 통해 RNN과 그 응용 구조들을 처음 접하는 분들은 이해하는데 어려움을 겪을 수도 있습니다. 하지만 자연어생성natural language generation과 같이 순서 데이터를 생성하는 문제가 아니라면, 딱히 실제 구현할 때 시간 또는 순서 정보가 필요없기 때문에 크게 신경 쓸 필요가 없으므로, 크게 걱정하지 않으셔도 됩니다. 더욱이 이 책을 통해 RNN 함수의 입출력 텐서 형태만 알아도 이미 반은 해결됐다고 보시면 됩니다. 어차피 입출력 형태만 맞춰서 구현하고 데이터를 넣어주면, 딱히 RNN에 대한 이해가 없어도 잘 학습되고 추론할테니까요. 이번 챕터에서는 독자분들의 어려움을 해결하기 위해 RNN의 개념을 한 걸음씩 접근하도록 하겠습니다.