용어는 비슷하지만 순환 신경망과 재귀 신경망(Recursive Neural Network)은 전혀 다른 개념입니다.
RNN(Recurrent Neural Network)은 입력과 출력을 시퀀스 단위로 처리하는 시퀀스(Sequence) 모델입니다. 번역기를 생각해보면 입력은 번역하고자 하는 단어의 시퀀스인 문장입니다. 출력에 해당되는 번역된 문장 또한 단어의 시퀀스입니다. 이와 같이 시퀀스들을 처리하기 위해 고안된 모델들을 시퀀스 모델이라고 합니다. 그 중 RNN은 가장 기본적인 인공 신경망 시퀀스 모델입니다.
앞서 배운 신경망들은 전부 은닉층에서 활성화 함수를 지난 값은 오직 출력층 방향으로만 향했습니다.
이와 같은 신경망들을 피드 포워드 신경망(Feed Forward Neural Network)이라고 합니다.
그런데 그렇지 않은 신경망들이 있습니다. RNN(Recurrent Neural Network) 또한 그 중 하나입니다.
예를 들면 이런식입니다.
- 입력 순서: 나는 → 학교에 → 간다
1단계: x₁ = "나는" → h₁ 계산 2단계: x₂ = "학교에" + h₁ → h₂ 계산 3단계: x₃ = "간다" + h₂ → h₃ 계산
- 여기서 h₁, h₂, h₃가 기억(Memory) 역할을 합니다.
- 그래서 h₃는 "나는 학교에"라는 앞의 흐름을 반영한 상태에서 "간다"를 이해하죠.

x는 입력층의 입력 벡터, y는 출력층의 출력 벡터입니다.
b 도 입력으로 존재할 수 있지만 앞으로의 그림에서는 생략합니다.RNN에서 은닉층에서 활성화 함수를 통해 결과를 내보내는 역할을 하는 노드를 셀(cell)이라고 합니다.
은닉층의 메모리 셀은 각각의 시점(time step)에서 바로 이전 시점에서의 은닉층의 메모리 셀에서 나온 값을 자신의 입력으로 사용하는 재귀적 활동을 하고 있습니다.
앞으로는 현재 시점을 변수 t로 표현하겠습니다.
이는 현재 시점 t에서의 메모리 셀이 갖고있는 값은 과거의 메모리 셀들의 값에 영향을 받은 것임을 의미합니다. 그
RNN은 입력 xₜ(예: 한 단어)를 받을 때, 이전까지 봤던 내용의 요약 정보를 함께 사용해 새로운 상태를 만들어요. 이때 그 요약 정보가 바로 hₜ, 즉 은닉 상태입니다.

메모리 셀이 출력층 방향 또는 다음 시점인 t+1의 자신에게 보내는 값을 은닉 상태(hidden state) 라고 합니다.
t 시점의 메모리 셀은 t-1 시점의 메모리 셀이 보낸 은닉 상태값을 t 시점의 은닉 상태 계산을 위한 입력값으로 사용합니다.RNN을 표현할 때는 일반적으로 위의 그림에서 좌측과 같이 화살표로 사이클을 그려서 재귀 형태로 표현하기도 하지만, 우측과 같이 사이클을 그리는 화살표 대신 여러 시점으로 펼쳐서 표현하기도 합니다.

위의 그림은 입력 벡터의 차원이 4, 은닉 상태의 크기가 2, 출력층의 출력 벡터의 차원이 2인 RNN이 시점이 2일 때의 모습을 보여줍니다.

위 구조가 자연어 처리에서 어떻게 사용될 수 있는지 예를 들어봅시다.
RNN 셀의 각 시점의 입, 출력의 단위는 사용자가 정의하기 나름이지만 가장 보편적인 단위는 '단어 벡터'입니다.
예를 들어, 하나의 입력에 대해서 여러개의 출력을 의미하는 일 대 다(one-to-many) 구조의 모델은 하나의 이미지 입력에 대해서 사진의 제목을 출력하는 이미지 캡셔닝(Image Captioning) 작업에 사용할 수 있습니다.
사진의 제목은 단어들의 나열이므로 시퀀스 출력입니다.

위 그림은 RNN으로 스팸 메일을 분류할 때의 아키텍처를 보여줍니다.

위 그림은 개체명 인식을 수행할 때의 RNN 아키텍처를 보여줍니다.

