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

積層型一方向 Long Short-Term Memory 関数。

 

この関数はシーケンスを伴う積層一方向LSTM を計算します。この関数は隠れ状態の初期値 h0h0 セル状態の初期値 c0c0、入力シーケンス xx, 荷重行列WWバイアスベクトルbbを取得します。この関数は 入力 xtxtから各時間ttにおける隠れ状態hthtctctを計算します。

 

itftotatctht=σ(W0xt+W4ht1+b0+b4)=σ(W1xt+W5ht1+b1+b5)=σ(W2xt+W6ht1+b2+b6)=tanh(W3xt+W7ht1+b3+b7)=ftct1+itat=ottanh(ct)it=σ(W0xt+W4ht−1+b0+b4)ft=σ(W1xt+W5ht−1+b1+b5)ot=σ(W2xt+W6ht−1+b2+b6)at=tanh⁡(W3xt+W7ht−1+b3+b7)ct=ft⋅ct−1+it⋅atht=ot⋅tanh⁡(ct)

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

 

層の数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) をお使いください。

 See chainer.using_config()をお読みください。

Parameters:
  • n_layers (int) – 層の数。
  • dropout_ratio (float) – ドロップアウト率。
  • hx (chainer.Variable) – 積層隠れ状態を保持するVariable。 shape は (S, B, N) 、ただし S は層の数でn_layersに等しく、B はミニバッチサイズ、  N は隠れユニットの次元。
  • cx (chainer.Variable) – 積層セル状態を保持するVariable。 hxと同じshapeを持つ。
  • ws (list of list of chainer.Variable) – 荷重行列。 ws[i] はi層目の重みを表す。各 ws[i] は8つの行列を含むリスト。 ws[i][j] は等式中の  W_j に相当する。0 <= j < 4 であるところのws[0][j] のみ、入力値を掛けたものであり、shapeが (I, N) 。他の行列のshapeはすべて(N, N)
  • bs (list of list of chainer.Variable) – バイアスベクトル。bs[i] はi層目のバイアスを表す。各 bs[i] は8つのベクトルを含むリスト。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つの要素, hycyysを結合したタプルを返す。

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

tuple

See also

chainer.functions.lstm()