
one to one: 기본적인 Neural Networks
one to many: Image Captioning(이미지를 설명하는 단어들의 sequence를 나타내는 것)
many to one: Sentimnent Classification(단어들로 구성된 sequence의 긍/부정을 분석하여 하나의 클래스로 나타내는 것)
many to many: Machine Translation, Video classification on frame level
RNN
RNN은 순서(sequence)가 있는 데이터를 처리할 수 있도록 설계된 신경망 구조이다.

RNN은 매 시간의 흐름마다 input 벡터를 받는다.
RNN은 내부적으로 어떤 상태(state)를 가지는데, 이 상태를 function으로 변형해 줄 수 있다.
변형되는 function에 따라 특정 타임에서의 벡터를 예측한다.

매 시간마다 입력되는 벡터에 W에 대한 recurrence function을 적용하여 sequence를 처리해 준다.
바로 직전의 상태(hidden state)와 현재 시간에서의 input 벡터를 인자로 받는 function을 통해 새로운 상태를 얻을 수 있다.
단, 매 타임 스텝마다 동일한 function과 parameter들이 사용되어야 한다.
다시 말해서 RNN은 이전 단계의 hidden state를 다음 입력으로 넘겨줌으로써 과거의 정보를 기억한다는 것이다.
(Vanilla) Recurrent Neural Network

상태가 단일의 hidden vector h로 구성된 것
Example) Character-level language model

Vocabulary: [h, e, l, o]
Example training sequence: "hello"
다음 step에 어떤 char가 오는지 예측하면서 전체 distribution을 예측하는 것이다.
🔗 최소한의 문자 단위 RNN 언어 모델 데모 코드
https://gist.github.com/karpathy/d4dee566867f8291f086
Minimal character-level language model with a Vanilla Recurrent Neural Network, in Python/numpy
Minimal character-level language model with a Vanilla Recurrent Neural Network, in Python/numpy - min-char-rnn.py
gist.github.com
Image Captioning
이미지를 입력받아, 그 이미지에 대한 자연스러운 설명 문장을 생성하는 모델이다.
예시)
입력이미지: 🐶
출력 문장: A dog is running through a field.

CNN과 RNN 두 가지 모듈로 이루어져 있지만 하나의 단일 모델처럼 작동한다. CNN을 통해 이미지에서 feature vector를 추출하고, RNN에서는 sequence를 처리하며 순차적으로 단어를 생성한다. 즉, 이미지를 요약한 벡터 + 생성된 단어들을 통해 다음 단어를 예측하고 최종적으로 문장을 만들게 된다.

일반적인 RNN에서 시퀀스를 처리할 때, h = tanh(Wxh*x + Whh*h)를 이용하지만, 이미지 캡셔닝에서 확장된 RNN은 hidden state의 수식으로 h = tanh(Wxh * x + Whh * h + Wih * v)를 사용한다. 여기서 추가된 항 Wih*v는 CNN에서 뽑은 이미지 feature vector를 의미한다.
Attention 기반 Image Captioning

RNN 기반에서는 전체 이미지를 고정 벡터로 요약해서 계속 사용하지만, Attention 기반에서는 이미지를 부분적으로 동적으로 참조하면서 매 단어마다 어디에 가중치를 두고 볼지 선택을 한다. 즉, 단어를 만들 때마다 필요한 부분을 다시 꺼내 보는 것이다.
LSTM
기본적인 원리는 RNN과 유사하지만, LSTM에서는 cell state 벡터와 hidden state 벡터가 함께 존재한다. 즉, 기억할 정보와 잊을 정보를 스스로 조절할 수 있는 구조를 가지고 있다.

각각의 cell에는 gate가 존재한다. 현재의 cell state를 ouput의 반영함으로써 hidden state를 구하는 것이다. Cell State는 장기 기억 역할로 정보가 계속 전달된다.
| 구성 요소 | 역할 |
| Input Gate(i) | 새로운 정보를 얼마나 반영할지 결정 |
| Forget Gate(f) | 기억에서 무엇을 잊을지 결정 |
| Output Gate(o) | 다음 hidden state로 무엇을 보낼지 결정 |
| Candidate Gate(g) | 새로 추가될 입력 후보 정보를 기억 |
RNN과 LSTM

RNN은 곱셈, 비선형 변환을 반복하므로 장기 기억을 하는데 어렵고 실무에서 잘 쓰이지 않는다. gradient가 step마다 반복 곱셈을 당하며 Vanishing/Exploding 문제가 발생한다.
LSTM은 cell state를 따라 additive 하게 정보 흐름을 유지하므로 장기 기억이 가능하다. 곱셈만 하지 않고 덧셈 경로를 둬서 gradient가 안정적으로 흘러가게 만든다.
'AI > Stanford Univ. cs231n' 카테고리의 다른 글
| 13-1강 Segmentation (1) | 2025.08.30 |
|---|---|
| 11강 CNNs in Practice (3) | 2025.08.30 |
| 9강 Understanding and Visualizing CNN (3) | 2025.08.22 |
| 8강 Spatial Localization and detection, R-CNN (2) | 2025.04.12 |
| 7강 Convolutional Neural Networks (0) | 2025.04.05 |