自動分化はいつ安いのですか?


12

自動微分により、特定の入力でプログラムの導関数を数値的に評価できます。この計算は、元のプログラムを実行するコストの5倍未満のコストで実行できるという定理があります。この係数5は上限です。

どのような状況でこのコストをさらに削減できますか?多くの現場での派生コードは、元のプログラムの速度に近い速度で実行されます。この高速化を実現するために何が行われますか?

計算を高速化するために利用できる元のプログラムの特徴は何ですか?

計算を高速化するためにどのようなソフトウェアエンジニアリングトリックを使用できますか?


1
確かに、指数関数や三角関数のような関数の導関数の特別な特性を活用したいと思うでしょう。多くの潜在的な一般的な部分式があります。
JM

リバースモードまたはフォワードモードについて質問していますか?
ジェッドブラウン

私の(限られた)理解は、順方向モードと逆方向モードの両方にほぼ同じコストがあることです。
MRocklin

回答:


6

ADの私の限られた理解は、マットが言ったことに似ています。導関数の計算を高速化するには、式グラフの構造がヤコビ行列の集合のスパース性と希少性を活用する必要があります。(詳細については、Griewankによるこのペーパーを参照してください。)ソフトウェアエンジニアリングのトリックは、おそらくヤコビ行列のセットでこれらのプロパティを利用するために式グラフを再構築するADコード自体にあります。ADコードがどのように記述しているコードから式グラフを生成するかを知ることは、より少ない計算を必要とするコードを記述する方法をよりよく理解するのに役立ちます。優れたADコードはすべて、共通の部分式を持つ組み込み関数をすでに利用しているはずですが、優れたADコードを書くのは困難です。

この分野の標準的な参考文献は、「派生物の評価:アルゴリズム微分の原理とテクニック」、Andreas GriewankおよびAndrea Waltherによる第2版であり、プログラムの派生物を評価するために必要な計算の数を減らす方法に関する詳細情報を提供する必要があります。


3

どのADでもこれらの組み込み関数を提供する必要があるため、式の一般的な複雑性にどのような影響があるのか​​わかりません。ADをこのように表現するので、式グラフを通るパスの数によって複雑さを分類できると思います。Andrew Lyonsは、ここで直並列グラフに関する優れた研究を行っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.