Recurrent Neural Network의 약자로, 순환 신경망을 의미한다. 이름 그대로 내부에서 순환되는 구조를 갖는 특징이 있다.
RNN은 이미지 캡션, 문장 번역, 언어 변환 등에 사용된다.

: 입력값
: 출력값
: Hidden state
RNN의 가장 기본적인 구조는 위와 같다. 입력 값 가 RNN의 각 층에 입력이 되고, 어떠한 층의 입력 값과 이전 층의 hidden state를 통해 해당 층의 hidden state가 도출되고, 이 hidden state로 부터 연산과정을 거쳐 해당 층의 출력 값 가 출력되게 된다.
이때 이 과정에서 도출된 hidden state는 다음 층에 전달되게 된다. 각 층을 하나의 step이라고 하기도 한다.
해당 과정을 문장 번역으로 예시를 들면 아래와 같다.

'I', 'have', 'an', 'apple' 이 각 층에 입력되면 그에 따라 '나는', '사과를', '가지고', '있다'가 출력되게 된다. '나는'이 출력되는 step을 살펴보면, 입력 'I'와 이전 step에서의 hidden state를 통해 와 (나는)이 도출되게 된다. 이때 이 step에서의 hidden state 는 다음 step에 참고자료로써 전달되게 된다.

: 입력 데이터
: 이전 step에서의 hidden state
: 현재 step에서의 hidden state
: 최종 출력 데이터
: 가중치, 편향
: 은닉층 활성화 함수, 출력층 활성화 함수
은닉층의 활성화 함수는 주로 tanh, ReLU 등이 쓰이고, 출력층의 활성화 함수는 softmax 등이 쓰인다.
수식을 구성하는 요소들의 shape는 아래와 같다.
:
:
:
:
:
이때 와 는 사용자가 직접 지정할 수 있는 Hyper parameter이다.

가장 왼쪽이 기본 구조이다. 이 기본 구조 이외에도 one to many, many to one, many to many 구조가 있다.
one to many 구조는 사진에 설명을 추가하는 task, many to one 구조는 문장의 감정 분석 task, many to many 구조는 번역 task 등에 사용된다.
RNN 또한 Backpropogation 과정을 통해 가중치와 바이어스를 업데이트 하게 된다. 이때 미분 과정으로 인해 Gradient Vanishing 현상이 발생할 수 있다. 과거의 입력 정보를 잘 반영하지 못 할 것이다. 미분 계수의 값이 큰 경우에는 반대로 Gradient Exploding 현상이 발생할 가능성도 있다. 이는 LSTM의 탄생 배경이 되기도 한다.