トップ サイトマップ
関連情報
ホーム > 製品&サービス > コンサルティングサービス > 自動微分ソリューション

アジョイント自動微分とは何か?なぜ必要か?

なぜアジョイント自動微分:AAD(adjoint Algorithmic Differentiation)を使うのか?

仮にあるC++のプライシング計算ルーチンの実行時間が、あるコンピュータ上で1分だったとしましょう。 あなたは、ボラリティのような不確かなパラメータの(例えば期間のために大きな値となりそうな数) n個に関する計算価格値の感度を知りたいと考えたとします。ここでn=180としましょう。有限差分法を 順次計算すると、少なくともn+1回のプライシング計算が必要となり、その計算時間は少なくとも3時間 は必要です。

この近似の品質は、有限桁の浮動小数点演算精度のため、打切りと桁落ち誤差により満足な結果は得ら れません。NAGのADDツール"dco/c++"(C++のオーバーロードによる微分コード;文献(3))を注意深く 適用すると、全計算時間は20分(10分以下の場合もある)以下に抑えられることが期待でき、さらに マシン精度の打切り誤差の無いグラジェント情報を得ることが出来ます。

以下の例は、実際に関連性のある応用において、より良い実行時間が得られることを示しています。 文献(2)において、我々は、dco/c++をアメリカン・オプションプライシングのLongstaff-Schwartz アルゴリズムに適用しました。そのオプション価格の5つのパラメータ(株価、ストライク・プライス、 金利、残存期間、ボラリティ)に関するグラジェントが、ほぼ一回のプライシング計算にかかるコスト のみで、マシン精度で計算することが出来ます。中央有限差分近似は以下に示す測定の通り、6倍以上の コストが掛かりました。

モンテカルロパス数 プライシング(365時間ステップ) 中央有限差分 dco/c++アジョイント
100000 6 39 6
200000 12 78 12
300000 18 121 19

ソフトウェアツール・サポート

AADは手動による実装が可能で、AADの専門技術者が任意のプライシング計算ルーチンに対して、 ツールベースで作成されたADバージョンより実行時間の短いアジョイントバージョンを作成する ことが出来るかもしれません。

しかしこのプロセスは冗長で、面倒なエラーが発生しやすく、デバッグが非常に困難になる可能性 があります。さらに重要なことは、維持性と保守性のような現代的なソフトウェアエンジニアリング の基本的な要請を満たしません。オリジナルのプライシング計算コードに対して修正したい場合は、 そのアジョイントモデルコードにもそれに相当する修正が必要となります。常にこれら2つのコードの 整合性を保つように維持するのは現実的ではありません。NAGのdco/c++は、多くの成功した応用例で 示されるように、現実的な大規模C++コード(金融工学も含む)での利用のために設計されています。

その他に出来ること

以上の事は、二次微分のAADに対してさらなる利点を持ちます。 dco/c++は、C++の演算オーバーロードとメタプログラミング技法を用いた再帰的なテンプレートの インスタント化を通して、任意の微分次数のアジョイントモデルをサポートします。また、 キャッシュを最適化した内部表現との強力で柔軟性のあるユーザーインターフェイスを提供します。 さらにサポートされる機能として、時間発展(例えば、偏微分方程式の有限差分法における) および集合系(例えば、確率微分方程式のモンテカルロ法における)に対するチェックポイント機能、 ユーザー定義のアジョイントモデル関数(例えば、線形、非線形方程式、求積法、検定ルーチン等の ソルバー)、ツールベースのアジョイントモデルとその計算の一部を手動でアジョイント化したパーツ を組み合わせたハイブリッドADD(例えば、GPUの組込み((5)を参照)や、スムーシング技法)、 等を含みます。さらにdco/c++は、NAGライブラリルーチンをその固有なものとして認識します。 NAG ADライブラリとのリンクにより、その対応するアジョイントバージョンの利用を可能にします。

References

  1. '自動微分とは’
  2. J. Deussen: Adjoint Methods for American Option Pricing. MSc Thesis, STCE, Dept. of Computer Science, RWTH Aachen, 2015.
  3. U. Naumann and J. du Toit:数理ファイナンスにおける典型的な数値計算パターンへの アジョイント自動微分ツールの適用. NAG テクニカル・レポート TR3/14, 2014.
  4. U. Naumann: The Art of Differentiating Computer Programs. An Introduction to Algorithmic Differentiation. Number 24 in Software, Environments, and Tools, SIAM, 2012.
  5. J. du Toit, J. Lotz, and U. Naumann: GPU利用アプリケーションのアジョイント自動微分. NAG テクニカル・レポート TR2/14, 2014.
Results matter. Trust NAG.

Privacy Policy | Trademarks