単純なRNNが抱える勾配消失問題を、情報の流れを制御する「ゲート」で解決するLSTMとGRUを学ぶ項目です。各ゲートの役割とメモリーセルの働き、LSTMとGRUの構造の違いを整理します。

📖 概要

単純なRNNは、BPTTで時刻を遡るたびに同じ重み行列と活性化関数の微分が繰り返し掛けられるため、長い系列で勾配消失が起こり、離れた時刻間の依存関係(長期依存)をうまく学習できません。この問題への構造的な解決策が、シグモイド関数の出力(0〜1)で情報の通過量を連続的に制御する「ゲート」を組み込んだリカレントユニットです。

代表がLSTM (Long Short-Term Memory)で、内部にメモリーセルと呼ばれる情報の通り道を持ち、忘却ゲート・入力ゲート・出力ゲートの3つのゲートでセルへの書き込み・保持・読み出しを制御します。セルの更新が「掛け算と足し算による穏やかな更新」になっているため、勾配が遠くの時刻まで減衰しにくくなります。GRUはLSTMを簡素化した構造で、リセットゲートと更新ゲートの2つでほぼ同等の機能を実現し、パラメータ数が少なくて済みます。E資格では、各ゲートの役割の対応づけと、LSTM/GRUの構造比較が中心的な出題ポイントです。

🔍 キーワード解説

勾配消失

勾配消失 は、誤差逆伝播で勾配が層(RNNでは時刻)を遡るごとに小さくなり、遠い過去のパラメータがほとんど更新されなくなる問題です。単純なRNNでは、隠れ状態の更新が毎時刻「重み行列の乗算+活性化関数」を通るため、勾配に同じ種類の縮小要因が繰り返し掛かり、系列が長いほど指数的に勾配が減衰します。ゲート機構は、この乗算の連鎖を「セルへの加算的な更新」に置き換えることで勾配の通り道を確保する、勾配消失への構造的対策です。

メモリーセル

メモリーセル(セル状態)は、LSTMの内部を時刻方向に貫く記憶の通り道です。隠れ状態 h_t とは別に保持されるベクトル c_t で、各時刻の更新は概ね次の形になります(σはシグモイド関数、⊙は要素ごとの積)。

c_t = f_t ⊙ c_(t-1) + i_t ⊙ c~_t

ここで f_t は忘却ゲート、i_t は入力ゲート、c~_t は新しい候補値(tanhで作られる)です。過去のセルの内容が要素ごとの積と加算だけで次の時刻へ受け渡されるため、ゲートが開いている(1に近い)成分では情報も勾配もほとんど減衰せずに長期間保持されます。これがLSTMが長期依存を学習できる中核的な仕組みです。

忘却ゲート

忘却ゲート (forget gate) f_t は、メモリーセルの過去の内容 c_(t-1) をどれだけ残すかを決めるゲートです。現在の入力 x_t と前時刻の隠れ状態 h_(t-1) からシグモイド関数で0〜1の値を計算し、セルの各成分に掛けます。1に近ければ記憶を保持し、0に近ければ忘却します。文脈が切り替わったときに古い情報を捨てる役割を担います。なお、忘却ゲートは初期のLSTMにはなく後から追加された要素です。

入力ゲート

入力ゲート (input gate) i_t は、現在の入力から作られた新しい候補値 c~t を、どれだけメモリーセルに書き込むかを制御するゲートです。これも x_t と h(t-1) からシグモイド関数で0〜1の値として計算されます。重要な情報のときだけゲートを開いて記憶を更新し、ノイズ的な入力のときは書き込みを抑える、という選択的な記憶の更新を可能にします。

出力ゲート

出力ゲート (output gate) o_t は、メモリーセルの内容をどれだけ隠れ状態 h_t として外部に出力するかを制御するゲートです。

h_t = o_t ⊙ tanh(c_t)

セルには保持しておきたいが今の時刻の出力には使いたくない情報を隠しておく、といった制御ができます。

LSTM(長期記憶と短期記憶)

LSTM(長期記憶と短期記憶) は、その名(Long Short-Term Memory)の通り、短期記憶の仕組みであるRNNの隠れ状態を、長期間保持できるように拡張したユニットです。メモリーセル c_t がゲートに守られて長期記憶を担い、隠れ状態 h_t が各時刻の処理・出力に使われる短期的な状態を担う、という対応で捉えると理解しやすいです。3つのゲート(忘却・入力・出力)とセル候補の計4系統の重みを持つため、単純なRNNの約4倍のパラメータを持ちます。機械翻訳・音声認識・時系列予測など、長い文脈が必要なタスクで広く使われてきました。

GRU

GRU (Gated Recurrent Unit) は、LSTMを簡素化したゲート付きユニットです。メモリーセルを廃止して隠れ状態 h_t に記憶を一本化し、ゲートも更新ゲート z_t とリセットゲート r_t の2つに減らしています。更新は概ね次の形です。

h~_t = tanh(W_x * x_t + W_h * (r_t ⊙ h_(t-1)) + b) h_t = (1 - z_t) ⊙ h_(t-1) + z_t ⊙ h~_t

更新ゲート z_t は「過去の状態をどれだけ残し、新しい候補をどれだけ取り込むか」を1つのゲートで同時に決めており、LSTMの忘却ゲートと入力ゲートの役割を統合したものに相当します。パラメータ数がLSTMより少なく計算も軽いため、データ量や計算資源が限られる場面で使われることが多いです。性能はタスク依存で、LSTMとGRUのどちらが優れるかは一概には言えません。

リセットゲート

リセットゲート r_t は、GRUで新しい候補 h~t を計算する際に、過去の隠れ状態 h(t-1) をどの程度参照するかを制御するゲートです。0に近いと過去の状態をほぼ無視して現在の入力だけから候補を作るため、文脈の切れ目で状態を「リセット」する働きをします。忘却の機能を候補計算の側で実現している、と捉えられます。

📝 試験でのポイント

💡 ポイント
  • 「ゲート名と役割の対応」が最頻出です。忘却=過去のセル内容の保持量、入力=新規書き込み量、出力=セルから隠れ状態への読み出し量、を確実に対応づけましょう
  • セル更新式 c_t = f_t ⊙ c_(t-1) + i_t ⊙ c~_t の穴埋めは定番です。ゲートはシグモイド(0〜1)、候補値はtanhで作られる点も区別してください
  • LSTMが勾配消失に強い理由は「メモリーセルが加算的に更新され、勾配の通り道が確保されるから」と説明できるようにしましょう
  • LSTMとGRUの構造比較(ゲート数3対2、メモリーセルの有無、GRUの更新ゲートが忘却+入力の統合に相当、GRUの方がパラメータが少ない)は頻出の対比問題です
  • GRUのリセットゲート(候補計算時に過去をどれだけ使うか)と更新ゲート(過去と候補の配合比)の役割の違いを混同しないように注意しましょう

📚 まとめ

ゲート機構は、シグモイドで0〜1の通過量を制御するゲートにより、RNNの勾配消失を構造的に緩和する仕組みです。LSTMはメモリーセルを忘却・入力・出力の3ゲートで管理し、セルの加算的な更新によって長期記憶を実現します。GRUはセルを持たず、リセットゲートと更新ゲートの2つで同等の機能を軽量に実現します。各ゲートの役割と更新式、LSTM/GRUの構造差を対で覚えることが得点の近道です。