1.1 リカレントニューラルネットワークの限界

リカレントニューラルネットワーク(RNN)は、系列データを扱うために設計されたニューラルネットワークである。各時刻の隠れ状態が前時刻の隠れ状態と現在の入力から計算され、これにより時間的な依存関係をモデル化できる。しかし、従来のRNNは勾配消失問題または勾配爆発問題に悩まされる。特に長期の依存関係学習する際、誤差信号が時間を遡るにつれて指数関数的に減衰または増大し、ネットワークが数十ステップ以上前の情報を効果的に保持できなくなる。この問題は1991年にSepp Hochreiterによって博士論文で指摘され、その後Bengioらによっても詳細に分析された。

1.2 LSTMの登場とその意義

Long Short-Term Memory(LSTM)は、1997年にSepp HochreiterとJürgen Schmidhuberによって提案された。LSTMはゲート機構とセル状態メモリセル)を導入することで、勾配消失問題を緩和し、長期依存関係の学習を可能にした。このアーキテクチャは、従来のRNNでは困難であった数百ステップ以上にわたる情報の保持を実現し、機械翻訳音声認識などの系列タスクで顕著な性能向上をもたらした。LSTMの登場は、深層学習における系列モデリングの基盤を築き、その後のGRUTransformerなどの発展に影響を与えた。

2.1 セル状態と隠れ状態

LSTMでは、従来のRNNの単一の隠れ状態に加えて、セル状態(cell state)と呼ばれる内部状態を保持する。セル状態は、時間的勾配がそのまま流れやすい「コンベヤーベルト」として機能し、ゲートによって情報の追加または削除が制御される。一方、隠れ状態(hidden state)は、出力ゲートによってセル状態のフィルタリングされたバージョンとして生成され、次の時刻への入力や出力層への受け渡しに使用される。この二重構造により、セル状態は長距離の情報を保持しやすくなり、隠れ状態は局所的な情報を表現する。

2.2 ゲート機構

LSTMには三つのゲート(忘却ゲート、入力ゲート、出力ゲート)があり、それぞれシグモイド関数によって0から1の間の値を出力し、情報の流れを制御する。各ゲートは現在の入力 \(x_t\) と前時刻の隠れ状態 \(h_{t-1}\) を入力として受け取る。

2.2.1 忘却ゲート

忘却ゲート \(f_t\) は、前時刻のセル状態 \(c_{t-1}\) のうちどの情報を保持し、どの情報を忘れるかを決定する。計算式は \(f_t = \sigma(W_f [h_{t-1}, x_t] + b_f)\) で表される。出力が1に近いほど情報を保持し、0に近いほど忘却する。

2.2.2 入力ゲート

入力ゲート \(i_t\) は、新しい情報をセル状態に追加するかどうかを制御する。計算式は \(i_t = \sigma(W_i [h_{t-1}, x_t] + b_i)\) である。

2.2.2.1 新しい候補値の生成

新しい候補値 \(\tilde{c}_t\) は、\(\tanh\) 層によって生成される。\(\tilde{c}_t = \tanh(W_c [h_{t-1}, x_t] + b_c)\) であり、これがセル状態に追加される候補となる。

2.2.2.2 セル状態の更新

忘却ゲートと入力ゲートを用いて、セル状態は次のように更新される。\(c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t\)。ここで \(\odot\) は要素ごとの積を表す。忘却ゲートが過去の情報を選択的に保持し、入力ゲートが新しい情報の追加を制御する。

2.2.3 出力ゲート

出力ゲート \(o_t\) は、更新されたセル状態に基づいて隠れ状態を生成する。\(o_t = \sigma(W_o [h_{t-1}, x_t] + b_o)\) で計算され、隠れ状態は \(h_t = o_t \odot \tanh(c_t)\) として出力される。これにより、セル状態の内容が適宜フィルタリングされて次の層や時刻へ伝達される。

3.1 順伝播の計算式

LSTMの順伝播は、以下の一連の式で表される(すべての変数は時刻 \(t\) における値)。ただし、\(W\) は重み行列、\(b\) はバイアス項、\(\sigma\) はシグモイド関数、\(\tanh\) は双曲線正接関数、\(\odot\) は要素ごとの積を表す。

\[ \begin{aligned} f_t &= \sigma(W_f [h_{t-1}, x_t] + b_f) \\ i_t &= \sigma(W_i [h_{t-1}, x_t] + b_i) \\ \tilde{c}_t &= \tanh(W_c [h_{t-1}, x_t] + b_c) \\ c_t &= f_t \odot c_{t-1} + i_t \odot \tilde{c}_t \\ o_t &= \sigma(W_o [h_{t-1}, x_t] + b_o) \\ h_t &= o_t \odot \tanh(c_t) \end{aligned} \]

初期状態は通常 \(c_0 = 0\)、\(h_0 = 0\) と設定される。これらの計算を各時刻で繰り返すことで系列全体の処理を行う。

3.2 逆伝播(BPTT)の仕組み

