問題タブ [autodiff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
796 参照

tensorflow - TensorFlow 勾配は、決定変数への依存関係が不明な関数の導関数を計算しますか?

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

現在、最適化を交互に行う必要がある問題に取り組んでいます。したがって、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)の間にパスがあることを確認する必要がありますが、方法がわかりません!

0 投票する
0 に答える
590 参照

tensorflow - TensorFlow Eager Execution APIでベクトルごとにヤコビ行列形式の導関数を取得するには?

MLP モデルでは、層 l の入力は次の式で計算できます: z = Wa + b W は層l-1と層の間の重み行列、a は層ニューロンlの出力信号、b は層のバイアスです。例えば:l-1l

ここに画像の説明を入力

TensorFlow Eager Execution API を使用して派生物を取得したいと考えています。

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

z の値を計算する関数を定義します。

私の主なプログラム:

フォワード モードで z の正しい値を取得できます。しかし、派生結果を印刷すると、次のように表示されました。

これは私が望むものではありません。ベクトルごとのヤコビ行列微分結果を取得する方法は?