本文へ移動

G検定(ジェネラリスト検定)

じーあーるゆー

GRU

GRU

Gated Recurrent Unit

GRU(Gated Recurrent Unit)は、リカレントニューラルネットワーク(RNN)の隠れ層で、1つ前の時刻の隠れ状態と現在の入力から新しい隠れ状態を計算するユニットの一種です。リセットゲートと更新ゲートという2つのゲートが、前の隠れ状態をどれだけ無視するか、どれだけ次の時刻へ引き継ぐかについて、入力に応じて時刻ごとに決めます。キョンヒョン・チョ(Kyunghyun Cho)らが2014年の論文で、LSTMに着想を得ながら計算も実装もずっと単純な隠れユニットとして提案しました。その論文は脚注で、LSTMが記憶セルと4つのゲーティングユニットを持つのに対し、提案するユニットのゲーティングユニットは2つだけだと比べています。

詳しい説明

GRUとは何か

リカレントニューラルネットワーク(RNN)は、系列の入力を1つずつ読み、それまでに読んだ内容を隠れ状態と呼ぶベクトルにまとめて次の時刻へ渡すネットワークです。時刻 の隠れ状態 は、1つ前の隠れ状態 と現在の入力 から計算します。この計算を受け持つ部品が隠れユニットです。

GRU(Gated Recurrent Unit)は、この隠れユニットの一種です。キョンヒョン・チョ(Kyunghyun Cho)、ヨシュア・ベンジオ(Yoshua Bengio)ら7人が、2014年の論文「Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation」(arXiv:1406.1078)の§2.3で提案しました。論文によれば、このユニットはLSTMユニットに着想を得たもので、計算も実装もずっと単純な新しい種類の隠れユニットです。LSTM(Long Short-Term Memory)は、記憶セルとゲートを使って長い期間の情報を保つように作られた、先行する隠れユニットです。

GRUの中心にあるのはゲートです。ここでのゲートは、0と1の間の値を出し、その値を別の量に掛けることで、情報をどれだけ通すかを調節する仕組みです。GRUはリセットゲートと更新ゲートの2つのゲートを持ちます。

ゲートの無い隠れユニットで困ること

チョらの論文は、RNNの隠れ状態を更新する関数について、要素ごとのロジスティックシグモイド関数のような単純なものから、LSTMユニットのような複雑なものまでありうると書いています。そのうえで序論では、記憶できる量と学習のしやすさの両方を高めるために、かなり凝った隠れユニットを使うと述べています。予備実験については、この新しいユニットをゲートと組み合わせて使うことが決定的に重要で、ゲートを持たないよく使われる tanh ユニットでは意味のある結果が得られなかったと報告しています。

なぜゲートが役に立つのかについて、イアン・グッドフェロー(Ian Goodfellow)、ベンジオ、アーロン・クールヴィル(Aaron Courville)による教科書『Deep Learning』(2016年)の第10章§10.10は、ゲート付きRNNを「微分が消失も爆発もしない経路を時間方向に作る」という考え方にもとづくものとして説明しています。裏返せば、そうした経路が無いと、遠い過去の時刻へさかのぼる勾配が極端に小さくなったり大きくなったりするおそれがあるということです。教科書はさらに、古い状態をいつ忘れるべきかをネットワーク自身に学習させることが、ゲート付きRNNの狙いだと述べています。

リセットゲートと更新ゲートの式

チョらの論文は、 番目の隠れユニットの計算を次の順で示しています。 は現在の入力、 は1つ前の時刻の隠れ状態、 はベクトルの 番目の要素を取り出す記号です。 はロジスティックシグモイド関数で、どんな入力も0より大きく1より小さい値に変換します。

まずリセットゲート を計算します。

同じ形で、別の重みを使って更新ゲート を計算します。

、、、 は学習で決まる重み行列です。 の付いた行列は現在の入力に、 の付いた行列は前の隠れ状態に掛かります。どちらのゲートも、現在の入力と前の隠れ状態の両方を見て、0と1の間の値を時刻ごとに決め直します。このページの ・ はチョらの論文自身の記法で、LSTMのページで紹介している教科書の記法とは向きが逆です(教科書側は が入力への重み、 がループの重み)。同じ記号でも論文が違えば意味が入れ替わる点に注意してください。

新しい隠れ状態の決まり方

次に、新しい隠れ状態の候補 を計算します。

は要素ごとの掛け算、 は活性化関数です。§2.3は を具体的に指定していませんが、論文の付録に書かれた実験用モデルの式では tanh 関数が使われています。前の隠れ状態は、リセットゲートの値 を掛けられてから候補の計算に入ります。

最後に、前の隠れ状態と候補を更新ゲートの値で混ぜ合わせて、実際の隠れ状態を決めます。

