LSTMとは
Long Short-Term Memory / 長短期記憶
ゲート機構とセル状態により長期依存の学習を改善したゲート付き再帰型ニューラルネットワーク
ひとことで言うと
昔の情報を長く覚えておけるように工夫された、時系列データ処理用のAIモデル。
概要
LSTMは、単純なRNNが抱える長期依存の学習困難(勾配消失・爆発)を緩和するために考案されたゲート付き再帰型ニューラルネットワーク。 入力ゲート・忘却ゲート・出力ゲートという3つのゲート機構と、情報を長期間保持するセル状態(cell state)を導入することで、必要な情報を保持しつつ不要な情報を選択的に忘れることができる。 これにより、単純なRNNでは困難だった、系列内の遠く離れた要素間の依存関係も学習しやすくなる。 機械翻訳・音声認識・時系列予測など、Transformer登場以前の系列モデリングタスクで広く使われた代表的なアーキテクチャ。 後年登場したGRU(Gated Recurrent Unit)はゲート数を減らして計算コストを抑えた簡略版として知られ、タスクによってはLSTMと同等の性能をより軽量に達成する。
背景
単純なRNNは、誤差逆伝播(BPTT)の際に勾配がタイムステップを経るごとに指数的に減衰・増大する勾配消失・爆発問題を抱え、長い系列の学習が困難だった。 LSTMは、勾配が減衰しにくい経路であるセル状態と、情報の出入りを制御するゲート機構を導入することで、この問題を緩和するために考案された。
歴史
1997年: HochreiterとSchmidhuberがLSTMを提案。 2000年代: 忘却ゲートの追加など構造の改良が進む。 2014年: LSTMを簡略化したGRU(Gated Recurrent Unit)が提案される。 2014-2016年頃: 機械翻訳・音声認識でLSTMベースのSeq2Seqモデルが主流になる。 2017年以降: Transformerの登場により、多くのNLPタスクでLSTMからの置き換えが進む。
アーキテクチャ
各タイムステップで、忘却ゲートがセル状態から不要な情報を削除する割合を決定し、入力ゲートが新しい情報をどれだけセル状態に加えるかを決定する。 これらによって更新されたセル状態と出力ゲートを組み合わせて、そのタイムステップの隠れ状態(出力)を生成する。 各ゲートはシグモイド関数で0〜1の値を出力し、情報の通過量を連続的に制御する。
ワークフロー
系列データを1タイムステップずつ入力 → 忘却ゲート・入力ゲートでセル状態を更新 → 出力ゲートで隠れ状態を計算 → 次のタイムステップへセル状態と隠れ状態を伝播 → BPTT(Backpropagation Through Time)により誤差を逆伝播して重みを更新。
コード例
PyTorchでの基本的なLSTM層
import torch.nn as nn
lstm = nn.LSTM(input_size=10, hidden_size=20, batch_first=True)
output, (hidden, cell) = lstm(input_sequence)利点
- ゲート機構により、単純なRNNより長期の依存関係を学習しやすい
- 忘却ゲートで不要な情報を選択的に破棄でき、勾配消失を緩和できる
- 可変長の系列データを扱える
欠点
- 単純なRNNよりゲートの分だけパラメータ数・計算量が増える
- 逐次処理のため、学習・推論をTransformerほど並列化できない
- 非常に長い系列では、依然として長距離依存を学習しにくい場合がある
比較
- RNN — LSTMはRNNの一種で、ゲート機構とセル状態により長期依存の学習を改善したアーキテクチャ
- Transformer — TransformerはLSTMの逐次処理によるボトルネックを解消し、並列学習を可能にしたアーキテクチャ
- ニューラルネットワーク — LSTMはニューラルネットワークの一種で、系列データの長期依存を扱うためにゲート機構を追加したもの
- GRU — GRUは、LSTMのゲート構造を更新ゲート・リセットゲートの2つに簡略化した派生形
- BPTT — LSTMは、BPTTで学習する際に生じやすい勾配消失問題を、ゲート構造によって緩和するために考案された
関連用語
よくある質問
LSTMとRNNの違いは?
LSTMは単純なRNNにゲート機構とセル状態を追加した拡張版。 長期依存の学習困難(勾配消失)を緩和するよう設計されている。
LSTMは今も使われている?
Transformerの登場以降、主要タスクでの採用は減ったが、計算資源が限られる環境や、逐次的なオンライン推論が必要な時系列予測などでは今も使われている。
参考文献
- Research PaperLong Short-Term Memory (Hochreiter & Schmidhuber, 1997)
- DocumentationPyTorch: torch.nn.LSTM