パブリック最終クラスStopGradient
勾配の計算を停止します。
グラフ内で実行されると、この演算は入力テンソルをそのまま出力します。
勾配を計算する演算を構築する場合、この演算により入力の寄与が考慮されなくなります。通常、勾配ジェネレーターはグラフに演算を追加し、その計算に寄与した入力を再帰的に見つけ出すことで、指定された「損失」の導関数を計算します。この演算をグラフに挿入すると、入力は勾配ジェネレーターからマスクされます。それらは勾配の計算には考慮されません。
これは、TensorFlow で値を計算したいが、その値が定数であるかのように振る舞う必要がある場合に便利です。たとえば、ベクトル x のソフトマックス関数は
def softmax(x):
numerator = tf.exp(x)
denominator = tf.reduce_sum(numerator)
return numerator / denominator
として記述できます。ただし、x の値が大きい場合、これはオーバーフローの影響を受けやすくなります。より安定した別の方法は、各値から x の最大値を減算することです。 def stable_softmax(x):
z = x - tf.reduce_max(x)
numerator = tf.exp(z)
denominator = tf.reduce_sum(numerator)
return numerator / denominator
ただし、ソフトマックスを使用して x に逆伝播する場合、 tf.reduce_max(x)
(最大値が一意でない場合、勾配が間違った入力に流れる可能性があります) 計算を逆伝播して、それを次のように扱うことは望ましくありません。定数。したがって、これを def stable_softmax(x):
z = x - tf.stop_gradient(tf.reduce_max(x))
numerator = tf.exp(z)
denominator = tf.reduce_sum(numerator)
return numerator / denominator
として書き出す必要があります。他の例としては次のようなものがあります。- M ステップがE ステップの出力を介した逆伝播を必要としないEMアルゴリズム。
- ボルツマン マシンの対比発散トレーニング。エネルギー関数を微分する場合、モデルからサンプルを生成したグラフを通じてトレーニングが逆伝播してはなりません。
- 敵対的トレーニング。敵対的サンプルの生成プロセスを通じてバックプロップが発生しないようにします。
パブリックメソッド
出力<T> | asOutput () テンソルのシンボリック ハンドルを返します。 |
静的 <T> StopGradient <T> | |
出力<T> | 出力() |
継承されたメソッド
パブリックメソッド
public Output <T> asOutput ()
テンソルのシンボリック ハンドルを返します。
TensorFlow オペレーションへの入力は、別の TensorFlow オペレーションの出力です。このメソッドは、入力の計算を表すシンボリック ハンドルを取得するために使用されます。
public static StopGradient <T> create (スコープscope、オペランド<T>入力)
新しい StopGradient オペレーションをラップするクラスを作成するためのファクトリ メソッド。
パラメーター
範囲 | 現在のスコープ |
---|
戻り値
- StopGradient の新しいインスタンス