が1に近ければ前の値がほぼそのまま残り、0に近ければ候補の値にほぼ置き換わります。論文の図2の説明は、更新ゲートは隠れ状態を新しい候補で更新するかどうかを選び、リセットゲートは前の隠れ状態を無視するかどうかを決める、とまとめています。

数値で追う2つのゲートの働き

隠れユニットが1つだけの架空の例で、式の動きを確かめます。数値は説明のために選んだもので、論文に出てくる値ではありません。

更新ゲートから見ます。前の隠れ状態が 、候補が だとします。

  • なら、 です。前の値0.8に近い値が残ります。
  • なら、 です。候補の に近い値へ入れ替わります。

同じゲートの値が何時刻も続くと、差はさらに開きます。候補がずっと0で、最初の値が0.8だとすると、10時刻後の値は です。 ならおよそ0.72、 ならおよそ0.28が残るのに対し、 ならおよそ0.00078まで小さくなります。更新ゲートが1に近いユニットほど、昔の情報を長い時刻にわたって持ち続けられます。

次にリセットゲートです。候補の計算の中身が になる場合を考えます。0.5は現在の入力から来る部分、2.0は前の隠れ状態に掛かる重み、0.8は前の隠れ状態です。

  • なら で、およそ0.97です。候補は前の隠れ状態の影響を強く受けます。
  • なら で、およそ0.46です。前の隠れ状態は候補の計算から消え、現在の入力だけで候補が決まります。

論文は、リセットゲートが0に近いとき、隠れ状態は前の隠れ状態を無視し、現在の入力だけでリセットされると説明しています。これによって、後になって関係が無いと分かった情報を隠れ状態が捨てられるので、よりコンパクトな表現になるとしています。

固定の割合で混ぜる移動平均との比較

論文は、更新ゲートが前の隠れ状態の情報をどれだけ今の隠れ状態へ持ち越すかを制御し、LSTMの記憶セルと似た働きをして、RNNが長期の情報を覚えるのを助けると述べています。さらに、これは漏れのある積分ユニット(leaky-integration unit)を適応的にした変種とみなせる、とも書いています。

『Deep Learning』第10章§10.9.2は、漏れのある積分の考え方について、移動平均の更新 を例に説明しています。 が1に近いと過去の情報を長く覚え、0に近いと過去の情報をすばやく捨てます。このような線形の自己結合を持つ隠れユニットは、leaky unit と呼ばれます。

GRUの最後の式は、この の位置に更新ゲート が入った形をしています。違いは、leaky unit の結合の重みが手で決めた定数か学習するパラメータで、時刻によって変わらないのに対し、 は現在の入力と前の隠れ状態に応じて時刻ごとに変わる点です。教科書も§10.10.2で、GRUの更新ゲートは条件付きの漏れのある積分器のように働くと説明しています。

ユニットごとに違う時間の幅を受け持つ

論文によれば、隠れユニットはそれぞれ自分専用のリセットゲートと更新ゲートを持つので、ユニットごとに異なる時間の幅の依存関係を捉えるように学習します。論文は、短い期間の依存関係を捉えるユニットではリセットゲートが頻繁に活性(active)になり、長い期間の依存関係を捉えるユニットでは更新ゲートがほとんどの時間で活性になる傾向があると書いています。ここでの「活性」がゲートの値が0と1のどちらに近い状態を指すのかは、この節では明示されていません。

LSTMとの違い

チョらは論文の脚注で、LSTMユニットは記憶セルと、ユニット内の情報の流れを適応的に制御する4つのゲーティングユニットを持つのに対し、提案する隠れユニットのゲーティングユニットは2つだけだと比べています。脚注には、4つの内訳は書かれていません。一方、『Deep Learning』§10.10.1は、LSTMのセルを忘却ゲート、入力ゲート、出力ゲートの3つのゲートで説明しています。LSTMのゲートを何個と数えるかは資料によって違うので、数を覚えるときはどの資料の数え方かに注意が要ります。

2つの資料の式から読み取れる違いを表にまとめます。

比べる点GRULSTM
説明の出典チョらの論文の§2.3『Deep Learning』§10.10.1
ゲートリセットゲートと更新ゲート忘却ゲート、入力ゲート、出力ゲート
記憶を持つ場所隠れ状態 だけ状態ユニット と、外へ出す を分けて持つ
古い情報を残す量と新しい情報を入れる量1つの更新ゲートが と で同時に決める忘却ゲートと入力ゲートが別々に決める
外へ出す値を止める仕組み式には無い出力ゲートが止められる

教科書は§10.10.2で、LSTMとの主な違いは、1つのゲーティングユニットが忘れる割合と状態を更新するかどうかの判断を同時に制御する点だとしています。GRUの最後の式で、前の値に掛かる と候補に掛かる は、足すと必ず1になります。昔の情報を多く残せば、新しい候補を取り込む量はそのぶん減ります。LSTMでは、古い状態を残す割合は忘却ゲートが、新しい入力を書き込む割合は入力ゲートが、それぞれ別に決めます。

