自然言語処理

LSTM えるえすてぃーえむ

LSTMLong Short-Term MemoryRNNゲート機構長期依存関係系列モデル
LSTMについて教えて

簡単に言うとこんな感じ!

LSTMは「長期記憶と短期記憶を使い分けられる賢いRNN」だよ。普通のRNNが遠い過去の情報を忘れてしまう問題を、「どの情報を覚えておくか・どの情報を忘れるか・何を出力するか」の3つのゲートで管理して解決したんだ!


LSTMとは

LSTM(Long Short-Term Memory:長短期記憶) は、1997年にHochreiterとSchmidhuberが提案したRNNの勾配消失問題を解決するためのゲート付き再帰ニューラルネットワークです。「長期記憶(Long-term memory)」として機能するセル状態(Cell State) と、情報の流れを制御する3つのゲートが特徴です。

通常のRNNが1つの隠れ状態 h だけを持つのに対し、LSTMはセル状態 c と隠れ状態 h の2本のラインを持ちます。セル状態はコンベアベルトのように情報を長距離に渡って保持し、ゲートが「どの情報を通すか・消すか」を学習します。

Transformerが登場するまで自然言語処理・音声認識・機械翻訳の主流技術でした。現在でも計算コストが小さく時系列データに強みがあり、エッジデバイス・組み込みシステムや時系列予測で現役です。


LSTMのゲート機構

ゲート計算式役割
忘却ゲート(Forget Gate)f_t = σ(W_f × [h_{t-1}, x_t])セル状態の何を忘れるか
入力ゲート(Input Gate)i_t = σ(W_i × [h_{t-1}, x_t])セル状態に何を追加するか
出力ゲート(Output Gate)o_t = σ(W_o × [h_{t-1}, x_t])何を隠れ状態として出力するか
セル状態の更新c_t = f_t × c_{t-1} + i_t × tanh(W_c × [h_{t-1}, x_t])長期記憶の更新
import torch.nn as nn

# PyTorchでのLSTM
lstm = nn.LSTM(
    input_size=128,   # 入力次元
    hidden_size=256,  # 隠れ状態の次元
    num_layers=2,     # 積み重ね数
    batch_first=True,
    dropout=0.3       # ドロップアウト(過学習防止)
)

# output: 各ステップの出力, (h_n, c_n): 最終隠れ状態とセル状態
output, (h_n, c_n) = lstm(x)

歴史と背景

  • 1991年:Hochreiterが勾配消失問題を定式化
  • 1997年:HochreiterとSchmidhuberがLSTMを提案(論文「Long Short-Term Memory」)
  • 2013〜2015年:音声認識・機械翻訳でLSTMが驚異的な成果を上げ広く普及
  • 2017年:Transformerに精度で抜かれるが、軽量・リアルタイム用途で現役
  • 現在:時系列予測・組み込みシステムなどでGRUと共に広く使用

RNN・LSTM・GRUの比較

モデルパラメータ数長期依存関係学習速度主な用途
Vanilla RNN少ない弱い速い短い系列のみ
LSTM多い強い中程度長い系列・音声
GRU中程度強い速めLSTMの軽量代替

関連用語