AI資格ドリル
資格を選ぶ↓

ディープラーニングの手法

G検定のRNN・LSTM・GRU:隠れ状態の更新の計算

G検定のシラバスには、再帰型ニューラルネットワーク(RNN)、LSTM、GRU、双方向RNN、BPTT(時間方向に展開した誤差逆伝播)が入っています。このページは、重みを1つずつ決めた小さな例で隠れ状態を計算し、ゲートがあると情報が残りやすい理由を確かめます。RNNは前の状態を次へ渡し、LSTMとGRUはゲートで残す量を調整します。

公式情報の確認

試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-10-02。

試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。

結論

  1. RNNは、今の入力と1つ前の隠れ状態から、次の隠れ状態を作る。同じ重みを全ステップで使い回す
  2. 隠れ状態に毎回同じ重みを掛けると、遠い過去の入力の影響は小さくなり、誤差逆伝播でも勾配が小さくなる
  3. LSTMは、入力・忘却・出力の3つのゲートと、隠れ状態とは別のセル状態を持つ
  4. GRUは、リセットと更新の2つのゲートで、セル状態を持たない
  5. 重みの組の数は、RNNが1、GRUが3、LSTMが4で、LSTMが最も計算量が多い

RNNの隠れ状態を計算する

PyTorch公式のRNNの式は、時刻tの隠れ状態を、tanhの中に「今の入力に掛ける重み」と「1つ前の隠れ状態に掛ける重み」を足して作ります。式の形は h_t=tanh(W_ih x_t+b_ih+W_hh h_(t−1)+b_hh) です。ここでは、すべて1つの数にした説明用の例で計算します。入力の重みを0.5、前の隠れ状態の重みを0.8、バイアスを0、最初の隠れ状態を0とし、入力は1ステップ目だけ1、あとは0とします。数値は架空です。

ステップ入力 x計算隠れ状態 h
11tanh(0.5×1+0.8×0)=tanh(0.5)0.4621
20tanh(0.5×0+0.8×0.4621)=tanh(0.3697)0.3537
30tanh(0.5×0+0.8×0.3537)=tanh(0.2830)0.2757
40tanh(0.5×0+0.8×0.2757)=tanh(0.2206)0.2170

1ステップ目に入力された情報は、隠れ状態を通して後のステップへ渡りますが、0.4621、0.3537、0.2757と小さくなっていきます。同じ重みを毎ステップ使うので、時間方向にネットワークを展開すると、同じ部品が横に並んだ形になります。この展開した形で誤差逆伝播を行うのがBPTTです。

なぜ長い系列で忘れるのか

誤差逆伝播では、1ステップさかのぼるごとに、隠れ状態の微分を掛けます。上の例では、tanhの微分が最大でも1なので、1ステップあたりの倍率は重みの0.8以下です。10ステップさかのぼると 0.8の10乗=0.1074 以下になります。この倍率が1より小さい値の積になることが、勾配消失問題の中身です。重みが1より大きいと逆に積が膨らみ、勾配爆発になります。

G検定の出題範囲の整理でも、RNNは系列データを学習できる一方で、長期的な特徴の学習が苦手という課題があり、これを補うためにLSTMやGRUが提案されたとされています。

LSTMのゲートとセル状態

PyTorch公式のLSTMの式は、入力ゲートi_t、忘却ゲートf_t、候補g_t、出力ゲートo_tを作り、セル状態を c_t=f_t⊙c_(t−1)+i_t⊙g_t、隠れ状態を h_t=o_t⊙tanh(c_t) で更新します。シグモイドで作るゲートは0から1の値で、⊙は要素ごとの積です。

ポイントは、セル状態の更新が「前の値にfを掛けて、新しい候補にiを掛けたものを足す」足し算の形であることです。入力ゲートを0にして忘却ゲートを0.9に固定した説明用の例では、最初のセル状態1が、1ステップ後に0.9、2ステップ後に0.81、10ステップ後に0.3487になります。RNNの例では同じ10ステップで0.1074以下でした。忘却ゲートが1なら、セル状態は変わりません。

さかのぼるステップ数RNN(倍率0.8)の上限LSTMの忘却ゲート0.9
10.80.9
20.640.81
30.5120.729
50.32770.5905
100.10740.3487

LSTMは、忘却ゲートを1に近づけることで、情報や勾配を長いステップ数にわたって残せます。この表は、倍率の違いを見せるための説明用の導出です。実際のLSTMでは、ゲートの値は入力ごとに学習で決まります。LSTMは、長期の情報を残すために作られたRNNの改良版です。

