logo

ゲート付きリカレントユニットネットワーク

Gated Recurrent Unit (GRU) は、Cho らによって導入されたリカレント ニューラル ネットワーク (RNN) の一種です。 2014 年に、Long Short-Term Memory (LSTM) ネットワークのより簡単な代替手段として開発されました。 LSTM と同様に、GRU はテキスト、音声、時系列データなどの連続データを処理できます。

GRU の背後にある基本的な考え方は、ゲート メカニズムを使用して、各タイム ステップでネットワークの隠れた状態を選択的に更新することです。ゲート メカニズムは、ネットワークに出入りする情報の流れを制御するために使用されます。 GRU には、リセット ゲートとアップデート ゲートと呼ばれる 2 つのゲート メカニズムがあります。



リセット ゲートは、以前の隠れ状態をどれだけ忘れるべきかを決定し、更新ゲートは、隠れ状態を更新するために新しい入力をどの程度使用するかを決定します。 GRU の出力は、更新された隠れ状態に基づいて計算されます。

GRU のリセット ゲート、アップデート ゲート、および隠れ状態を計算するために使用される式は次のとおりです。

リセットゲート: r_t = シグモイド(W_r * [h_{t-1}, x_t])
更新ゲート: z_t = シグモイド(W_z * [h_{t-1}, x_t])
候補の非表示状態: はぁ = Tanh(W_h * [r_t * h_{t-1}, x_t])
非表示の状態: h_t = (1 – z_t) * h_{t-1} + z_t * h_t’
ここで、W_r、W_z、および W_h は学習可能な重み行列、x_t はタイム ステップ t での入力、h_{t-1} は前の隠れ状態、h_t は現在の隠れ状態です。



要約すると、GRU ネットワークは RNN の一種であり、ゲート メカニズムを使用して各タイム ステップで隠れ状態を選択的に更新し、連続データを効果的にモデル化できるようにします。これらは、言語モデリング、機械翻訳、音声認識などのさまざまな自然言語処理タスクで効果的であることが示されています。

前提条件: リカレント ニューラル ネットワーク、長期短期記憶ネットワーク

基本的なリカレント ニューラル ネットワークの動作中によく遭遇する勾配の消失と爆発の問題を解決するために、多くのバリエーションが開発されました。最も有名なバリエーションの 1 つは、 長短期記憶ネットワーク(LSTM) 。あまり知られていませんが、同様に効果的なバリエーションの 1 つは、 ゲート付きリカレント ユニット ネットワーク(GRU)

LSTM とは異なり、ゲートは 3 つだけで構成されており、内部セル状態は維持されません。 LSTM リカレント ユニットの内部セル状態に格納されている情報は、ゲート付きリカレント ユニットの隠れ状態に組み込まれます。この集合的な情報は、次のゲート付き反復ユニットに渡されます。 GRU のさまざまなゲートは次のとおりです。

    Update Gate(z): 過去の知識をどれだけ未来に伝える必要があるかを決定します。これは、LSTM 反復ユニットの出力ゲートに似ています。リセット ゲート(r): 過去の知識をどれだけ忘れるかを決定します。これは、LSTM 反復ユニットの入力ゲートと忘却ゲートの組み合わせに似ています。現在のメモリ ゲート( overline{h}_{t} = Tanh(Wodot x_{t}+Wodot (r_{t}odot h_{t-1})) ): これは、ゲート付きリカレント ユニット ネットワークに関する一般的な議論では見落とされることがよくあります。入力変調ゲートが入力ゲートのサブ部分であるのと同じように、これはリセット ゲートに組み込まれ、入力に非線形性を導入し、入力をゼロ平均にするために使用されます。これをリセット ゲートのサブ部分にするもう 1 つの理由は、以前の情報が将来に渡される現在の情報に及ぼす影響を軽減することです。

図示されているように、ゲート付きリカレント ユニット ネットワークの基本的なワークフローは、基本的なリカレント ニューラル ネットワークのワークフローに似ています。ゲート付きリカレント ユニット ネットワークは、各リカレント ユニット内の内部動作にあります。ゲート付きリカレント ユニット ネットワークは、現在の入力と以前の非表示状態。



ゲート付きリカレント ユニットの動作:

バイナリツリーとBSTの比較
  • 現在の入力と前の隠れ状態をベクトルとして入力します。
  • 以下の手順に従って、3 つの異なるゲートの値を計算します。
    1. 各ゲートについて、関係するベクトルと各ゲートのそれぞれの重みの間で要素ごとの乗算 (アダマール積) を実行することにより、パラメーター化された現在の入力ベクトルと以前に隠蔽された状態ベクトルを計算します。
    2. 各ゲートのそれぞれの活性化関数をパラメータ化されたベクトルに要素ごとに適用します。以下に、ゲートに適用されるアクティベーション関数を備えたゲートのリストを示します。
 Update Gate : Sigmoid Function Reset Gate : Sigmoid Function>
  • 現在のメモリ ゲートを計算するプロセスは少し異なります。まず、リセット ゲートと以前に隠蔽されていた状態ベクトルのアダマール積が計算されます。次に、このベクトルはパラメータ化され、パラメータ化された現在の入力ベクトルに追加されます。

    h_{t} = z_{t}odot h_{t-1} + (1-z_{t})odot overline{h}_{t}
  • 現在の隠れ状態を計算するには、まず入力と同じ次元の 1 のベクトルを定義します。このベクトルは 1 と呼ばれ、数学的には 1 で表されます。まず、更新ゲートと以前に隠蔽されていた状態ベクトルのアダマール積を計算します。次に、更新ゲートを 1 から減算して新しいベクトルを生成し、新しく生成されたベクトルと現在のメモリ ゲートのアダマール積を計算します。最後に、2 つのベクトルを加算して、現在非表示の状態ベクトルを取得します。
    E_{t} = -y_{t}log(overline{y}_{t})

    上記の動作は次のように記述されます。