LSTMの学習は、時間方向に展開した誤差逆伝播法Backpropagation Through Time, BPTT)を用いて行われる。勾配はセル状態のコンベヤーベルトを通じて直接伝播するため、従来のRNNに比べて勾配消失が起こりにくい。具体的には、セル状態の勾配 \(\partial L / \partial c_t\) は、忘却ゲートの出力 \(f_t\) によってスケーリングされながら時間を遡る。忘却ゲートが1に近い値を取る場合、勾配はほとんど減衰せずに過去へ伝わる。この機構により、長期依存関係の学習が可能となる。ただし、忘却ゲートの値が常に1に近いとは限らず、実用的には数十ステップ程度の依存関係が効果的に学習されることが多い。

4.1 ピープホール接続(Peephole LSTM)

ピープホール接続は、LSTMのゲートにセル状態の情報を直接追加したバリエーションである。忘却ゲート、入力ゲート、出力ゲートの計算に \(c_{t-1}\) または \(c_t\) への接続を加えることで、セル状態をより直接的に制御できる。ただし、性能向上はタスク依存であり、一般的な設定では標準LSTMと大差ないことも多い。

4.2 Gated Recurrent Unit (GRU)

GRUは2014年Choらによって提案されたLSTMの簡略版である。GRUは忘却ゲートと入力ゲートを統合した更新ゲートとリセットゲートの二つのゲートを持ち、セル状態と隠れ状態が統合されている。パラメータ数が少ないため学習が高速であり、多くのタスクでLSTMと同等の性能を発揮する。そのため、計算資源が限られる場合や大規模モデルでよく用いられる。

4.3 Bidirectional LSTM

Bidirectional LSTM(双方向LSTM)は、系列を前方向と後方向の二つのLSTMで処理し、各時刻で両方向の隠れ状態を結合するアーキテクチャである。これにより、各時刻の出力が過去と未来の両方の文脈情報を利用できる。自然言語処理のタスク(特に系列ラベリングや機械翻訳)で標準的に使われる。

4.4 Stacked LSTM

Stacked LSTM(深層LSTM)は、複数のLSTM層を積み重ねた構造である。各層が異なる時間スケールの特徴を学習することで、より複雑な系列パターンを捉えられる。ただし、層数が増えると勾配消失や過学習のリスクが高まるため、ドロップアウトや残差接続などの正則化手法と組み合わせて用いられる。

5.1 自然言語処理

5.1.1 機械翻訳

LSTM(特にBidirectional LSTM)は、Seq2Seqモデルのエンコーダとして標準的に用いられた。エンコーダが入力文を固定長のベクトルに変換し、デコーダがそのベクトルから翻訳文を生成する。注意機構の導入により性能が大幅に向上し、Transformer登場以前の主要な手法であった。

5.1.2 感情分析

文書や発言の感情極性(ポジティブ/ネガティブ)を判定するタスクでLSTMが広く使われている。各単語の埋め込みを系列入力としてLSTMで処理し、最終隠れ状態や全時刻の出力の平均を分類に用いる。双方向LSTMや注意機構の併用により高精度を達成する。

5.1.3 テキスト生成

LSTMは言語モデルの一種として、前の単語から次の単語を逐次的に生成するのに利用される。文字レベルまたは単語レベルでの生成が可能で、詩やスクリプトの自動生成などのクリエイティブな応用がある。温度パラメータによるサンプリングの多様性制御が行われる。

5.2 時系列予測

5.2.1 株価・為替予測

金融時系列データの予測にLSTMが適用される。過去の価格や取引量の系列から将来の価格を予測する。ただし、金融市場はノイズが大きく、長期予測は困難であり、実運用では限定的な成功にとどまる。

5.2.2 気象・電力需要予測

気温、湿度、風速などの気象データや、過去の電力消費量から、将来の気象パラメータや電力需要を予測する。LSTMは複数ステップ先の予測も可能で、季節性や周期性を学習できる。実用的な精度が得られており、再生可能エネルギー発電量予測にも使われる。

5.3 音声認識

音声波形の特徴量(メルスペクトログラムなど)を系列入力としてLSTMで処理し、音素や単語の系列に変換する。Connectionist Temporal Classification(CTC)と組み合わせてエンドツーエンドの音声認識が可能。双方向LSTMや深層LSTMが効果的であり、ディープラーニングベースの音声認識システムで広く採用された。

5.4 その他(画像キャプショニング、音楽生成など)

画像キャプショニングでは、CNNで抽出した画像特徴をLSTMの初期状態として入力し、単語を逐次生成する。音楽生成では、音符やコードの系列をLSTMで学習し、新しい楽曲を生成する。その他、行動認識、異常検知、交通流予測など多岐にわたる系列データ解析に応用されている。

6.1 TensorFlow / Keras での実装例

Kerasでは tf.keras.layers.LSTM モジュールが提供されており、簡単にLSTM層を追加できる。以下は単純な例である(コードブロックはテキストで記述)。

