<aside> 💡 CNN(Convolutional Neural Network)이 이미지 데이터에 적합한 모델이라면, 자연어 (NL, natural language)나 음성신호, 주식과 같은 연속적인(sequential) 시계열(time series) 데이터에 적합한 모델은 RNN (Recurrent Neural Network)이다.
</aside>

RNN은 이름처럼 히든노드가 방향을 가진 엣지로 연결되어 순환구조(directed cycle)로 이루어져 있기 때문에 위와 같은 순차적으로 등장하는 데이터 처리에 적합하다.

RNN의 기본 구조
시퀀스 길이에 관계없이 input과 output을 받아들일 수 있는 네트워크 구조이기 때문에 필요에 따라 다양하고 우연하게 구조를 만들 수 있다는 점이 가장 큰 장점이다.

오른쪽과 왼쪽의 표현은 동일하지만 오른쪽과 같이 각 타임 스텝 t마다 순환 뉴런을 펼쳐서 타임스텝 별 입력과 출력을 나타내는 것이 일반적이다. RNN 또한 다수의 은닉층을 가지지만 그림에서는 생략하였다.
RNN은 은닉층(hidden layer)의 노드에서 활성화 함수를 통해 나온 결과값을 출력층(output) 방향으로도 보내면서, 다시 은닉층 노드의 바로 다음 계산의 입력으로 보내는 재귀적 특징을 갖고있다.

순환 뉴런으로 구성된 layer
각 순환 뉴런은 두개의 가중치 $w_x$와 $w_y$를 갖는다. $x_t$를 위한 것이고 $w_y$는 이전 타임 스텝의 출력 $y_{t-1}$을 위한 것이다. 이것을 순환 layer 전체로 생각하면 가중치 벡터 $w_x$와 $w_y$를 행렬 $W_x$ $W_y$로 나타낼 수 있으며 다음의 식과 같이 표현할 수 있다.

미니배치의 입력을 행렬 $X_t$라 하면 아래와 같이 순환 layer의 출력을 한번에 계산할 수 있다.

$Y_t$ : 타임 스텝 t에서 미니배치에 있는 각 샘플에 대한 순환 층의 출력. m(미니배치) * n(뉴런 수) 행렬
$X_t$ : 모든 샘플의 입력값을 담고 있는 m*$n_{inputs}$행렬 ( $n_{inputs}$은 입력 특성 수)
$W_x$ : 현재 타임 스텝 t의 입력에 대한 가중치를 담고있는 행렬
$W_y$ : 이전 타임 스텝 t-1의 출력에 대한 가중치를 담고있는 행렬
b : 편향(bias) 벡터
타임 스텝 t에서 순환 뉴런의 출력은 이전 타임 스텝의 모든 입력에 대한 함수이기 때문에 이것을 메모리라고 볼 수 있다.

output
hidden state : 메모리 셀이 출력층 방향으로 또는 다음 시점 t+1의 자신에게 보내는 값(vector)
input