9

Python 統計パッケージの自動微分を実装しようとしています (問題の定式化は最適化問題の定式化に似ています)。

計算グラフは、演算子のオーバーロードと、sum()、exp() などの演算用のファクトリ関数を使用して生成されます。逆累積を使用して勾配の自動微分を実装しました。しかし、二次導関数 (ヘッセ行列) の自動微分を実装するのははるかに難しいことがわかりました。個々の 2 番目の部分勾配計算を行う方法は知っていますが、グラフをトラバースして累積を行うインテリジェントな方法を思い付くのに苦労しました。二次導関数の自動微分のアルゴリズムを提供する優れた記事、または同じものを実装するオープンソースライブラリを知っている人はいますか?

4

2 に答える 2

1

最初に、疎なヘッセ行列を計算するか、完全に密なヘッセ行列に近いものを計算するかを決定する必要があります。

スパースが必要な場合は、現在、これを行うための競合する方法が 2 つあります。計算グラフを巧妙な方法で使用するだけで、計算グラフの 1 回の逆スイープで、edge_pushing アルゴリズムを使用してヘッセ行列を計算できます。

http://www.tandfonline.com/doi/full/10.1080/10556788.2011.580098

または、グラフの色付け手法を試して、ヘッセ行列をより少ない列の行列に圧縮し、逆累積を使用して各列を計算することができます

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.66.2603

必要なものが密なヘッシアン (実際には珍しい) である場合は、逆累積を使用して一度に 1 列ずつヘッシアンを計算する方がよいでしょう (BRUCE CHRISTIANSON と逆累積を検索します)。

于 2012-11-24T12:09:40.787 に答える
-1

ヘシアンを 3 次元で近似する通常の方法は、BFGSです。

L-BFGS法も同様です。

Python ではありませんが、いくつかの言語 (C#、C++、VBA など) で L-BFGS (ODE を解くための中間結果としてヘッセ行列を計算する) のソース コードを見つけることができます。翻訳するのは簡単ではないと思います。

alg を別の言語から翻訳する場合は、特に数値エラーに注意し、感度分析を行ってください (ヘッセ行列の逆数を計算する必要があります)。

于 2010-07-06T00:31:39.183 に答える