C.W.K.
Stream
Lesson 09 of 12 · published

Recurrent Neural Network

~18 min · rnn, lstm, gru

Level 0Curious
0 XP0/73 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

기본 recurrence

RNN 이 sequence 를 한 token 씩 처리, hidden state h 유지해서 지금까지 본 모든 거 요약. 각 step 에: h_t = f(W_h h_{t-1} + W_x x_t + b). 같은 weight 가 매 step 적용 (시간 전반 parameter sharing, CNN 이 공간 전반 sharing 처럼).

Vanilla RNN 은 simple 하고 elegant 한데 long sequence 에 vanishing gradient 끔찍. 표준 fix 는 LSTM (1997) 과 GRU (2014), 둘 다 시간 통해 gradient 가 더 멀리 흐르게 하는 gating mechanism 추가.

팁: RNN 이 sequence 의 obvious choice 일 것 같아. 2014~2017 년 dominant 였어. 그 다음 transformer 가 거의 모든 거에서 점심 먹어. 오늘 RNN 은 주로: attention 의 quadratic cost 가 아픈 매우 long sequence, constant per-token compute 가 중요한 embedded system, sequential rollout 이 자연스럽게 align 하는 RL.

LSTM cell, picture 와 code

LSTM cell 이 state vector 두 개 유지: hidden state h (output) 와 cell state c (long-term memory). 3 gate (forget, input, output) 가 뭐 어디로 흐를지 통제. Forget gate 가 핵심 insight — cell 이 vanish 없이 수백 timestep 통해 정보 selectively keep 또는 drop 하게 해.

2026 년 RNN 이 여전히 옳은 답일 때

Streaming inference (한 번에 한 token, fixed memory). 매우 long context 에 transformer 와 competitive 한 RNN-like state-space model (Mamba, S5). 일부 음악/오디오 generation pipeline. 다른 대부분 sequence task 가 transformer 로 옮김.

원칙: LSTM 과 GRU shape 한 번 학습. 첫 선택으로 reach 안 할 거야, 근데 legacy 코드, RL agent, constant per-step cost 중요한 embedded system 에서 보게 돼.

Code

An LSTM-based sequence classifier·python
import torch
import torch.nn as nn

class LSTMClassifier(nn.Module):
    def __init__(self, vocab_size, embed_dim, hidden_dim, num_classes):
        super().__init__()
        self.embed = nn.Embedding(vocab_size, embed_dim)
        self.lstm  = nn.LSTM(embed_dim, hidden_dim, batch_first=True,
                             bidirectional=True)
        self.head  = nn.Linear(hidden_dim * 2, num_classes)

    def forward(self, ids):                    # ids: [B, T]
        x = self.embed(ids)                    # [B, T, embed_dim]
        out, (h, c) = self.lstm(x)             # out: [B, T, 2*hidden_dim]
        pooled = out.mean(dim=1)               # [B, 2*hidden_dim]
        return self.head(pooled)               # [B, num_classes]

External links

Exercise

Text dataset (IMDB sentiment 가 fine 시작점) 에 small LSTM classifier train. 같은 task 에 small transformer 와 accuracy 와 training time 비교. 각 architecture 가 언제 이기는지 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.