chainer.grad

chainer.grad(outputs, inputs, grad_outputs=None, grad_inputs=None, set_grad=False, retain_grad=False, enable_double_backprop=False)[source]

入力Variableについて、その出力Variableの勾配を計算する

 

この関数はバックプロパゲーション(誤差逆伝播法)のアルゴリズムを実装しています。 Variable.backward() もバックプロパゲーションを実装していますが、 この関数は入力の勾配を計算するのに必要な計算グラフにおいて最小経路を選択します。誤差は、これらお選択された経路を通してのみ、逆伝搬されます。これは、全体の演算コストを減少させる可能性があります。

 

この関数は勾配を返す方法も、Variable.backward() と異なります。この関数は、元のVariableのVariable.grad_var属性に勾配をセットする代わりに、勾配変数をリストとして直接返します。つまり、ユーザはこの関数を使って勾配計算をする前に、各Variableの勾配をクリアする必要がありません。set_grad option に Trueが設定されている場合、計算された勾配も各Variableの Variable.grad_var 属性に格納されます。その場合、Variable.grad_varの元々設定されていた値は、それが既に設定されている場合でも、必ず更新されます。

 

Parameters:
  • outputs (tuple or list of Variable) – 逆伝播をスタートさせる出力Variableのシーケンス
  • inputs (tuple or list of Variable) – 勾配計算をするそれぞれのFunctionの入力Variableのシーケンス
  • grad_outputs (tuple or list of Variable or None) – 各出力勾配の初期値を与えるVariableのシーケンス。要素にNoneが設定されている場合、1で埋められた配列が用いられる。この引数自体がNoneの場合、Noneのシーケンスとして扱われる。
  • grad_inputs (tuple or list of Variable or None) – 各入力勾配の初期値を与えるVariableのシーケンス。逆伝播法のアルゴリズムで計算された勾配は、(その場所ではなく/not in-place)それらに累算される。要素がNoneに設定されている場合、この勾配はこの値に累算されない。 この引数自身がNoneに設定されている場合、Noneのシーケンスとして扱われる。
  • set_grad (bool) – Trueが設定されている場合、各入力の Variable.grad_var 属性はそれに対応する計算された勾配変数が設定される。
  • retain_grad (bool) –Trueが設定されている場合、中間値の勾配が  Variable.grad_var 属性に格納される。この場合、set_grad オプションは無視される。
  • enable_double_backprop (bool) –Trueが設定されている場合、計算された勾配はさらに逆伝播可能。これを有効にした場合、中間勾配値を記憶するため、メモリ消費量(たぶん演算時間も)は増加する可能性があります。
Returns:

入力の勾配変数のリスト