nAGでは、お客様がご自身のコードベースに、自動微分を適用する際の専門的なヘルプ、サポート、トレーニング及びコンサルティングのサービスを提供しております。自動微分の適用には、大きなメリットがある一方で、自身のコードベースへの適用やメンテナンスは簡単な事ではありません。nAGでは、これまでに数多くのお客様の自動微分の適用をお手伝いし、様々な問題タイプ、ソフトウェア環境、ハードウェアプラットフォームに適したソリューションを提供してまいりました。本サービスは、これらの実践経験と強力な技術に基づいたコンサルティングサービスです。
自動微分(Algorithmic Differentiation(また Automatic Differentiation や Computational Differentiation と呼ばれることもある))は、1次や高次の数学微分係数を計算する機能を用いて数値シミュレーションプログラムを向上させるための技術です。従来の数値微分と大きく異なり、自動微分は切り捨てを防ぐことにより、マシンの精度で勾配、ヤコビアンとヘッシアンを算出します。任意の複雑なシミュレーションのなかで個々の指示文の解析微分法を使用して行います。
自動微分は複雑さに関係なくあらゆる計算プログラムが算術演算(加算、減算、乗算、除算など)や初等関数(log, sin, cos など)を実行するという事実を利用しています。これらの演算に連鎖律(Chain Rule)を繰り返し利用することにより、任意次数の微分が自動的に計算され、実際の計算の精度で正確に算出できます。
自動微分について詳しくお知りになりたい方は、自動微分解説ページ「自動微分とは」をご覧ください。
自動微分は特に最適化、パラメータ同定、非線形方程式、微分方程式の数値積分、更にこれらを組み合わせたものに利用されています。
アジョイントモード(あるいは、リバースモード)の自動微分は、大規模な感度解析や非線形最適化において特に関心がもたれています。
何年もかかる計算を数時間で行うことが可能であり、アジョイント自動微分の技術を利用できる問題に関しては勾配の計算の速度が大幅に速くなります。
我々の世界は、ますますシミュレーションが利用されるようになっています。コンピュータプログラムはシステムの挙動をシミュレートし、その結果はビジネスの意思決定や機械の制御に利用されたり、さらなるシミュレーションに投入されたりします。そして、多くの産業では、シミュレーション値だけでなく、モデル入力に対する感度(数学的微分)も計算することが重要になってきています。
- 機械学習 ー モデル誤差の感度を用いてネットワークパラメータを適合させる
- 地震観測 ー 最小二乗法による逆時間移行(LS-RTM)のために、移行演算子の微分が必要とされる
- 災害モデリング(洪水、津波、火災) ー 都市や田舎の形状に対するシミュレーションの感度が、防御の設計に役立つ
- 金融 ー 感応度はリスクヘッジやエクスポージャーの説明に使われる
- ポートフォリオ管理 ー 市場環境の変化に対するポートフォリオの堅牢性や,下落局面での価値の喪失の速さを感応度によって示すことができる
- 空気力学(F1、自動車、航空宇宙、海洋、防衛) ー 抵抗、揚力、弾道などの形状に対する感度を用いて、車両の形状を最適化することができる
- 洪水防御や河川管理 ー 小石の大きさに対する感度から、河川経路が時間と共にどのように変化するか、またその速さを知ることができる
- 気候モデリング ー モデルの感応度から、気象パターンに新たな洞察が得られ、地域の状況がいかに早く、かつ深刻に変化し得るかが示される
自動微分(AD)、および Adjoint 自動微分(AAD)は非常に強力なテクノロジーですが、実運用水準のコードに手作業でこれを適用することは大変な作業です。それだけではなくコードの保守や更新も、より複雑になります。そのため、ほとんどの場合何らかの AD ツールが用いられます。
nAG では以下のような AD ツールをご用意しております。
(1)dco/c++
dco/c++は非常に効率的で多くの機能を提供する自動微分ツールです。本ツールは演算子オーバーロードを活用し、洗練されたAPIを提供します。これにより、ユーザはモデルやアルゴリズムを変更することなく、極めて効率的に微分の計算が可能です。また、習得が容易であるため、ユーザが自身のコードベースに自動微分を素早く適用し、ビルドやテストフレームワークに統合する事が可能です。
dco/c++の特徴
- あらゆるコードの任意の次数の導関数が計算でき、機械精度まで正確に計算できます。本ツールは感度に関するあらゆる質問への答えを提供可能します。
- 高度に最適化された内部データ構造と高度なテンプレートエンジンにより、顧客テスト及び社内テストの両方において、クラス最高のパフォーマンスを発揮します。
- ベースラインのメモリ使用量は少なく、直感的なチェックポイント・インターフェースを用いて、メモリ使用量をほぼ任意に制御・制限することができます。
- アジョイント自動微分の適用の神髄は、メモリ使用量と計算量のバランスをとることであり、ユーザーはdco/c++を用いて、とても自然な方法でこれを制御できます。
- 大手及び中堅 の銀行で、本ツールをコアとなるプライシング及びリスクライブラリに適用し、実運用で使用しています。
- 複数の異なるお客様の実運用コードで、(差分法と比較して)10倍~6000倍の計算スピードを達成した実績があります。
- チェックポイント・インターフェースにより、コードのどの部分に対しても手書きのアジョイントを指定でき、GPUとのインタフェースを可能にするなど、様々な機能を備えています。
- 並列アジョイントサポート:最新のアーキテクチャでは、並列性を効果的に利用することが重要ですが、dco/c++では、アドジョイントコードにも並列性を持たせることができます。
dco/c++の主な機能
- ユーザー定義テープコールバック(外部アジョイント)
- 生産性を重視した洗練されたインターフェイス
- 式テンプレートと高度に最適化されたテープによる超高速計算
- メモリ使用量の完全制御
- 並列計算とGPUをサポート(dco/mapとの組み合わせで)。
- ベクトルタンジェントおよびアジョイントモード
- アクティビティ解析
- スパースパターン検出
- テープ圧縮
- テープの直接操作
- アジョイントMPIサポート
これらの機能により、高度なDAG操作が可能となり、高効率なアジョイント実装を実現することができます。
dco/c++演算子オーバロードについての詳細(英国nAGサイトへのリンク dco/c++: Derivative Code by Overloading in C++)
※ 演算子のオーバーロード:
プログラム言語の演算子のオーバーロード機能により、数値演算子(+, -, /, *)を変更できるようになります。したがって通常の基本演算関数のほかに微分の値を計算できます。
(2)dco/map
dco/mapはC++11で、アクセラレータ(GPUなど)を利用できるように設計された、テープを用いないで演算子オーバーロードを行うための自動微分ツールです。 dco/map技術レポート(英国nAGサイトへのリンク)
(3)nAG ADライブラリ
nAG ADライブラリは世界最高水準のアジョイント数値・統計ソルバーです。
nAG ADライブラリの特徴
- nAG AD LibraryはnAGのADツールであるdco/c++とシームレスに利用できます。またdco/c++に限らず、他のADツールでも利用可能です。
- 有限差分を使用した場合と異なり、近似値ではなく正確な導関数を提供します。
- ADを適用するnAGライブラリユーザは、nAGの高品質なアジョイントルーチンを使用できるようになりました。ライブラリルーチンのアジョイントバージョンを書いたり、劣悪な代替品に頼る必要はありません。
- 記号的アジョイントとアルゴリズム的アジョイントは同じインターフェースで、素早く簡単に使用できます。
- nAGはdco/c++とnAG AD Libraryの両方を利用することで、単一のADソリューションを提供します。
- 内部表現(IR)を使用したルーチンコールツリーの逆順化が行えます。
- 指定された入力変数のみに関して出力変数を微分します。
- アジョイントは出力変数ごとに一度だけ解釈する必要があり、(多くの場合)出力数が入力数に対して少ない場合に計算時間を短縮します。
- アジョイントルーチンは dco/c++ の組込み関数として使用できます(C++ で sin(x) を使用するのと同様)。
- ユーザー提供関数によるルーチンのアルゴリズム的なアジョイントは、追加の開発時間なしで使用可能です。
- dco/c++を使用しないソリューションからdco/c++を使用するソリューションへのスムーズな移行が可能です。
- dco/c++で使用する場合、変数のコピーは不要(バイナリ互換性のあるデータ型使われています)です
- nAG ADライブラリは完全にドキュメント化されており、計算の専門家によりメンテナンスとサポートが行われています:必要な時に第一線のテクニカルサポートを受けることができます。
本サービスのご利用の流れは以下のようになります。
nAGの自動微分専門家が、お客様の自動微分適用に向けた技術コンサルティング(最大6人日分)を行います。これにはnAG自動微分ツールdco/c++のトレーニング及び検証用ライセンス(全機能3か月間利用可能)が含まれます。本ステップの目的は、お客様が本格的な自動微分の適用を十分検討できるようにする事です。 尚、本ステップの費用は300万円(税別)となります。
お客様がご希望いただく場合、簡易モデルによる概念実証(PoC)を行う事も可能です。(別途お見積りいたします)
一例として、デスクトップ用開発ライセンス(技術サポート(英語)込み)は40万円/年(税別)となります。
以下に、自動微分に関してよくある誤った認識についての記事をご紹介します。
- 自動微分の誤った神話1:使っているライブラリ全ての書き直しをしなければならない
- 自動微分の誤った神話2:アジョイント自動微分を使うと必ずメモリ不足になる
- 自動微分の誤った神話3:私のコードには適用できない
- 自動微分の誤った神話4:自動微分は私の他のライブラリに感染してしまう
- 自動微分の誤った神話5:自動微分を組み込んだコードのメンテナンスは大変だ
- 自動微分の誤った神話6:アジョイント自動微分は並列化を破壊する
- DekaBank 様: nAG DCO/C++ を用いた、モデリングの精度とリスク管理の改善
- Scotiabank 様: nAG ライブラリ,AD ツール,Origami,Azure を用いた、XVA の改善
- dco/c++:金融リスクマネジメントで大幅な性能向上を実現
- 動的コード生成による自動微分と CFD(数値流体力学)の融合
- 先駆的な自動微分:コード生成
- 自動微分によるラップタイムシミュレーションの最適化
- AD はどのように、リスク管理やヘッジ、計算時間の節約に役立ち、トレーディングデスクに競争力を与えることができるでしょうか?
- 自動微分を用いたベイズ推定の高速化
- 金融工学における代表的数値パターン向けのアジョイント自動微分ツールのサポート
- 自動微分による1次および2次微分としての Greeks
- GPU アクセラレータアプリケーションのアジョイント自動微分
- アジョイント法の自動微分ツールを用いた手法(ビデオ)
- LIBOR マーケットモデル最適化における自動微分(英国 nAG サイトへのリンク)
- 金融工学におけるアジョイント法(英国 nAG サイトへのリンク)
- dco/c++: C++ でのオーバーロードによる導関数コード(英国 nAG サイトへのリンク)
- テクニカル ポスター: アジョイント感度を使用した大規模な CVA ? nAG ライブラリと dco/c++ および Origami の組み合わせ(英国 nAG サイトへのリンク)
- テクニカル ポスター: C++11 向け、高性能でテープ不要のアジョイント自動微分(英国 nAG サイトへのリンク)
- テクニカル レポート: dco/c++ を使用したアジョイント流体ソルバー Tinyflow(英国 nAG サイトへのリンク)
- プレゼンテーション スライド: 二次感度: アジョイント自動微分の構築と CPU と GPU の使用(英国 nAG サイトへのリンク)
- テクニカル レポート: アジョイント自動微分を使用したCVA感度の計算(英国 nAG サイトへのリンク)
- テクニカル ポスター: 実行時からコンパイル時のアジョイントまで(英国 nAG サイトへのリンク)
- テクニカル レポート: アジョイントルーチンが必要な理由(英国 nAG サイトへのリンク)