問題タブ [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.
gradient - 自動微分は配列スライスの個別の関数を処理できますか?
v
長さのベクトルが与えられた場合、30
theano や tensorflow などの自動微分ツールは、次のような勾配を取ることができます。
これは意味がありますか?私の頭の中でそれを描く方法は、変換するために末尾の0を持つアイデンティティベクトル/マトリックスでいくつかの乗算を行う必要がありますv --> w
c++ - Eigen の AutoDiffJacobian、学習例を機能させるには助けが必要
私は Eigen の AutoDiffScalar を使用して多くの成功を収めてきましたが、これを自分で行うのではなく、AutoDiffJacobian に移行したいと考えています。そのため、AutoDiffJacobian.h を学習した後に学習例を作成しましたが、何かがおかしいです。
ファンクタ:
使用法:
これから受け取るエラーは次のとおりです。
このエラーから、AutoDiffJacobian.h のファンクターへの 2 回目の呼び出しで、ファンクターの正しい型を取得していないように見えますが、最初の呼び出しは機能します。ここの誰かが理由を理解し、助けてくれることを願っています。おそらく私は使い方を誤解しているだけです。
編集:問題を示すコンパイル可能な例:
c++ - Eigen::AutoDiffScalar で微分結果を取得する方法
私はこのライブラリを使用することを学んでいます。単純な関数 を微分しようとしてy = x^2
も、期待される結果が得られません ( dy/dx = 2x = 16
when x = 8
)。
optimization - Julia: 整数の「Optim.jl」と「autodiff」を使用してコスト関数を最適化する
自動微分 ( )quad_function
を使用して、次の特定の関数 ( ) を最適化 (最小化) するのが好きです。Optim.jl
autodiff=true
私の目的関数は値を整数に丸めるため、階段状になります。 Real
autodiff
このオプションを使用すると、Real
値が2 つの数値( ForwardDiff.Dual
s) になります。round
残念ながら、この型に実装された機能はありませんForwardDiff.Dual
。したがってroundtoint64
、実数部を抽出する関数を作成しました。このアプローチは、最適化中に問題を引き起こします。
問題は、optimize
関数がすぐに収束して先に進まないことです。
結果:
optimize
また、丸めを避けるために整数のベクトルで関数を初期化しようとしまし[5,5]
たが、初期ステップ サイズを見つける際にも問題が発生します。
質問:optimize
整数空間のみを探索するように指示する方法はありますか?
更新:
への変換アプローチの問題は、 sInt64
がなくなったForwardDiff.Dual
ため、導関数/勾配を計算できないことだと思います。round
ネストされたデュアルも丸め、デュアルを返すより良い関数はどのように見えるでしょうか?
haskell - 最小限の Numeric.AD の例はコンパイルされません
Numeric.AD から次の最小限の例をコンパイルしようとしています。
そして、私はこのエラーに遭遇します:
なぜこれが起こっているのかについての手がかりはありますか?前の例を見ると、これは「平坦化」grad
のタイプであることがわかります。
grad :: (Traversable f, Num a) => (forall s. Reifies s Tape => f (Reverse s a) -> Reverse s a) -> f a -> f a
しかし、実際にはコードでこのようなことをする必要があります。実際、これはコンパイルできない最も最小限の例です。私がやりたいより複雑なことは、次のようなものです:
これは、コンパイルされる型シグネチャを使用した、もう少し複雑なバージョンです。
ただし、最初のバージョンのgrad2
をコードで使用する方法がわかりません。 の処理方法がわからないためですReverse s a
。2 番目のバージョン はgrad2'
、内部コンストラクターを使用しLift
て を作成するため、適切な型を持っていますが、出力勾配がすべて 0 であるため、Reverse s a
内部 (具体的にはパラメーター ) がどのように機能するかを理解していないに違いありません。s
他のコンストラクターReverse
(ここには示されていません) を使用すると、間違ったグラデーションが生成されます。
または、人々がコードを使用したライブラリ/コードの例はありad
ますか? 私のユースケースは非常に一般的なものだと思います。
machine-learning - 複数のネットからのアクティベーションを1つの目的に組み合わせると、テンソルフローの自動微分は機能しますか?
私はテンソルフローが初めてで、テンソルフローの自動微分機能が私の問題を解決するかどうかを理解しようとしています。したがって、各ネットが潜在ベクトルを出力する 2 つのネットがあります。それで、私のネット A が潜在ベクトル -La(Hxr) を出力するとしましょう - (H,r) は出力潜在ベクトル La の次元を表します。同様にネット B は Lb(Wxr) を出力します。したがって、私の目的関数は 2 つの潜在変数の両方を入力として受け取り、それらを (La.Lb') のように結合します。ここで、(.) はドット積で、(') は転置を表します。クロスエントロピーを使用して、この目的関数を最適化します。
ここで私の質問は、テンソルフローの自動差分が勾配を正しく計算して逆伝播できるようになるかということです。ここでは簡単なケースではありません。ネット A は、La に関する勾配からのみ更新する必要があり、ネット B は、Lb に関して計算された勾配でのみ更新する必要があります。それで、テンソルフローはそれを理解するのに十分賢いですか? そして、これを検証する方法はありますか?
ありがとう!