import tensorflow as tf
model = tf.keras.Sequential([
    tf.keras.layers.LSTM(units=64, input_shape=(timesteps, features), return_sequences=True),
    tf.keras.layers.LSTM(units=32),
    tf.keras.layers.Dense(units=output_dim)
])
model.compile(optimizer='adam', loss='mse')

return_sequences をTrueにすることで全時刻の出力を次の層に渡せる。スタックや双方向の実装も容易である。

6.2 PyTorch での実装例

PyTorchでは torch.nn.LSTM が利用できる。以下のように定義する。

import torch.nn as nn
class LSTMModel(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, output_size):
        super().__init__()
        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)
    def forward(self, x):
        out, (h_n, c_n) = self.lstm(x)
        out = self.fc(out[:, -1, :])  # 最終時刻の出力を使う例
        return out

バッチサイズを先頭にするには batch_first=True を指定する。Bidirectional LSTMを使うには bidirectional=True を追加し、隠れサイズを半分に調整する必要がある。

6.3 ハイパーパラメータの調整

LSTMの主要なハイパーパラメータには、隠れ状態の次元数、層数、ドロップアウト率、学習率、シーケンス長などがある。隠れ次元が大きすぎると過学習、小さすぎると表現力不足になる。層数は2〜3層が一般的だが、タスクによっては1層で十分な場合もある。ドロップアウトは全結合層および(多層LSTMの場合)層間の出力に適用される。学習率は通常0.001前後から調整し、勾配クリッピング(例:最大ノルムを1や5に制限)を併用すると訓練が安定する。

7.1 原論文(Hochreiter & Schmidhuber, 1997)

1997年にNeural Computation誌に掲載された論文 "Long Short-Term Memory" がLSTMの原典である。この論文では、定常な誤差カルーセル(Constant Error Carousel)の概念に基づき、セル状態にゲート制御を導入した。当時はCECと入力ゲートのみで、忘却ゲートは後に追加された。この論文が深層学習における系列モデリングのブレークスルーとなった。

7.2 後の改良と標準化

2000年にFelix Gersらが忘却ゲートを追加し、現在の標準的なLSTMが確立された。さらに、2005年にAlex GravesらがConnectionist Temporal Classification(CTC)と組み合わせて手書き文字認識や音声認識で成功を収め、LSTMの実用的な有用性が広く認知されるようになった。2010年代にはGPUの普及と大規模データセットの出現により、LSTMは様々な分野で標準アーキテクチャとなった。

7.3 Transformer登場後の位置づけ

2017年にTransformerが発表され、自己注意機構を備えたモデルが多くの系列タスクでLSTMを凌駕する性能を示した。特に機械翻訳やテキスト生成ではTransformerが標準となった。しかし、LSTMは計算効率や解釈性の面で依然として有用であり、小規模データやリアルタイム推論が必要な場面、時系列予測などTransformerの恩恵が少ないタスクでは現役である。また、Transformerとのハイブリッドモデル(LSTMと注意機構の併用)も研究されている。

8.1 計算コストと学習時間

LSTMは各時刻でゲート計算と複数の行列積を行うため、特に系列長が長い場合に計算量が大きい。並列化が難しい点(逐次処理が本質的であるため)もTransformerとの比較で弱点となる。GPU上でもバッチ内の系列長を揃えるためのパディングが必要で、無駄な計算が生じる。学習時間は層数や隠れサイズに比例して増大する。

8.2 勾配問題の完全解決ではない

LSTMはセル状態により勾配消失を緩和するが、完全に解消したわけではない。忘却ゲートの値が1より小さい場合、勾配は時間とともに指数的に減衰する。また、勾配爆発に対しては勾配クリッピングが必要である。特に極めて長い系列(数千ステップ以上)では依然として学習が困難な場合がある。

8.3 系列長依存性と注意機構との比較

LSTMの性能は系列長に強く依存し、長い系列では情報の「忘却」が避けられない。一方、注意機構は全時刻の情報を直接参照できるため、長距離依存関係をより容易に捉えられる。Transformerの台頭により、LSTMは長期依存タスクでは劣ることが多いが、短い系列や低レイテンシが要求される用途では競合する。また、LSTMは状態を逐次更新するため、Transformerよりもメモリ使用量が少ないという利点がある。

  • Hochreiter, S., & Schmidhuber, J. (1997). Long Short-Term Memory. Neural Computation, 9(8), 1735-1780.
  • Gers, F. A., Schmidhuber, J., & Cummins, F. (2000). Learning to Forget: Continual Prediction with LSTM. Neural Computation, 12(10), 2451-2471.
  • Cho, K., van Merriënboer, B., Gulcehre, C., et al. (2014). Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation. EMNLP.
  • Graves, A., & Schmidhuber, J. (2005). Framewise phoneme classification with bidirectional LSTM and other neural network architectures. Neural Networks.
  • Vaswani, A., et al. (2017). Attention Is All You Need. NeurIPS.
  • Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press. (Chapter 10: Sequence Modeling)