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

積層型双方向(Bi-dimensional) GRU関数。

 

この関数はシーケンスを伴う積層型双方向(Bi-dimensional) GRUの演算をします。この関数は隠れ状態の初期値  h0h0, 入力シーケンス xx、荷重行列 WW、そしてバイアスベクトルbbを取得します。

この関数は入力 xtxtから各時間tt 隠れ状態 htht を演算します。

 

rftzfthfthftrbtzbthbthbtht=σ(Wf0xt+Wf3ht1+bf0+bf3)=σ(Wf1xt+Wf4ht1+bf1+bf4)=tanh(Wf2xt+bf2+rft(Wf5ht1+bf5))=(1zft)hft+zftht1=σ(Wb0xt+Wb3ht1+bb0+bb3)=σ(Wb1xt+Wb4ht1+bb1+bb4)=tanh(Wb2xt+bb2+rbt(Wb5ht1+bb5))=(1zbt)hbt+zbtht1=[hft;hft]rtf=σ(W0fxt+W3fht−1+b0f+b3f)ztf=σ(W1fxt+W4fht−1+b1f+b4f)htf′=tanh⁡(W2fxt+b2f+rtf⋅(W5fht−1+b5f))htf=(1−ztf)⋅htf′+ztf⋅ht−1rtb=σ(W0bxt+W3bht−1+b0b+b3b)ztb=σ(W1bxt+W4bht−1+b1b+b4b)htb′=tanh⁡(W2bxt+b2b+rtb⋅(W5bht−1+b5b))htb=(1−ztb)⋅htb′+ztb⋅ht−1ht=[htf;htf]

ただし、 WfWf は 順方向-GRUのための荷重行列, WbWb は逆方向GRUのための荷重行列。

 

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

 

レイヤーの数 n_layers が  11より大きい場合、 k番目の層の入力がk-1-番目の層の隠れ状態 h_t である。1層目を除く全ての入力変数は、1層目と異なるshapeである可能性があることに留意してください。

Warning

train と use_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 に相当する。 ws[0][j] のみ、ただし 0 <= j < 3 が入力variableの倍数のため (I, N) shape。他の行列は  (N, N) shape。
  • bs (list of list of chainer.Variable) –バイアスベクトル。 bs[i] はi番目の層のバイアスを表す。各bs[i] は6つのベクトルを含むリスト。 bs[i][j] は上記の等式中の b_j に相当する。各行列のshapeは (N,) 、ただし N は隠れユニットの次元。
  • xs (list of chainer.Variable) –入力variableを含む Variable のリスト、各要素xs[t] は時刻 tの入力値を保持する。その shape は (B_t, I) 、ただしB_t は時刻 tにおけるミニバッチのサイズ、そしてI は入力ユニットのサイズ。 この関数はシ可変長のシーケンスをサポートしていることに注意すること。シーケンスが異なる長さであるとき、シーケンスを長さによって降順にソートし、 ソートされたシーケンスを転置(transpose)してください。transpose_sequence() はシーケンスを保持しているVariable() のリストを転置(transpose)する。そのため xs はxs[t].shape[0] >= xs[t + 1].shape[0]を満たす必要がある。
  • use_bi_direction (bool) – True,が設定されている場合、この関数は 双方向GRUを用いる。
Returns:

この関数は2つの要素hy 、 ysを含むタプルを返します。(訳注:原文ではthree elementsとなっているけれども、ソースを見ても戻り値は2つ)

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

tuple