현재 시점 t에서의 은닉 상태값을 ht라고 정의하겠습니다.
은닉층의 메모리 셀은 를 계산하기 위해서 총 두 개의 가중치를 가집니다.
하나는 입력층을 위한 가중치Wx
하나는 이전 시점 t-1의 은닉 상태값인 ht-1을 위한 가중치 Wh입니다.

RNN의 은닉층 연산을 벡터와 행렬 연산으로 이해해봅시다.
xt는 대부분의 경우 단어 벡터로 간주할 수 있는데, 단어 벡터의 차원을 d라고 하고, 은닉 상태의 크기를Dh라고 하였을 때 각 벡터와 행렬의 크기는 다음과 같습니다.
배치 크기가 1이고, d와 Dh 두 값 모두를 4로 가정하였을 때, RNN의 은닉층 연산을 그림으로 표현하면 아래와 같습니다.

이때 ht를 계산하기 위한 활성화 함수로는 주로 하이퍼볼릭탄젠트 함수(tanh)가 사용됩니다.
위의 식에서 각각의 가중치 Wx,Wh``Wy의 값은 하나의 층에서는 모든 시점에서 값을 동일하게 공유합니다.
출력층은 결과값인 yt를 계산하기 위한 활성화 함수로는 푸는 문제에 따라서 다를텐데, 예를 들어서 이진 분류를 해야하는 경우라면 출력층에 로지스틱 회귀를 사용하여 시그모이드 함수를 사용할 수 있고 다중 클래스 분류를 해야하는 경우라면 출력층에 소프트맥스 회귀를 사용하여로 소프트맥스 함수를 사용할 수 있습니다.
RNN(Recurrent Neural Network)은 시퀀스(Sequence) 데이터를 처리하기 위해 고안된 신경망 구조예요.
시퀀스(sequence) = 연속된 데이터, 즉 순서가 있는 데이터
문장: "나는 학교에 간다" → 단어가 순서대로 이어짐
음성: 시간에 따라 바뀌는 소리 데이터
주식 가격: 시간에 따라 변하는 숫자
날씨 데이터: 하루하루 이어지는 온도
과거와 현재의 순서나 맥락이 중요한 데이터를 통틀어 시퀀스 데이터
t에서의 은닉 상태를 hₜ라고 하면,hₜ = tanh(Wₓ * xₜ + Wₕ * hₜ₋₁ + b)
xₜ: 현재 시점 t의 입력 (예: 단어 벡터)
hₜ₋₁: 바로 직전 시점 t-1의 은닉 상태
Wₓ: 입력 x에 곱해지는 가중치 행렬
Wₕ: 은닉 상태에 곱해지는 가중치 행렬 (순환 연결을 위해)
b: 바이어스
tanh: 비선형 활성화 함수
xₜ와 이전 은닉값 hₜ₋₁을 각각 가중치로 변환해서 더한 후, tanh로 활성화해서 새로운 은닉값 hₜ를 만드는 거예요.입력 벡터 xₜ: (d,) → 예: (4,)
은닉 상태 벡터 hₜ: (Dh,) → 예: (4,)
Wₓ: (Dh, d) → (4, 4)
Wₕ: (Dh, Dh) → (4, 4)
1. Wₓ * xₜ → (4,4) * (4,) = (4,)
2. Wₕ * hₜ₋₁ → (4,4) * (4,) = (4,)
3. 위 두 값을 더하고 → (4,) + (4,) = (4,)
4. tanh 적용 → hₜ = tanh(결과값)
hₜ₋₁이 현재 계산에 계속 재사용되기 때문이에요. 그래서 정보가 시간을 따라 순환(recurrent) 합니다.RNN은 보통 마지막 시점의 은닉 상태 hₜ를 기반으로 출력 yₜ를 계산해요.
예시
yₜ = softmax(Wy * hₜ + by)
이때도 Wy는 출력층 가중치 행렬이고, 문제 종류에 따라 softmax, sigmoid 등을 씁니다.
이진 분류: sigmoid
다중 클래스 분류: softmax
회귀 문제: 보통 tanh 또는 아무 것도 안 씀
Wx, Wh, Wy는 각 층(layer)마다 정해지면, 시점(t)에 관계없이 공유돼요.
즉, t=1이든 t=10이든, 같은 Wx, Wh를 사용합니다.
하지만 층이 여러 개 (다층 RNN) 라면, 층마다 다른 Wx, Wh를 가집니다.
hₜ = tanh(Wₓ * xₜ + Wₕ * hₜ₋₁ + b) ← 은닉 상태 계산 yₜ = softmax(Wy * hₜ + by) ← 출력값 계산