Motivation (필요 기능)
-
가변 길이 처리
입력/출력 시퀀스 길이에 구애받지 않아야 함
-
문맥 저장·활용 능력
과거 정보를 내부 상태에 저장하고, 필요 시 참조
-
순차적 계산 지원
시점(time step) 단위로 이전 상태를 반영해 연산
Sequential Data
입력이 순서(시간·위치)에 따라 의미가 달라지는 벡터들의 나열
x={x1,x2,…,xT}
- T가 샘플마다 다름
- 순차 의존성: 과거(또는 미래) 원소와의 관계가 결과에 중요
Video : 시퀀스 요소 = 프레임 It
Text : 시퀀스 요소 = 단어 토큰 wt
Recurrent Neural Networks (RNNs)
시퀀스 데이터의 각 시점 t에서
현재 입력 xt과 이전 은닉 상태 ht−1을 함께 받아 처리하는 신경망
- 과거(T<t) 정보를 내부 상태(state)에 저장·갱신
- 순차 의존성을 모델링하여, 길이 가변 시퀀스 처리
CNN vs RNN
- CNN : 고정 길이 입력/출력
- RNN : 가변 길이 입력/출력 가능
Sample Feed-forward Network (one-to-one)
각 입력 샘플을 독립적으로 처리해 단일 출력만 생성하는 기본적인 신경망 구조
Sample RNN
동일한 Cell을 시점별로 반복 적용(unfold)하며,
이전 은닉 상태를 순환(loop) 연결해 과거 정보를 누적·활용하는
가변 길이 시퀀스 처리 구조
Processing Sequence
Recurrent system
재귀 갱신 공식
ht=fW(ht−1,xt)
ht−1: 이전 시점 은닉 상태(old state)
xt: 현재 입력 벡터(input)
fW: 학습 가능한 파라미터 W를 공유하는 동일 함수
파라미터 공유
Time-independent Function
모든 시점에 같은 fW를 적용 → 파라미터 수 고정
시퀀스 길이와 무관하게 과거 정보를 은닉 상태에 저장·이용
Vanilla RNN
- 단일 은닉 상태 ht만 사용
- 매 시점에 이전 은닉 상태 ht−1과 xt를 결합
- 은닉 상태에서 바로 출력 yt 계산
동작 과정
-
은닉 상태 업데이트
ht=tanh(Whhht−1+Wxhxt)
-
출력 계산
yt=Whyht
활성화 함수: tanh (또는 ReLU)
파라미터 공유: Whh,Wxh,Why 는 모든 시점에서 동일하게 사용
t에 따라 dimension 일정
RNN: Computational Graph
구조
Unfolded View: 시퀀스 길이 T만큼 동일한 RNN 셀(fW)이 반복 적용
각 시점마다
입력 xt + 이전 상태 ht−1 → 은닉 상태 ht 계산 → 출력 yt 생성
파라미터 공유
fW의 파라미터는 모든 시점에서 공유,
시퀀스 길이에 상관없이 고정된 수의 파라미터 사용
데이터 흐름(Data Flow)
Many-to-Many: 입력 시퀀스 {x1,…,xT}
각각에서 출력 {y1,…,yT} 생성
Forward propagation
RNN의 순전파
초기화
시점 t=0에서 은닉 상태를 h0로 초기화
시점별 업데이트 (for t=1~τ)
-
은닉 상태 업데이트
ht=tanh(Whhht−1+Wxhxt)
-
출력 계산
yt=Whyht
Training
RNN의 학습 과정
시점별 손실 계산
각 시점 t에서 RNN 출력 y(t)과 실제 정답 y(t) 간의 손실
L(t)=ℓ(y^(t),y(t))
전체 손실 집계
전체 시퀀스에 걸친 손실을 합산하여 최종 Loss 함수 정의
L=t=1∑TL(t)=t=1∑Tℓ(y^(t),y(t))
역전파 (BPTT: Backpropagation Through Time)
파라미터: Whh,Wxh,Why
1. 출력층 손실 L(t)에 대해 ∂L/∂Why 계산
2. 은닉 상태를 거슬러 올라가며 ∂L/∂Whh,∂L/∂Wxh 누적
Wxh : 입력 x dimension → hidden state dimension 으로 옮겨주는 matrix
Backpropagation through time (BPTT)
순전파(Forward)
시퀀스 전체를 순차 처리
- t=1부터 T까지 RNN 셀을 반복 적용
- 각 시점 t의 출력 y(t)과 은닉 상태 ht 계산
- 시점별 손실 L(t)를 모두 합산하여 전체 손실 L=∑t=1TL(t) 계산
역전파(Backward)
-
언폴딩(Unfolding)
시퀀스를 펼쳐서 각 시점의 연산을 하나의 그래프로 먄들어
-
경사 전파
출력층부터 시작해, 각 시점의 손실에 대한 기여도를 계산
은닉→은닉 가중치 Whh, 입력→은닉 Wxh,
은닉→출력 Why 에 대한 그래디언트를 모든 시점을 거쳐 누적
-
파라미터 업데이트
누적된 그래디언트를 기반으로 SGD/Adam 등으로 W들을 갱신
Truncated Backpropagation through time
전체 시퀀스가 아닌, 시간에 따라 일정 길이 k 짜리 구간(chunk)씩 잘라서
순전파·역전파를 수행하는 BPTT 기법
Language modeling
주어진 단어 시퀀스 {w1,w2,…,wt−1} 을 기반으로
다음 단어 wt 의 확률을 모델링
RNN-based language modeling
Tokenization
문장이나 문서를 어휘 사전(vocabulary)에 있는 토큰 단위로 분할하고,
각 토큰을 수치 벡터로 매핑하는 과정
ex. One-Hot Encoding, Word Embedding
Word embedding
단어를 고정 차원의 실수 벡터로 매핑하는 학습된 표현(임베딩)
supervised training
Sequence-to-Sequence(Seq2Seq) 모델
인코더(Encoder) : Many-to-One
- 입력 시퀀스 {x1,…,xT} 를 순차적으로 RNN에 넣어,
최종 은닉 상태 hT 에 전체 문맥(context) 압축
디코더(Decoder) – One-to-Many
- 컨텍스트 벡터 c를 초기 상태로 삼아,
- 디코더 RNN을 반복 실행하며 각 시점에 출력 yt 을 생성
- 출력 시퀀스 {y1,y2,…}
ex. Character-level Language Model
One-hot으로 ‘h→e→l→l’ 시퀀스를 입력받아,
은닉 상태를 순환 업데이트하며
다음 문자 ‘e→l→l→o’를 softmax로 확률 예측 + BPTT로 학습
Image Captioning
주어진 이미지에 대해 자연어로 문장을 생성
“Image → Sequence of Words” (One-to-Many)
모델 구조
CNN 인코더
- 사전 학습된 CNN(예: ResNet, Inception)으로 이미지 피처 추출
- 마지막 합성곱층 출력 또는 FC층 출력을 컨텍스트 벡터 c 로 사용
RNN 디코더
- c를 초기 은닉 상태로 세팅하거나 매 시점 입력을 넣음
- 시퀀스 생성을
“<END>” 토큰이 나올 때까지 반복
Example
이미지 피처 추출 (CNN 인코더)
입력된 테스트 이미지를 사전 학습된 CNN(ex. VGG16, ResNet)의
합성곱+FC 레이어를 거쳐 피처 벡터 v∈Rd 로 변환
초기 은닉 상태 설정
디코더 RNN 은닉 상태 h0 를
h0=tanh(Wihv+bh)
와 같이 이미지 피처 v 로 초기화 (0 대신 이미지 정보)
시퀀스 생성 (샘플링)
-
첫 입력: 특수 토큰 <START>
-
단어 샘플링: RNN 순전파가 만들어 내는 확률 분포 y0 에서 첫 단어(예: “straw”)를 선택
-
반복: 선택된 단어 임베딩을 x1로 넣어 다음 단어 생성 (“hat”),
<END>가 나올 때까지 계속
Various Types of RNNs
양방향 RNN (Bidirectional RNN)
과거 정보뿐 아니라 미래 정보까지 함께 활용해
출력 품질을 높이고자 하는 RNN 구조
ex. 시작&끝이 정해진 video (실시간 x)
- 순방향 RNN (h)
- h(t)=fW(h(t−1),x(t))
- 과거→현재 정보 누적
- 역방향 RNN (g)
- g(t)=fW(g(t+1),x(t))
- 미래→현재 정보 누적 (역순으로 순전파)
- 출력 결합
Multi-layered RNN (Stacked RNN)
여러 개의 RNN 층(layer)을 위로 쌓아 입력 시퀀스를 다단계로 처리
Challenges in training
기울기 소실(Vanishing Gradients)
역전파 과정에서 Whh와 비선형 함수 도함수(ex. tanh′)가 곱해지며
기울기가 지수적으로 작아짐
기울기 폭발(Exploding Gradients)
반대로 Whh의 singular Value 1보다 클 때
반복적인 곱으로 기울기가 급격히 커져 수치 불안정 발생
Analyzing recurrence relation
RNN의 순환 가중치 W를 반복 곱할 때
- ∣λi∣<1 : 해당 성분 소실(vanish)
- ∣λi∣>1 : 해당 성분 폭발(explode)
- ∣λi∣=1 : 안정적 유지
→ W의 고유값(λ) 분포가 RNN 학습의 안정성을 결정
해결책
Gated RNNs
Vanilla RNN은 반복적인 가중치 곱으로 인해
장기 의존성 학습 시 기울기 소실·폭발 문제 발생
Gate 라는 시간에 따라 동적으로 조절되는 통로를 도입해,
- 중요 정보를 장기 기억으로 보존하고
- 불필요한 정보는 단기 제거하여
- 안정적인 기울기 흐름을 확보
Long short term memory (LSTM)
-
셀 상태 ct
: 장기 기억을 저장하는 통로
-
forget gate ft=σ(Wf[ht−1,xt]+bf)
: 이전 상태 ct−1 에서 얼마나 기억할지 결정
-
input gate it
: 새 정보 c~t 를 얼마큼 셀에 추가할지 결정
-
output gate ot
: 최종 은닉 상태 ht에 셀 상태 ct를 얼마만큼 반영할지 결정
-
gate gate (Cell input) gt
: 새로 추가될 후보 정보(candidate) 생성
LSTM cells
Vanilla RNN
시점당 하나의 은닉상태 ht가 있어,
모든 정보가 섞여 장·단기 기억 구분 불가
LSTM
- 셀 상태 ct 를 도입해 장기 기억 분리
- 네 개의 게이트로 정보 흐름 제어
Core idea behind LSTM
핵심 구조: Cell State
Cell State ct는 RNN의 장기 기억을 담당하는 벡터 통로
- 시점마다 '잊을 것'은 foget 게이트로,
- '추가할 것'은 input 게이트 × gate gate(셀 입력 후보)로 제어하며,
- '내보낼 것'은 output 게이트로 결정
정보 흐름 제어: Gates
각 Gate의 역할
