LSTM、GRUなどの再帰レイヤー

Kerasにおける「LSTM(Long Short-Term Memory)」「GRU(Gated Recurrent Unit)」といった**再帰レイヤー(Recurrent Layers)**は、**時系列データや系列データ(シーケンスデータ)**の学習に特化したレイヤーです。自然言語処理、音声認識、株価予測など、過去の情報が現在に影響を与える問題に適しています。


1. 再帰レイヤー(RNN系レイヤー)の基本構造

RNN(Recurrent Neural Network)は、入力系列の時間的な依存関係を学習できるネットワークです。通常の全結合層と異なり、過去の出力を次の時刻に受け渡す構造を持ちます。
ただし、単純なRNNは「勾配消失」や「勾配爆発」などの問題があり、長期依存関係の学習が困難です。


2. LSTM(Long Short-Term Memory)

概要

LSTMは、標準的なRNNの問題を克服するために開発された構造で、長期依存性を保持することが可能です。セル状態(cell state)とゲート(入力ゲート、忘却ゲート、出力ゲート)により、必要な情報の選択的保持・除去を実現しています。

Kerasでの使用例

python
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM model = Sequential() model.add(LSTM(64, input_shape=(100, 50))) # 時系列長100、特徴量50

主な引数

  • units: 出力の次元数

  • return_sequences: Trueの場合、全時刻の出力を返す(多層LSTMで必要)

  • return_state: Trueにすると、最後の状態を返す(状態保存に有用)


3. GRU(Gated Recurrent Unit)

概要

GRUはLSTMと同様にゲート構造を持ちますが、より簡略化された構造で計算効率が良いのが特徴です。忘却ゲートと入力ゲートをまとめた「更新ゲート」と、「リセットゲート」の2つのゲートで情報を制御します。

Kerasでの使用例

python
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import GRU model = Sequential() model.add(GRU(64, input_shape=(100, 50)))

LSTMとの違い

特徴 LSTM GRU
ゲート構造 入力・出力・忘却ゲート 更新ゲート・リセットゲート
計算効率 やや重い 軽量
精度傾向 長期依存に強い 中〜長期依存に適応

4. 活性化関数(Activation Function)

再帰レイヤーでは、通常以下の活性化関数が使用されます。

  • tanh: 状態更新に使用される活性化関数(セルの出力)

  • sigmoid: ゲートの開閉に使用(0〜1で出力)

Kerasではこれらはデフォルトで内部的に設定されていますが、以下のように明示的に指定することも可能です。

python
LSTM(64, activation='tanh', recurrent_activation='sigmoid')

5. 応用分野

  • 自然言語処理(文章分類、機械翻訳、チャットボット)

  • 音声認識(音声からテキストへの変換など)

  • 時系列予測(株価、天気、IoTセンサーデータ)

  • 動画フレーム解析(フレーム間の時間的関係)


まとめ

レイヤー 特徴 向いているタスク
LSTM 長期依存の記憶が可能、高精度 複雑な時系列、自然言語処理など
GRU 構造が簡易、学習速度が速い 短〜中程度の時系列データ

Kerasはこれらのレイヤーを簡単に利用でき、必要に応じて多層構成やBidirectional化(双方向RNN)も可能です。

生成日:2025/05/22