본문 바로가기
C.W.K.
Stream
Lesson 09 of 12 · published

순환 신경망

~18 min · rnn, lstm, gru

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

기본 순환 구조

RNN은 시퀀스를 한 번에 한 토큰씩 처리하면서 은닉 상태 h를 유지해 지금까지 본 내용을 요약해. 각 단계의 계산은 h_t = f(W_h h_{t-1} + W_x x_t + b)로 나타낼 수 있어. 모든 단계에 같은 가중치를 적용한다는 뜻이야. CNN이 공간 전체에서 매개변수를 공유하듯, RNN은 시간 전체에서 매개변수를 공유해.

기본 RNN은 단순하고 우아하지만, 시퀀스가 길어지면 기울기 소실이 심각해져. 대표적인 개선 방법이 LSTM(1997)과 GRU(2014)야. 둘 다 게이트 구조를 추가해 기울기가 시간축을 따라 더 멀리 흐르도록 해.

팁: 시퀀스를 다룰 때는 RNN이 당연한 선택처럼 보일 수 있어. 실제로 2014~2017년에는 지배적인 아키텍처였지. 하지만 이후 Transformer가 거의 모든 분야에서 RNN을 압도했어. 오늘날 RNN은 주로 어텐션의 제곱 비용이 부담스러운 매우 긴 시퀀스, 토큰당 일정한 연산량이 중요한 임베디드 시스템, 순차 롤아웃과 자연스럽게 맞물리는 RL에 쓰여.

LSTM 셀의 구조와 코드

LSTM 셀은 두 개의 상태 벡터를 유지해. 은닉 상태 h는 출력이고, 셀 상태 c는 장기 메모리야. Forget, 입력, 출력의 3개 게이트가 어떤 정보를 어디로 흘릴지 조절해. 핵심은 망각 게이트야. 덕분에 정보가 사라지지 않은 채 수백 시간 단계을 지나도록 필요한 내용만 선택적으로 유지하거나 버릴 수 있어.

2026년에도 RNN이 맞는 경우

한 번에 한 토큰씩 고정된 메모리로 처리하는 스트리밍 추론에서는 여전히 유용해. Mamba와 S5처럼 매우 긴 문맥에서 Transformer와 경쟁할 수 있는 RNN-like 상태 공간 모델도 있어. 일부 음악과 오디오 생성 파이프라인에서도 쓰여. 그 밖의 시퀀스 과제는 대부분 Transformer로 옮겨갔어.

원칙: LSTM과 GRU의 구조는 한 번 제대로 익혀둬. 첫 번째 선택으로 꺼내 들 일은 드물지만, 레거시 코드와 RL agent, 단계마다 일정한 연산 비용이 중요한 임베디드 시스템에서 만나게 될 거야.

Code

LSTM 기반 시퀀스 분류기·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

텍스트 데이터셋에서 작은 LSTM 분류기를 학습해 봐. IMDB sentiment가 시작하기 좋은 과제야. 같은 과제를 작은 Transformer로도 학습한 뒤 정확도와 학습 시간을 비교해. 어떤 조건에서 각 아키텍처가 더 나은지 확인해 봐.

Progress

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

댓글 0

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

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