1

最近、機械学習の目的で自分自身の基本的なリバース モード ADを完成させたばかりなので、この分野について学びたいと思っていますが、より高次の方法で難しい壁にぶつかっています。

基本的なリバース AD は美しくシンプルで理解しやすいですが、より高度な内容は抽象的すぎて技術的すぎて、インターネット上で適切な説明を見つけることができませんでした (実際、理解するのにかなりの時間がかかりました)。基本的なリバース AD も存在します。)

基本的に、微積分のコンテキストで二次導関数を取得する方法は理解していますが、逆 AD グラフを変換して二次導関数を取得する方法がわかりません。

edge_pushingのようなアルゴリズムでは、これらの破線の接続は何を意味するのでしょうか?

ライブラリ DiffSharp を調査したところ、ヘッセ行列の計算に正逆微分のようなものを使用していることに気付きました。実行中、デバッガーを介して、実際に1回の実行で順方向と逆方向のステップが混在していることを実際に確認しました。そのメカニズムの背後にある原則は何ですか?

DiffSharp は、ヤコビアン ベクトル積を使用して、変数ごとにヘッシアンを計算します。これは、R^m -> R^n マッピングです。元のグラフからそれを取得するにはどうすればよいですか? 逆 AD は R -> R^n マッピングですが、余分な次元はどこから来るのですか?

最後に、ネストされた AD はどのように機能しますか?

4

2 に答える 2

1

私は AD のチュートリアルを書きました。このチュートリアルでは、最後の方でフォワードとリバースを行う方法を簡単に示しています。また、同じサイトにリンクされている GPU 上の基本的な AD 用のライブラリ全体を作成しました。

edge_pushing についてはまだよくわかりませんが、いずれにせよ、ニューラル ネットワークにとってはそれほど重要ではないと思います。

于 2016-01-07T13:53:42.247 に答える