🤖 AI/ML

LSTM

Long Short-Term Memory

RNN 변형. 장기 의존성 학습. 게이트 메커니즘으로 정보 흐름 제어.

📖 상세 설명

LSTM(Long Short-Term Memory)은 RNN의 변형으로, 장기 의존성(Long-term dependency) 문제를 해결하기 위해 1997년 Hochreiter & Schmidhuber가 제안한 아키텍처입니다. 기존 RNN은 시퀀스가 길어지면 gradient가 소실되어 먼 과거 정보를 학습하지 못했습니다.

핵심 구조: Cell State(장기 기억)와 3개의 Gate(Forget/Input/Output)로 구성됩니다. Forget Gate는 버릴 정보, Input Gate는 새로 저장할 정보, Output Gate는 출력할 정보를 결정합니다. Cell State는 컨베이어 벨트처럼 정보를 거의 손실 없이 전달합니다.

수식: f_t = sigmoid(W_f[h_{t-1}, x_t]), i_t = sigmoid(W_i[h_{t-1}, x_t]), C_t = f_t*C_{t-1} + i_t*tanh(W_c[h_{t-1}, x_t]). 이 게이팅 메커니즘으로 수백 스텝의 장기 의존성도 학습 가능합니다.

현재 상황: Transformer가 대부분의 NLP 태스크에서 LSTM을 대체했지만, 시계열 예측, 센서 데이터, 음성 처리 등 실시간/저지연이 중요한 분야에서는 여전히 활발히 사용됩니다. 파라미터 효율성도 장점입니다.

💻 코드 예제

import torch
import torch.nn as nn

# 1. 기본 LSTM 사용
lstm = nn.LSTM(
    input_size=128,    # 입력 특성 차원
    hidden_size=256,   # 은닉 상태 차원
    num_layers=2,      # LSTM 레이어 수
    batch_first=True,  # 입력: (batch, seq, feature)
    dropout=0.2,       # 레이어 간 드롭아웃
    bidirectional=True # 양방향 LSTM
)

# 입력: (batch_size, seq_length, input_size)
x = torch.randn(32, 100, 128)  # 32개 샘플, 100 스텝, 128 특성
output, (h_n, c_n) = lstm(x)
# output: (32, 100, 512) - 양방향이라 hidden*2
# h_n: (4, 32, 256) - num_layers*2, batch, hidden

# 2. 시계열 예측 모델 (주가 예측 예시)
class StockPredictor(nn.Module):
    def __init__(self, input_dim=5, hidden_dim=128, num_layers=2):
        super().__init__()
        self.lstm = nn.LSTM(input_dim, hidden_dim, num_layers,
                           batch_first=True, dropout=0.2)
        self.fc = nn.Linear(hidden_dim, 1)  # 다음 가격 예측

    def forward(self, x):
        # x: (batch, seq_len, features) - OHLCV 데이터
        lstm_out, _ = self.lstm(x)
        # 마지막 타임스텝만 사용
        last_hidden = lstm_out[:, -1, :]
        return self.fc(last_hidden)

model = StockPredictor()
prices = torch.randn(16, 60, 5)  # 60일 OHLCV
pred = model(prices)  # (16, 1) - 다음날 종가 예측

# 3. GRU와 비교 (더 간단한 구조)
gru = nn.GRU(input_size=128, hidden_size=256, num_layers=2)
# LSTM: 3 gates, GRU: 2 gates - 더 빠르지만 표현력은 LSTM이 높음

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"실시간 센서 이상 탐지에 Transformer는 오버스펙입니다. LSTM 2레이어면 100ms 이내 추론 가능하고, 엣지 디바이스에서도 돌아갑니다. 정확도도 97%로 충분해요."
💬 면접에서
"주가 예측에서 Bidirectional LSTM을 썼는데, 미래 정보가 학습에 새는 data leakage 문제가 있었어요. 시계열은 단방향 LSTM이 맞고, 양방향은 문장 분류 같은 완결된 시퀀스에 적합합니다."
💬 기술 토론에서
"LSTM vs GRU 비교하면, LSTM이 표현력은 높지만 파라미터가 1.5배 많아요. 실험 결과 우리 데이터셋에서 성능 차이가 1% 미만이라 GRU로 갔습니다. 학습 속도 30% 빨라졌어요."

⚠️ 흔한 실수 & 주의사항

시계열에서 Bidirectional LSTM 사용

미래 정보가 학습에 반영되어 과적합됩니다. 예측 태스크에서는 단방향만 사용하세요.

hidden_size를 너무 크게 설정

LSTM은 파라미터가 4*hidden^2로 증가. hidden=512면 100만+ 파라미터. 과적합 위험.

올바른 방법

시퀀스 길이에 맞게 hidden_size 조절(보통 64~256). Gradient Clipping(max_norm=1.0) 필수. 긴 시퀀스는 Transformer 고려.

🔗 관련 용어

📚 더 배우기