式から数える重みの数

入力の次元を 、隠れユニットの数を とします。チョらの式に出てくる重み行列は、現在の入力に掛かる 、、(どれも )と、前の隠れ状態に掛かる 、、(どれも )の3組です。『Deep Learning』§10.10.1のLSTMの式では、忘却ゲート、入力ゲート、出力ゲート、セルへの入力そのものを計算する部分の4か所に、現在の入力に掛かる行列と前の出力に掛かる行列の組があります。

、 で数えると、1組の重みは 個です。GRUは3組で63個、LSTMは4組で84個になります。このほかLSTMの式にはバイアスが1か所に3個ずつ、合わせて12個付きますが、チョらの§2.3の式にはバイアスの項が書かれていません。

ここで数えたのは、2つの資料の式に出てくる重みの個数です。実際のライブラリの実装がバイアスなどをどう持つかは確かめていません。チョらの論文自身も、計算と実装が単純だとは述べていますが、重みの数がどれだけ減るかという数字は書いていません。

どちらが優れているかについて資料が言っていること

チョらの論文の中でLSTMの名前が出るのは、着想の出どころ、更新ゲートと記憶セルの働きの類似、脚注のゲートの数の比較の箇所です。LSTMと精度を比べた実験は論文にありません。論文がLSTMに対して主張しているのは、構造が単純だという点です。

『Deep Learning』§10.10.2は、LSTMとGRUの構造の変種を調べた研究(グレフ(Greff)らの2015年の研究と、ヨゼフォヴィッチ(Jozefowicz)らの2015年の研究)が、幅広い課題で両方をはっきり上回る変種を見つけられなかったと紹介しています。これらの研究そのものは今回確かめておらず、教科書による紹介として書いています。ここで読んだ資料からは、GRUがLSTMより常に優れている、あるいは常に劣っていると言うことはできません。

提案論文での使われ方

チョらがGRUを提案したのは、論文の主題であるRNN Encoder–Decoderの部品としてです。RNN Encoder–Decoderは2つのRNNからなり、一方が記号の系列を固定長のベクトルに符号化し、もう一方がそのベクトルから別の記号の系列を生成します。論文は英語からフランス語への翻訳を題材にし、既存のフレーズベースの統計的機械翻訳システムの中で、フレーズの組に点数を付けるためにこのモデルを使いました。実験のモデルは、符号化側と復号側の両方に、提案したゲートを持つ隠れユニットを1000個ずつ置いています。

GRUという名前の出どころ

GRUという名前は、提案論文の中には出てきません。arXivに掲載された論文の第3版(2014年9月3日付)の全文を検索したところ、「GRU」と「gated recurrent unit」はどちらも見つかりませんでした。§2.3の見出しは「Hidden Unit that Adaptively Remembers and Forgets」(適応的に覚え、忘れる隠れユニット)で、本文もこのユニットを「提案する隠れユニット」と呼んでいます。

『Deep Learning』§10.10.2は、ゲート付きRNNのユニットがgated recurrent units、つまりGRUとしても知られると書き、その出典としてチョらの2014年の論文を含む複数の文献を挙げています。GRUという呼び名が最初にどの文献で使われたのかは、今回確かめていません。

試験で問われること

G検定

  • GRUは、リカレントニューラルネットワークの隠れ状態を更新する隠れユニットの一種で、リセットゲートと更新ゲートの2つのゲートを持ちます。キョンヒョン・チョ(Kyunghyun Cho)らが2014年の論文で、LSTMに着想を得ながら計算と実装がずっと単純なユニットとして提案しました。
  • 新しい隠れ状態は で決まります。更新ゲートの値 が1に近いと前の隠れ状態がほぼそのまま残り、0に近いと新しい候補 にほぼ置き換わります。
  • リセットゲートの値が0に近いと、候補を計算するときに前の隠れ状態が無視され、現在の入力だけで候補が決まります。前の隠れ状態をどれだけ引き継ぐかを決めるのは更新ゲートで、リセットゲートと役割を取り違えないようにします。
  • LSTMとの違いは、記憶セルを隠れ状態と別に持たないことと、1つの更新ゲートが と で、古い情報を残す量と新しい候補を取り込む量を同時に決めることです。LSTMでは忘却ゲートと入力ゲートがこれを別々に決めます。
  • LSTMのゲートの数は、チョらの論文の脚注では4つのゲーティングユニット、『Deep Learning』では忘却ゲート、入力ゲート、出力ゲートの3つと、資料によって数え方が違います。GRUのゲートが2つである点はどちらの資料とも食い違いません。
  • チョらの論文はLSTMより構造が単純だと述べていますが、精度でLSTMを上回るとは述べていません。『Deep Learning』は、LSTMとGRUの両方を幅広い課題ではっきり上回る変種は見つからなかったという研究を紹介しています。

最終更新日: 2026/09/23