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

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

 

この関数はシーケンスを積層型双方向LSTMで演算します。この関数の隠れ状態の初期値 h0h0、セル状態の初期値 c0c0、入力シーケンスxx、荷重行列WW、 そしてバイアスベクトル bb。この関数は入力xtxtの各時刻tt隠れ状態htht と ctctを計算します

 

iftfftoftaftcfthftibtfbtobtabtcbthbtht=============σ(Wf0xt+Wf4ht1+bf0+bf4),σ(Wf1xt+Wf5ht1+bf1+bf5),σ(Wf2xt+Wf6ht1+bf2+bf6),tanh(Wf3xt+Wf7ht1+bf3+bf7),fftcft1+iftaft,ofttanh(cft),σ(Wb0xt+Wb4ht1+bb0+bb4),σ(Wb1xt+Wb5ht1+bb1+bb5),σ(Wb2xt+Wb6ht1+bb2+bb6),tanh(Wb3xt+Wb7ht1+bb3+bb7),fbtcbt1+ibtabt,obttanh(cbt),[hf;hb]itf=σ(W0fxt+W4fht−1+b0f+b4f),ftf=σ(W1fxt+W5fht−1+b1f+b5f),otf=σ(W2fxt+W6fht−1+b2f+b6f),atf=tanh⁡(W3fxt+W7fht−1+b3f+b7f),ctf=ftf⋅ct−1f+itf⋅atf,htf=otf⋅tanh⁡(ctf),itb=σ(W0bxt+W4bht−1+b0b+b4b),ftb=σ(W1bxt+W5bht−1+b1b+b5b),otb=σ(W2bxt+W6bht−1+b2b+b6b),atb=tanh⁡(W3bxt+W7bht−1+b3b+b7b),ctb=ftb⋅ct−1b+itb⋅atb,htb=otb⋅tanh⁡(ctb),ht=[hf;hb]

ただし、 WfWf は 順方向LSTMの荷重行列、WbWb は逆方向LSTMの荷重行列。 

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

 

層の数 n_layers11より大きい時、k番目の層の入力は k-1番目の層の隠れ状態 h_t です。 Note that all input variables except first layer may have different shape from the first layer.

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) – 積層型隠れ状態を保持する変数。shape は (S, B, N) 、ただし S は 層の数で n_layersに等しい。 B はミニバッチサイズ。 N は隠れユニットの次元。
  • cx (chainer.Variable) – 積層型セル状態を保持している変数。 hxとおなじshape。
  • ws (list of list of chainer.Variable) – 荷重行列。 ws[i] はi番目の層の荷重を表す。各ws[i] は8つの行列を含むリスト。 ws[i][j] は等式中のW_j に相当する。 ws[0][j] のみ、ただし0 <= j < 4 が入力変数の倍数となるため(I, N) shape。他の行列は全て (N, N) shape。
  • bs (list of list of chainer.Variable) – バイアスベクトル。 bs[i] はi番目の層のバイアスを表す。各bs[i] は8つのベクトルを表す。bs[i][j] は等式中の b_jに相当する。各行列のshapeは. (N,) 、ただし、 N は隠れユニットの次元。
  • xs (list of chainer.Variable) – 入力値を保持している Variableのリスト。 xs[t] の各要素は時刻 tの入力値を保持する。その shape は (B_t, I)、ただし B_t は時刻t のミニバッチサイズ。 I は入力ユニットのサイズ。 この関数は可変長のシーケンスをサポートしていることに注意すること。 複数のシーケンスが異なる長さの場合、シーケンスを長さによって降順にソートし、ソートされたシーケンスを転置する。transpose_sequence() はシーケンスを保持している Variable() のリストを転置する。そのため xsxs[t].shape[0] >= xs[t + 1].shape[0]を満たさなければならない。
Returns:

この関数は3つの要素 hy、 cy 、 ysを返す。

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

tuple