RNN(Recurrent Neural Network)은 입력과 출력을 시퀀스 단위로 처리하는 모델이다.
RNN은 은닉층의 노드에서 활성화 함수를 통해 나온 결과값을 출력층 방향으로도 보내면서, 다시 은닉층 노드의 다음 계산의 입력으로 보내는 특징을 갖고있다.
RNN에서 은닉층에서 활성화 함수를 통해 결과를 내보내는 역할을 하는 노드를 셀(cell)이라고 한다. 이 셀은 이전의 값을 기억하려고 하는 일종의 메모리 역할을 수행하므로 이를 메모리 셀 또는 RNN 셀이라고 표현한다.
은닉층의 메모리 셀은 각각의 시점(time step)에서 바로 이전 시점에서의 은닉층의 메모리 셀에서 나온 값을 자신의 입력으로 사용하는 재귀적 활동을 하고 있다.
메모리 셀이 출력층 방향으로 또는 다음 시점의 보내는 값을 은닉 상태(hidden state)라고 한다.
RNN은 입력과 출력의 길이를 다르게 설계 할 수 있으므로 다양한 용도로 사용할 수 있다.
one-to-many
- 하나의 이미지 입력에 대해서 사진의 제목을 출력하는 이미지 캡셔닝(Image Captioning) 작업에 사용 할 수 있다.
- 하나의 이미지 입력에 대해서 문장을 출력하는 작업에 사용 할 수 있다.
many-to-one
- 입력 문서가 긍정적인지 부정적인지 판별하는 감성 분류(sentiment classification) 작업에 사용 할 수 있다.
- 메일이 정상 메일인지 스팸 메일인지 판별하는 스팸 메일 분류(spam detection)에 사용 할 수 있다.
many-to-many
- 입력 문장으로부터 대답 문장을 출력하는 챗봇에 사용 할 수 있다.
- 입력 문장으로부터 번역된 문장을 출력하는 번역기에 사용 할 수 있다.
현재 시점 t에서의 은닉 상태값을 ht라고 할 때, 은닉층의 메모리 셀은 ht를 계산하기 위해서 총 두 개의 가중치를 갖게 된다. 하나는 입력층에서 입력값을 위한 가중치 Wx이고, 하나는 이전 시점 t-1의 은닉 상태값인 ht−1을 위한 가중치 Wh이다.
은닉층 : ht=tanh(Wxxt+hht−1+b)
출력층 : yt=f(Wyht+b)
단, f는 비선형 활성화 함수 중 하나
(이진 분류를 해야하는 경우라면 시그모이드 함수를 사용할 수 있고 다양한 카테고리 중에서 선택해야하는 문제라면 소프트맥스 함수를 사용하게 될 수 있다.)
.