chainer.functions.n_step_birnn(n_layers, dropout_ratio, hx, ws, bs, xs, activation='tanh')[source]

シーケンス入力のための積層型双方向(Bi-dimensional)RNN関数。

 

この関数は シーケンス入力のための積層型双方向(Bi-dimensional)RNN関数を演算します。隠れ状態の初期値h0h0、セル状態の初期値 c0c0 、入力シーケンス xx、 荷重行列 WW、バイアスベクトルbb. を取得します。また、各時間 tt において、入力 xtxtから隠れ状態 hthtctctを計算します。

 

hfthbtht===f(Wf0xt+Wf1ht1+bf0+bf1),f(Wb0xt+Wb1ht1+bb0+bb1),[hft;hft],htf=f(W0fxt+W1fht−1+b0f+b1f),htb=f(W0bxt+W1bht−1+b0b+b1b),ht=[htf;htf],

ただし ff は活性関数。

荷重行列 WW は2つの行列 WfWfWbWbを含みます。 WfWf は順方向のRNNの荷重行列です。WbWb 逆方向のRNNの荷重行列です。

WfWf は入力シーケンスのための Wf0W0f と隠れ状態のための  Wf1W1f を含みます。 WbWb は入力シーケンスのための Wb0W0b と隠れ状態のための Wb1W1b を含みます。

 

バイアス行列 bb は2つの行列 bfbfbfbfを含みます。 bfbf は入力シーケンスのための bf0b0f と隠れ状態のための bf1b1fを含みます。 bbbb は入力シーケンスのための bb0b0b と隠れ状態のための bb1b1b を含みます。

 

この関数はシーケンスを受容するので、全ての tt における htht を一度の呼び出しで計算します。 2つの荷重行列と2つのバイアスベクトルは各層について必要になります。ですからSS層が存在する場合、2S2S 個の荷重行列と 2S2S 個のバイアスベクトルを用意する必要があります。

 

層の数 n_layers11より大きい場合、  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) – 積層隠れ状態を保持している変数。 shape は (S, B, N) 、ただしS は 層の数であり、 n_layersに等しい。 B はミニバッチサイズ、 N は隠れユニットの次元。 
  • ws (list of list of chainer.Variable) – 荷重行列。ws[i + di] はi層目の荷重を表す。順方向RNNの di = 0 と逆方向RNNの di = 1 に注意。 各 ws[i + di] は2つの行列を含むリストであり、等式においていは ws[i + di][j] は di = 0 の場合のW^{f}_j に相当し、 di = 1 の場合のW^{b}_j に相当する。ws[0][j]ws[1][j] が0 <= j < 1 である場合においてのみ、入力値を掛けた (I, N) shape。それ以外では全て (N, N) shape。
  • bs (list of list of chainer.Variable) – バイアスベクトル。 bs[i + di] はi層目のバイアスを表す。 順方向RNNのための di = 0 fと逆方向RNNの di = 1 に注意。各bs[i + di] は2つのベクトルを含む。等式においては bs[i + di][j] は di = 0  の場合のb^{f}_j に相当し  di = 1 の場合の b^{b}_j に相当する。各行列のshapeは (N,) 、ただし N は隠れユニットの次元。 
  • xs (list of chainer.Variable) – 入力値を保持している Variable のリスト。各要素xs[t] は t時点の入力値を保持している。 そのshape は(B_t, I)であり、ただし B_tt時点のミニバッチサイズで I は入力ユニットのサイズ。この関数は 可変長のシーケンスをサポートしているので注意。シーケンスが異なる長さの時、長さによって降順にソートしソーとされたシーケンスを転置する。 . transpose_sequence() シーケンスを保持している Variable() のリストを転置する。そのため xs は xs[t].shape[0] >= xs[t + 1].shape[0]を満たす必要がある。
  • activation (str) – 活性関数名。 tanh か reluを選択してください。
Returns:

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

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

tuple