RNN (Recurrent Neural Network)
- 시계열 데이터나 순차적 데이터를 처리하는 데 특화된 딥러닝 모델
- 현재 단계의 예측이 단순히 현재 입력에만 의존하지 않고, 이전 입력도 고려한다
- 고정 크기의 데이터가 아닌 가변적인 시퀀스의 입력 또는 출력을 처리할 수 있다

왼쪽 그림 (순환 구조를 표현) :
오른쪽은 왼쪽 그림을 시간 단계(Time Step)마다 펼쳐서 입력, 출력, 가중치를 표현한 그림이다.
시퀀스와 종속적인 데이터 처리
RNN의 순환 구조는 다음 두 가지 주요 특징을 제공한다.
시퀀스 데이터 처리 :
종속적인 데이터 처리 :
CNN과 RNN을 비교해보면 다음과 같다
| 특징 | CNN (One-to-One) | RNN (다양한 구조) |
|---|---|---|
| 입력 크기 | 고정 크기 입력 (예: 단일 벡터, 정해진 이미지 크기) | 시퀀스 입력 가능 |
| 출력 크기 | 고정 크기 출력 (예: 단일 값 또는 클래스) | 시퀀스 출력 가능 |
| 시간/순서 고려 | 독립적인 데이터 처리 (시간적 문맥 정보 없음) | 종속적인 데이터의 시퀀스를 처리 (순서 중요) |
| 적용 분야 | 고정 구조 데이터 (이미지, 정적인 피처 벡터) | 순차 데이터 (텍스트, 음성, 비디오, 시계열 데이터 등) |
RNN 종류

source : Convolutional Neural Networks for Visual Recognition
0) One-to-One (고정 입력 -> 고정 출력)
1) One-to-Many (고정 입력 -> 시퀀스 출력)
예: 이미지 캡셔닝
입력: 하나의 고정 크기 이미지
출력: 이미지의 내용을 설명하는 단어들의 시퀀스
2) Many-to-One (시퀀스 입력 -> 고정 출력)
예: 감정 분류, 액션 예측
입력: 단어의 시퀀스(텍스트) 또는 비디오 프레임의 시퀀스
출력: 하나의 정적 결과(예: 감정 라벨, 액션 라벨)
3-1) Many-to-Many (시퀀스 입력 -> 시퀀스 출력)
예: 번역, 비디오 요약
입력: 한 언어로 된 문장 시퀀스(예: 영어 문장)
출력: 다른 언어로 된 문장 시퀀스(예: 프랑스어 문장)
3-2) Many-to-Many (시퀀스 입력 -> 시퀀스 출력, 동기적)
예: 비디오 분류(프레임 수준에서)
입력: 비디오의 프레임 시퀀스
출력: 각 프레임에 대한 라벨 시퀀스
RNN 학습 과정
RNN은 입력 시퀀스를 처리하면서 은닉 상태(hidden state)를 업데이트한다.
입력 벡터는 각 시점(timestep)마다 RNN에 제공되며, 은닉 상태는 입력과 이전 상태를 기반으로 갱신된다
1. Foward Pass
frame 1부터 n까지를 입력으로 받는 RNN모델의 foward pass는 다음과 같이 작동한다.
Timestep 1 (frame 1) :
Timestep 2 (frame 2) :
Timestep n (frame n) :
: 입력-은닉 상태 가중치 (input size x unit size)
: 은닉 상태-은닉 상태 가중치 (unit size x unit size)
: 은닉 상태-출력 가중치 (unit size x output size)
현재 은닉 상태를 출력 벡터로 변환하는 데 사용한다
RNN Foward Pass의 문제점 :
기울기 소실로의 연결 :
2. Calculate Loss
RNN은 지도 학습(Supervised Learning) 모델이며, 학습 과정에서 정답 라벨을 사용한다.
각 시간 단계의 출력()과 정답 라벨()간의 차이를 기반으로 손실()을 계산한다.
3. Backward Pass (BPTT)

왼쪽 그림과 같이 순차적인 순환 구조를 가진 RNN을 오른쪽 그림처럼 시간을 축으로 펼쳐주면 모든 레이어의 뉴런이 1개이고, 레이어의 개수는 시퀀스의 길이()와 같은 ANN과 같은 모습이 된다.
시간 축을 거슬러 올라가며( → ... → ) 기울기(손실 기여도)를 계산한다(체인 룰)
기울기를 이전 단계로 전달하며 시간 단계의 기울기를 누적한다
결과적으로, 모든 시간 단계의 기울기를 누적한다
RNN의 핵심 비유 : 밀 크레프

시퀀스 :
은닉 상태 :
활성화 함수 :
시간 단계 :
최종 출력 :