自動微分(AD)はプログラムの微分計算に対する新しい方法です。例えば、 $\frac{\partial F}{\partial x_1}, \frac{\partial F}{\partial x_2},\ldots$ を計算する場合を考えます。ここでFは関数として以下のプログラムコードで与えられています。
if(x1<x2) then F = x1*x1 + x2*x2 + exp(x3*x3) + ... else F = x1 + x2 + x3 + ... endif
自動微分は数学的に正確であり、マシン精度まで保証します。これまでは通常、微分は有限差分 ("bump and revalue"とも呼ばれる)によって推定されることが多いのですが、それは時間がかかり、 正確性を欠くことがあります。対照的に、AD(特に、ADD(アジョイントAD))は僅かなコストで正確な 微分を与えます。
ここで、様々な領域で用いられているアジョイントADの幾つかの例を示します。
自動車工学

図1:高速(左図)および低速(右図)走行における自動車の表面形状に対する抗力係数の感度
ADは、大規模シミュレーションの感度解析による、形状最適化、インテリジェント設計および包括的な リスク研究を可能にします。
図1は、高速(左図)および低速(右図)走行における自動車表面上の各点での抗力係数の感度を示して います。このシミュレーションは、ADツール"dco"上に構築された、AD化されたOpenFOAMにより実行されました。 その表面メッシュは5.5百万セルで構成され、グラジェントベクトルは18GBを占めました(1)。
トップエンドのデスクトップマシンにおいて、通常のシミュレーションは44秒であったのに対し、 そのAD化シミュレーションは273秒掛かりました。同じマシン上で、同等のグラジェント情報を得るために 有限差分を用いたとすれば、おおよそ5年掛かると考えられます。
このようにして、グラジェント情報は今や自動車形状の最適に用いられ、その抗力を減少させる目的に 利用できるようになりました。
(1) Towara M and Naumann U (2013). A discrete adjoint model for OpenFOAM. Procedia Comp. Sci. Volume 18.
気候モデリング

