chainer.functions.n_step_gru(n_layers, dropout_ratio, hx, ws, bs, xs)[source]

積層型一方向Gated Recurrent Unit (GRU)関数。

 

この関数は積層型一方向GRUをシーケンスを含め計算します。

この関数は隠れ状態の初期値 h0h0、入力シーケンス xx、荷重行列WWバイアスベクトル bbを取得します。 また、入力 xtxtに対する各時刻tt の隠れ状態 htht を計算します。

 

rtzththt=σ(W0xt+W3ht1+b0+b3)=σ(W1xt+W4ht1+b1+b4)=tanh(W2xt+b2+rt(W5ht1+b5))=(1zt)ht+ztht1rt=σ(W0xt+W3ht−1+b0+b3)zt=σ(W1xt+W4ht−1+b1+b4)ht′=tanh⁡(W2xt+b2+rt⋅(W5ht−1+b5))ht=(1−zt)⋅ht′+zt⋅ht−1

この関数はシーケンス入力を受け入れるため、一度の呼び出しで全ての tt における htht を計算します。 6つの荷重行列と6つのバイアスベクトルが各層で要求されます。そのため、SS 層が存在する場合、6S6S 荷重行列と 6S6S バイアスベクトルを用意する必要があります。

 

層の数n_layers11より大きい場合、 k 層目の入力は k-1層目の隠れ状態 h_t になります。 1層目を除く全ての層の入力値は、1層目と異なるshapeである可能性があることに、注意してください。


Warning

trainuse_cudnn  引数はv2以降はサポートされていません。替わりに chainer.using_config('train', train)chainer.using_config('use_cudnn', use_cudnn) をそれぞれご使用ください。chainer.using_config()もお読みください。

Parameters:
  • n_layers (int) –  層の数。
  • dropout_ratio (float) – ドロップアウト率。
  • hx (chainer.Variable) – 積層隠れ状態を保持するVariable。shape は (S, B, N) ただし S は層の数で n_layers,に等しく、 B はミニバッチサイズ、 N 隠れユニットの次元。
  • ws (list of list of chainer.Variable) –  荷重行列。 ws[i]はi層目の重みを表す。各 ws[i] は6つの行列を含むリスト。 ws[i][j] は等式中の W_j に相当する。 0 <= j < 3 であるところのws[0][j] のみshapeが (I, N) であり、入力値を掛けたもの 。他の行列はshapeが(N, N) となる。
  • bs (list of list of chainer.Variable) – バイアスベクトル。 bs[i] はi層目のバイアスを表す。各 bs[i] は6つのベクトルを含むリスト。 bs[i][j] は等式中の b_j に相当する。 N が隠れユニットの次元であるところの各行列のshapeは(N,)
  • xs (list of chainer.Variable) –  入力値を保持している Variable のリスト。各要素 xs[t] は時刻 tの入力値を保持する。その shape は (B_t, I)、ただし、 B_tt時点のミニバッチサイズで、 I は入力ユニットのサイズ。 この関数は可変長のシーケンスをサポートしていることを注意すること。シーケンスがそれぞれ異なる長さのとき、シーケンスをその長さにより降順にソートし、ソートされたシーケンスを転置する。 transpose_sequence() はシーケンスを保持している Variable() のリストを転置する。そのため、 xsxs[t].shape[0] >= xs[t + 1].shape[0]を満たす必要がある。
Returns:

この関数は3つの要素(訳注:2つ?)、 hyysを結合したタプルを返す。

  • hy は更新された隠れ状態で、shape は hxと同じ。
  • ysVariable のリスト。各要素 ys[t] は入力xs[t]に相応する最後の層の隠れ状態を保持する。 その shape は (B_t, N) 、ただし B_t は時刻 tにおけるミニバッチサイズであり、 N は隠れユニットのサイズ。B_txs[t].と同じ値を持つことに注意。
Return type:

tuple