青い円は要素ごとの乗算を示していることに注意してください。円内の正符号はベクトル加算を示し、負符号はベクトル減算(負の値のベクトル加算)を示します。重み行列 W には、現在の入力ベクトルと各ゲートの前の隠れ状態に対する異なる重みが含まれています。

リカレント ニューラル ネットワークと同様に、GRU ネットワークも各タイム ステップで出力を生成し、この出力は勾配降下法を使用してネットワークをトレーニングするために使用されます。

ワークフローと同様に、GRU ネットワークのトレーニング プロセスも基本的なリカレント ニューラル ネットワークのトレーニング プロセスと図的に類似しており、各リカレント ユニットの内部動作のみが異なることに注意してください。

ゲート付きリカレント ユニット ネットワークのバックプロパゲーション スルー タイム アルゴリズムは、長短期記憶ネットワークのアルゴリズムと似ており、差動チェーンの形成のみが異なります。

させて E = sum _{t} E_{t}各タイムステップでの予測出力となり、 Rightarrow E = sum _{t} -y_{t}log(overline{y}_{t})各タイムステップでの実際の出力になります。この場合、各タイム ステップでの誤差は次のように計算されます。

frac{partial E}{partial W} = sum _{t} frac{partial E_{t}}{partial W}

したがって、合計誤差は、すべてのタイム ステップでの誤差の合計によって求められます。

frac{partial E_{t}}{partial W} = frac{partial E_{t}}{partial overline{y}_{t}}frac{partial overline{y}_ {t}}{partial h_{t}}frac{partial h_{t}}{partial h_{t-1}}frac{partial h_{t-1}}{partial h_{t -2}}....frac{partial h_{0}}{partial W}
frac{partial E}{partial W} = sum _{t}frac{partial E_{t}}{partial overline{y}_{t}}frac{partial overline{ y}_{t}}{partial h_{t}}frac{partial h_{t}}{partial h_{t-1}}frac{partial h_{t-1}}{partial h_{t-2}}......frac{partial h_{0}}{partial W}

同様に、値 h_{t} = z_{t}odot h_{t-1} + (1-z_{t})odot overline{h}_{t}は、各タイム ステップでの勾配の合計として計算できます。

frac{partial h_{t}}{partial h_{t-1}} = z + (1-z)frac{partial overline{h}_{t}}{partial h_{t- 1}}

連鎖ルールを使用し、次の事実を使用します。 overline{h}_{t} = Tanh(Wodot x_{t}+Wodot (r_{t}odot h_{t-1}))の関数です frac{partial overline{h_{t}}}{partial h_{t-1}} = frac{partial (tanh(Wodot x_{t}+Wodot (r_{t} odot h_{t-1})))}{partial h_{t-1}} Rightarrow frac{partial overline{h_{t}}}{partial h_{t-1}} = (1 -overline{h}_{t}^{2})(Wodot r)そしてそれは実際に次の関数です 、次の式が生じます:-



したがって、合計誤差勾配は次の式で求められます。



勾配方程式には次の連鎖が含まれることに注意してください。 これは基本的なリカレント ニューラル ネットワークのものに似ていますが、この方程式は、次の導関数の内部動作により動作が異なります。

Gated Recurrent Units は勾配消失の問題をどのように解決しますか?

勾配の値は、次から始まる導関数のチェーンによって制御されます。 。の表現を思い出してください :-



上の式を使用すると、次の値は は:-



の表現を思い出してください :-



上の式を使用して次の値を計算します。 :-



アップデート ゲートとリセット ゲートは両方ともアクティベーション関数としてシグモイド関数を使用するため、どちらも 0 または 1 の値を取ることができます。

ケース 1(z = 1):

この場合、 の値に関係なく、 、 用語 は z に等しく、z は 1 に等しくなります。

ケース 2A(z=0 および r=0):

この場合、用語は は0に等しい。

ケース 2B (z=0 および r=1):

この場合、用語は に等しい 。この値はトレーニング可能な重み行列によって制御されるため、ネットワークは次のような方法で重みを調整することを学習します。 1に近づきます。

したがって、時間逆伝播アルゴリズムは、導関数のチェーンの値ができるだけ 1 に近づくようにそれぞれの重みを調整します。