図2:海底地形の変化に対する、ドレーク海峡を流れる東西海水流のMITgcmモデル感度
ADは、気候変動の理解を助け、気象予報を改善します。
図2は、海底地形の変化に対する、ドレーク海峡を流れる海水流量の感度を示します。 このシミュレーションは、スーパーコンピュータを用いた、AD化されたMIT Global Circulation Modelの 実行結果です。海洋は64,800グリッドのメッシュで構成されました(2)。
有限差分によりそのグラジェントを得るのに、1.5か月かかりました。アジョイントADによるコードは、 このグラジェントを10分未満で計算しました。
グラジェント情報は、気候予測をより精密化するために利用でき、さらにグローバルな気象、例えば そのドレーク海峡から遠く離れているにも関わらず、南太平洋の端やインドネシア海流に高い感度を もっていることの理解に役立ちます。
(2) Utke J, Naumann U, Wunsch C, Hill C, Heimbach P, Fagan M, Tallent N and Strout M. (2008). OpenAD/F: A modular, open-source tool for automatic differentiation of Fortran codes. ACM Trans. Math. Softw, 34(4) 18:1-18:36.
ファイナンス
ADおよびADDは、リアルタイムリスク管理や、xVAのような量のヘッジを可能にする複雑な金融商品の 感度を迅速に得るために、金融工学においても使用されています。
ここで、ファイナンスで用いられる典型的なコードである、モンテカルロ法と偏微分方程式に関する 論文から、幾つかの結果を示します(3)。
モンテカルロ法 | |||||
---|---|---|---|---|---|
$n$ | $f$ | cfd | AD | $\frac{\tt AD}{f}$ | $\frac{\tt cfd}{\tt AD}$ |
34 | 0.5s | 29.0s | 3.0s (2.5MB) | 6.0x | 9.7x |
62 | 0.7s | 80.9s | 5.1s (3.2MB) | 7.3x | 15.9x |
142 | 1.5s | 423.5s | 12.4s (5.1MB) | 8.3x | 34.2x |
222 | 2.3s | 1010.7s | 24.4s (7.1MB) | 10.6x | 41.4x |
偏微分方程式 | |||||
34 | 0.6s | 37.7s | 11.6s (535MB) | 19.3x | 3.3x |
62 | 1.0s | 119.5s | 18.7s (919MB) | 18.7x | 6.4x |
142 | 2.6s | 741.2s | 39s (2GB) | 15.0x | 19x |
222 | 4.1s | 1857.3s | 60s (3GB) | 14.6x | 31x |
表1:モンテカルロ法および偏微分方程式に対して、グラジェントサイズ"n"の関数として 表した必要な実行時間とメモリー
表1は、典型的なファイナンスアプリケーション(ローカルボラティリティモデルでのオプション プライシング、10Kサンプルパス/空間点および360時間ステップ)での、中心有限差分に対する、 "dco"を用いた一次のアジョイントコードの実行時間を示しています。
第2列のfはアプリケーションの通常の実行時間、cfdは中心有限差分、およびADは追加で必要な メモリー(tapeサイズ)と共にアジョイントADの実行時間を表します。この計算はラップトップで 実行したため、重要なのは実行時間の比ADf とcfdADです。これらはADが有限差分に比べ高速である ことを示しています。
ファイナンスにおいては、このような微分情報がヘッジやリスク管理において頻繁に利用されるため、 これらのグラジェントは一日に頻繁に計算が必要になります。
(3) du Toit J and Naumann U (2014). 数理ファイナンスにおける典型的な数値計算パターンへのアジョイント自動微分ツールの適用. NAG テクニカル・レポート TR3/14.
ADはコンピュータプログラムの数学的な微分を計算します。概念的にこのプロセスは直截的なものです。
- コンピュータは浮動小数点の加算、減算、乗算、除算のみを実行できる
- いかなる浮動小数点演算を行うプログラムも、特殊関数(例えばsin、cos、exp等)の 呼出しと共に、単純にこれら基本的な演算の組合せで構成されている
- これら全ての基本的な演算の微分を計算するのは容易である
- コンピュータプログラムの微分を得るために、チェインルール(合成関数の微分則) を用いることができる
プログラムコードを微分するこのプロセスは、2次、3次、4次あるいはさらに高階の導関数を生成 するのに適用することができます。そのコードは、シンポリックに(極めて低いレベルで)微分される ため、この微分は数学的に正確で、マシン精度で計算することができます。
従来、微分値の推定には有限差分("bumping"とも言われます)が用いられますが、これらと比較して、 ADは3つの明確な利点を提供します。
- 有限差分を正しく行う事が難しい場合がある:その関数に関する何らかの知識が必要な 場合が多い
- 高次の有限差分は悪化することがある:ADはいかなる次数においても正確なグラジェントを与える
- アジョイントモードのAD(詳細は「自動微分をより詳しく」を 参照してください)は有限差分よりも桁違いに高速である
ADは概念的には単純ですが、自明でないコードへ適用するには高い技術が求められます。
ADを実業務で利用する際には、コードの実行と保守が容易に行える、高性能でロバストかつ柔軟性の あるツールが必要不可欠です。さらに、外部参照ライブラリへの依存がADを不可能にすることは明らか です。なぜならADはソースコードを直に操作するからです。実業務に耐え得るADツールはこのような 依存関係を適切に処理する必要があります。(理想的には外部ライブラリのソースコードに対しても ADを適用し、完全なADソリューションを作成するなど)。
ADツール
C++/Fortran言語向けの演算オーバーロードADツールを提供します。 このツールは、数百万行の、かつ単一スレッドデスクトップから大規模スーパーコンピュータに渡る 様々なプラットフォームで実行される製品コードに対して適用されてきました。
- "dco"ツールは、NAGとRWTH Aachen大学との協力により開発され、お客様のコードへ容易に 統合できる高い柔軟性を持ちます。
- この柔軟性は、アジョイントコードのメモリー制限をほぼ任意に制御することを可能にする 観点から重要な性質です。
- それはまた、dcoアジョイント計算でGPGPUといったアクセラレータの利用を可能にします。
ADのためのNAG Fortranコンパイラ
Fortranで書かれたシミュレーションプログラムのために、NAG Fortranコンパイラは、dcoに対する プリプロセッサとしての機能を果たすように拡張されたバージョンが作られました。複雑なビルド システムへのADのシームレスな統合が容易になりました。オリジナルコードでのユーザによる修正量は、 最小限か、あるいは全く不要にすることが可能です。
計算アルゴリズムのADバージョン
NAGは、NAGライブラリに見られるような計算アルゴリズムのADバージョンを提供します。これら ADルーチンは、最大の生産性を提供できるように、dcoとの互換性を持ちますが、自作ADコードを含み いかなるADツールとの互換性を保つバージョンも提供することが出来ます。
ADを試すには
金融工学でのADの原理と、アジョイントコードにおけるメモリー問題を避けるテクニックが、 NAG テクニカル・レポート TR3/14 (3) において議論されています。そのテクニカルレポートにおいて基礎となる例題プログラムは、ご希望により 提供することが可能です。その例題プログラムには、dcoのコピーと、読者自身のマシン上で実行可能な 例題、および読者自身のコードへdcoを適用できるトライアルライセンスを含みます。