1

私の質問に答えていただけるか、役に立つリソースを提供していただければ幸いです。

現在、最適化を交互に行う必要がある問題に取り組んでいます。したがって、2 つの決定変数 x と y があるとします。最初のステップでは、損失関数 wrt の導関数を取得します。x (固定 y の場合) および x を更新します。2 番目のステップでは、導関数 wrt を取得する必要があります。y. 問題は、x が y に暗黙的に依存しており、x の y への依存性を示す方法でコスト関数の閉じた形式を見つけることは実行できないため、コスト関数の勾配は rt. y は不明です。

1) 私の最初の質問は、TensorFlow で使用されるリバース モードの "autodiff" メソッドが、1 つの変数に対するコスト関数の明示的な形式がなく、導関数が必要なこれらの問題に対して機能するかどうかです。実際には、コスト関数の値はわかっていますが、決定変数への依存関係は数学では不明です。

2)一般的な観点から、ノードを「tf.Variable」として定義し、コード実行によって進化するその変数の任意の扱いにくい関数(手で計算することで扱いにくい)がある場合、「 tf.gradients"? はいの場合、それが正しく実装されていることを確認するにはどうすればよいですか? TensorBoard を使用して確認できますか?


私のモデルは複雑すぎますが、簡略化した形式は次のように考えることができます: 私のモデルの損失関数が L(x) であるとします。テンソルフローの構築段階で、L(x) を「x」の関数としてコーディングできます。ただし、ゼロに初期化された別の変数「k」もあります。コードの実行時の L(x) の "k" 形状への依存性は、実際には私の損失関数が L(x,k) であるためです。さらに重要なことに、「x」は暗黙的に「k」の関数です。(すべての最適化は GradientDescent を使用して行われます)。問題は、閉形式関数として L(x,k) を持っていないが、各ステップで L(x,k) の値を持っていることです。FDSA/SPSA などの「数値」メソッドを使用できますが、正確ではありません。あなたが言ったように、「k」とL(x、k)の間にパスがあることを確認する必要がありますが、方法がわかりません!

4

1 に答える 1