StopGradient

パブリック最終クラス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>
create (スコープscope、オペランド<T>入力)
新しい StopGradient オペレーションをラップするクラスを作成するためのファクトリ メソッド。
出力<T>

継承されたメソッド

パブリックメソッド

public Output <T> asOutput ()

テンソルのシンボリック ハンドルを返します。

TensorFlow オペレーションへの入力は、別の TensorFlow オペレーションの出力です。このメソッドは、入力の計算を表すシンボリック ハンドルを取得するために使用されます。

public static StopGradient <T> create (スコープスコープ、オペランド<T> 入力)

新しい StopGradient オペレーションをラップするクラスを作成するためのファクトリ メソッド。

パラメータ
範囲現在のスコープ
返品
  • StopGradient の新しいインスタンス

public出力<T>出力()