이번 포스터에서는 프로젝트에서 사용했던 순환 신경망인 RNN(Recurrent Neural Network)에 대해 간단하게 설명하고자 한다.
프로젝트 초기에는 데이터들의 줄거리에 장르로 태그를 달아서 학습을 시킨 후 사용자가 입력한 문장이 어느 장르에 속하는지를 찾아야 하겠다는 생각을 했었다.
이런 방식으로 프로젝트를 진행하려 했다. 이때 1번의 데이터를 학습시킬 때 RNN을 사용하였다. 자연어 프로젝트가 처음이면서 나에겐 인공지능 프로젝트가 처음이었기 때문에 기초 지식이 많이 부족하다는 것을 이 단계에서 느끼기도 했다.
RNN(Recurrent Neural Network)은 시퀀스 모델이다. 입력과 출력을 시퀀스 단위로 처리하는 모델이다. 과거의 정보를 현재에 반영하는 형태이다. 딥러닝에 있어서는 가장 기본적인 시퀀스 모델이기도 하다.
(이러한 이유 때문에 가장 먼저 사용해본 신경망이기도 하다.)
기본 신경망의 구조는 를 받으면 를 출력해주는 형태였다면, RNN의 경우에는 를 입력받고, 직전의 은닉상태인 를 참조하여 현재 상태인 를 결정하는 작업을 time-step에 걸쳐 수행하는 것이다.
이렇게 이전 은닉상태의 는 현재 RNN의 와 함께 입력으로 들어가게 되고 를 결과로 출력한다. 그럼 각 는 정답인 와 비교하여 손실 을 계산하게 된다.
RNN은 time-step이 길어질수록 앞의 데이터를 기억하지 못하는 단점이 있다. 즉 학습 데이터의 길이가 길어질 수록 초기의 정보를 현재까지 전달하기 힘들다. 오차를 줄이기 위한 역전파 중 gradient 값이 소실 되기 때문이고, 이를 Vanishing Gradient(기울기 소실)라고 한다. 이는 RNN이 활성화 함수로 tanh를 사용하기 때문이다.
이번 포스트에서는 RNN에 대해 아주 간단하게 포스팅 해보았다. 이번 포스팅에서는 다루지 않았지만, 오차 역전파, 기울기 소실, 활성화 함수 등 자세한 내용은 나중에 취향저격 프로젝트의 포스팅을 마치고 시간이 남는다면 포스팅 해보고 싶은 내용이다.