GRUはゲートを2つにまとめる

PyTorch公式のGRUの式は、リセットゲートr_t、更新ゲートz_t、新しい候補n_tを作り、隠れ状態を h_t=(1−z_t)⊙n_t+z_t⊙h_(t−1) で更新します。LSTMの入力ゲートと忘却ゲートの役割を、更新ゲート1つに統合した形です。セル状態はなく、隠れ状態だけで記憶を持ちます。

更新ゲートが0.9で、新しい候補が0の説明用の例なら、最初の隠れ状態1は、1ステップ後に0.9、2ステップ後に0.81、10ステップ後に0.3487です。更新ゲートが「前の状態をどれだけ残すか」を決めます。なお、更新ゲートの向きの定義は資料によって逆のことがあり、ここではPyTorch公式の式に従っています。試験では式の細部よりも、ゲートの数と名前を問われやすい項目です。

3つの違いを表で比べる

重みの組の数は、PyTorch公式の式から数えたものです。入力の大きさ3、隠れ状態の大きさ2、説明用の例では、式にあるバイアス2つ(b_ih と b_hh)を含めて、1組あたり 2×3+2×2+2+2=14個の値があるので、RNNは14個、GRUは42個、LSTMは56個です。

名前ゲート持つ状態重みの組上の例の値の数特徴
RNNゲートなし隠れ状態 h1組14個式が最も単純。長い系列は苦手
LSTM入力・忘却・出力の3つ(と候補 g)隠れ状態 h とセル状態 c4組56個セル状態に足し算の道がある。計算量が多い
GRUリセット・更新の2つ(と候補 n)隠れ状態 h だけ3組42個LSTMより少ない計算で、性能は大きくは変わらないとされる

双方向RNNは、系列を前から読む向きと後ろから読む向きの2つのRNNを組み合わせたものです。PyTorchでは bidirectional を True にすると双方向になります。未来の入力まで必要なので、全文が手元にある分類や翻訳の入力側に向き、次の語を順に作る場面では使えません。

LSTMの代表的な使い方が、Seq2Seq(系列から系列への変換)です。原論文は、入力の文を多層のLSTMで1本のベクトルに写し、別のLSTMでそのベクトルから翻訳文を作る構成を示しました。2014年の英仏翻訳の実験では、翻訳の自動評価指標であるBLEUで34.8を得たと述べています。

問題文から読み取る

このページの計算例から導いた読み方です。出題を予想するものではありません。

  • 「系列データを扱う」「前の時刻の出力を次の入力に使う」とあれば、RNN
  • 「入力ゲート・忘却ゲート・出力ゲート」とあれば、LSTM
  • 「リセットゲートと更新ゲート」「ゲートが2つ」とあれば、GRU
  • 「LSTMはゲートが2つ」という選択肢は誤り(3つ。2つなのはGRU)
  • 「RNNは長期の依存関係の学習が得意」という選択肢は誤り(苦手で、それを補うのがLSTMとGRU)
  • 「GRUはLSTMより計算量が多い」という選択肢は誤り(少ない)

RNNの後に登場した、再帰を使わない構造はTransformerと注意機構のページで整理しています。

よくある質問

RNNとLSTMの違いは何ですか?

RNNは前の隠れ状態と今の入力から次の隠れ状態を作るだけの構造です。LSTMはそこに入力ゲート・忘却ゲート・出力ゲートと、隠れ状態とは別のセル状態を足し、どの情報を残すかを調整できるようにしたものです。

LSTMとGRUはどちらが良いのですか?

一方が常に勝つとは言えません。G検定の出題範囲の整理では、GRUはLSTMより計算量が少なく、性能は大きくは変わらないとされています。試験では、ゲートの数と名前、セル状態の有無で見分ける問いが中心です。

忘却ゲートの値が1だとどうなりますか?

PyTorch公式の式 c_t=f_t⊙c_(t−1)+i_t⊙g_t で、f_tが1、入力ゲートi_tが0なら、セル状態は前の値のまま変わりません。ゲートは0から1の値を取り、0に近いほど忘れ、1に近いほど残します。

RNNは今でも使われますか?

Transformerの原論文は、再帰型や畳み込み型のネットワークが主流だった系列変換を、再帰と畳み込みを使わず注意機構だけで行う構造を提案しました。G検定ではRNNとLSTM・GRUも出題範囲にあるため、仕組みの理解は必要です。

次に読むと効率的なページ

執筆: ミナト編集部(運営者情報を見る)