XVA(CVAなど)の評価では、モンテカルロ法で多数の感応度を求めます。クオンツやリスク管理の担当者、評価システムの開発者は、感応度の本数が増えると評価の計算時間が膨らむ問題に当たります。
感応度が増えると重くなる理由
バンプ(有限差分)は、入力を 1 つずつ少しだけ動かして評価をやり直し、価格の変化を動かした幅で割る方法です。感応度(デルタやベガなどのグリークス)を 1 本求めるたびに再計算が 1 回増えるため、手間は感応度の本数に比例します1。入力 を だけ動かす片側のバンプは、次の式です2。感応度の定義はグリークスで扱います。
ポートフォリオの 1 回の評価に 1 分かかり、金利カーブの点やボラティリティの点など、求めたい感応度が 1,000 本ある架空の例で考えます。片側のバンプは、元の評価 1 回と、動かした評価 1,000 回の合計 1,001 回で、1,001 分(約 16.7 時間)かかります。後退モードの自動微分は、理論上は元の評価の 5 倍未満(5 分未満)で、1,000 本すべてを求められます。ただし、これは出力が価格 1 つのときの話で、メモリなどの費用は別にかかります。
| 感応度の本数 | バンプ(片側)の評価回数 | バンプの所要時間(分) | 後退モードの所要時間(分、理論上の上限) |
|---|---|---|---|
| 10 | 11 | 11 | 5 未満 |
| 100 | 101 | 101 | 5 未満 |
| 1,000 | 1,001 | 1,001 | 5 未満 |
本数のほかに、バンプには幅の選び方の難しさがあります。幅は入力の値によって適切な大きさが変わり、精度と安定のつり合いを取るのが簡単ではありません3。幅が大きすぎると近似の誤差が大きくなり、ペイオフが不連続なときに幅が小さすぎると、推定値のばらつきが大きくなります2。モンテカルロ法では、バンプの前後で同じ乱数を使い、ばらつきを抑えます2。中心差分は精度が上がる一方、感応度 1 本あたりの再計算が 2 回になります2。
相関では、本数の増え方がさらに速くなります。確率的な要因が多数あるとき、組み合わせの数は要因の数の 2 乗に比例して増えるため、すべてのペアの相関の感応度をバンプで求めるのは、計算が重すぎて現実的でないことが多くなります1。
なお、ここでのバンプの差分近似は、偏微分方程式を格子で解く有限差分法とは別の使い方です。
前進モードと後退(随伴)モード
自動微分は、プログラムで書かれた計算の導関数を、連鎖律で求める方法です。どんなに複雑なプログラムも、足し算、掛け算、 などの基本の演算の合成で、基本の演算の偏導関数は分かっているため、全体の導関数を組み立てられます4。
計算の流れを入力 から 、 を経て出力 に届くものとします。 は価格のように 1 つの数、 は感応度を求めたい入力の並びです。 などは、入力が複数のときは行列(ヤコビ行列)です。前進(接線線形)モードは、計算と同じ向きに、入力の動き が出力へ伝わる量を順に求めます5。
に与えられるのは入力 1 つ分の方向なので、 本の感応度には、前進の計算が 回要ります5。
後退(随伴)モードは、出力から入力へ向かって逆向きに計算します。出力の随伴 を 1 とおき、各変数の随伴 などを、行列の転置を使って次のように求めます6。
の各成分が、出力 の各入力への感応度です。 から始めた 1 回の逆向きの計算で、 本すべてが求まります6。
後退モードが向くのは、感応度を知りたい出力が少なく、入力が多いときです。前進モードは逆に、入力が少なく出力が多いときに向きます4。出力がポートフォリオの価値 1 つで、入力が市場データやモデルのパラメータ数百本という形には、後退モードが向きます。後退モードを計算プログラム全体に当てはめる手法が、AAD(随伴自動微分)です7。
後退モードで 3 入力の感応度を求める
入力 、、 から、次の 3 段で出力 を求める計算の架空の例で考えます。
前進の計算(元の評価)で、途中の値と出力は次のとおりです。
| 段 | 計算 | 値 |
|---|---|---|
| 6 | ||
| 7 | ||
| 49 |
後退の計算は、 から始めて逆の順に進みます。各段の偏導関数は、前進で求めた途中の値(、、)から決まります。
| 随伴 | 計算 | 値 |
|---|---|---|
| 14 | ||
| 14 | ||
| 14 | ||
| 42 | ||
| 28 |
後退の 1 回で、、、 が同時に求まります。式を直接微分すると、 より、 などとなり、同じ値です。前進モードなら、入力 3 つに対して 3 回の計算が要ります。入力が 3 本なら、バンプも元の評価と合わせて 4 回で済みます。回数の差が大きく開くのは、感応度が 1,000 本の例のように本数が多いときです。
幅 0.001 の片側のバンプと比べると、次のとおりです。バンプの値が真の値より大きいのは、幅による近似の誤差です。
| 入力 | 後退モード | バンプ(片側、幅 0.001) | 差 |
|---|---|---|---|
| 42 | 42.009 | 0.009 | |
| 28 | 28.004 | 0.004 | |
| 14 | 14.001 | 0.001 |
- AAD
- バンプ(片側(本数 + 1 回))
3 入力の例 y = (x₁x₂ + x₃)²(x₁ = 2、x₂ = 3、x₃ = 1、y = 49)の微分(差はバンプ − 後退モード)
| 入力 | 後退モード | バンプ | 差 |
|---|---|---|---|
| x₁ | 42.0000 | 42.0090 | 0.009 |
| x₂ | 28.0000 | 28.0040 | 0.004 |
| x₃ | 14.0000 | 14.0010 | 0.001 |
計算の回数: 後退モード 1 回、前進モード 3 回、バンプ 4 回(元の評価を含めて)。
- バンプの所要時間
- 16.7 時間
- AAD の所要時間(理論上は元の評価の 5 倍未満)
- 4.0 分
- バンプ ÷ AAD(何倍速いか)
- 250.3
- バンプの評価回数
- 1,001
- AAD のほうが速くなる最小の感応度の本数
- 4
単純化している点
- 所要時間は、元の評価 1 回の時間に、評価回数または倍率を掛けた単純な見積もりです。実際の AAD の時間は、モデル、商品、実装で変わります。
- AAD の倍率は、理論上は元の計算の 5 倍未満とされます(入力の本数によらない)。記事で紹介する例では 4 倍以内でした。メモリの費用は含みません。
- バンプは、片側が元の評価 1 回に動かした評価を本数分、中心が 1 本あたり 2 回です。モンテカルロ法で同じ乱数を使う工夫や、評価の並列化は考えません。
- 3 入力の例は、後退モードの手順を式で追える小さな計算です。後退モードは前進の途中の値を使って逆の順に随伴を求め、1 回で 3 本の微分が出ます。バンプの差は、幅による近似の誤差で、y が入力の 2 次式のため、片側では幅に比例し、中心では 0 になります。
このシミュレーターは学習のために単純化した計算で、実際の取引の評価やリスク管理には使えません。(免責事項)
シミュレーターの説明
求めたい感応度の本数、元の評価 1 回の時間、AAD の所要時間の倍率を動かして、バンプと AAD の所要時間を比べます。初期値は 1,000 本、1 回 1 分で、バンプの例と同じです。片側のバンプは 1,001 回、16.7 時間かかります。AAD は倍率を 4 倍とすると 4 分で、本数を増やしても変わりません。バンプの所要時間は 250.3 倍です。グラフの縦軸はバンプの 1,001 分に合わせるため、AAD の 4 分は 0 に近い平らな線に見えます。片側のバンプが AAD より遅くなるのは、倍率 4 のとき 4 本からで、中心差分に替えると 3 本からです。グラフの下の表は、この節の 3 入力の例の微分で、後退モードの 1 回の計算が 42、28、14 を返し、幅 0.001 の片側のバンプとの差が 0.009、0.004、0.001 になります。中心差分に替えると、この例は入力の 2 次式のため差が 0 になります。幅を 10⁻⁶ まで小さくすると、片側の差は幅に比例して 0.000009 まで小さくなります。
計算コスト、メモリ、精度
後退モードの計算量は、元の計算の 5 倍未満という理論の結果があり、入力の本数に依りません。前進モードの計算量は、入力の本数に比例して増えます4。相関の感応度の例でも、要因の数やペアの数によらず、価格を 1 回求める手間の 4 倍以内に収まっています8。
ただし、後退モードが 1 回で返すのは、出力 1 つの感応度です。感応度を知りたい出力が多いときは、前進モードのほうが少ない追加の手間で求められます9。
メモリについては、後退の計算で、前進で求めた途中の値(上の例の など)を使います。経路ごとに計算するモンテカルロ法では、保存するのは今の経路の値だけなので、メモリは大きな負担にならないと説明されています10。大きな評価ライブラリでは、メモリの管理と、チェックポインティングなどの技術が役に立つとされています11。
精度は、自動微分がプログラムとして書かれた計算の導関数を機械精度の範囲で厳密に返すのに対し、バンプは近似の誤差を含みます4。上の例のバンプの差 0.009 が、幅を 0.001 にしても残る誤差です。ただし、計算そのものが真の感応度と合っているかは別の問題です。たとえば不連続なペイオフは、経路ごとにペイオフを微分する方法(パスワイズ法)をそのままは使えません。
深掘り確率微分方程式の経路での随伴と計算量
使われる場面
グリークスでは、LIBOR マーケット・モデルのスワップションのデルタとベガに、後退モードを使った 2006 年の研究があり、Homescu は先駆的な論文と位置づけています。15 本のスワップションのポートフォリオでは、前進モードの自動微分がバンプの約 10 倍の効率で、後退モードは期間数 80 のとき、前進モードに比べ、デルタだけで 5 倍、デルタとベガで 25 倍の効率でした14。Homescu は同じ箇所で、後退モードが前進モードに比べて費用を「桁違い」に減らしたとも書いており、5 倍や 25 倍という数字とは食い違って読めます。どちらが正確かは、紹介の文からは決まりません。この研究は、経路ごとにペイオフを入力で微分して平均するパスワイズ法と組み合わせています。
相関の感応度では、ガウシアン・コピュラで作ったバスケットの評価に使い、バスケットのデフォルト・オプションの数値の試験で、要因の数によらず価格の 4 倍以内で、すべてのペアの相関の感応度が求まっています8。参照する企業(名前)が 20 社のときバンプの約 100 倍、40 社のとき約 500 倍の速さでした15。
CVA の感応度では、2011 年の論文の例があります。コモディティの 5 本のスワップ、期間 5 年のポートフォリオで、CVA の感応度は 600 本を超えました。CVA を 1 回評価するのに 10 秒かかる設定で、後退モードの自動微分は全感応度を 40 秒未満(評価の 4 倍未満)で求め、バンプ(有限差分)は約 1 時間 40 分を要しました16。
キャリブレーションの目的関数(モデルの価格と市場の価格の差の 2 乗和)の勾配には、各価格のパラメータへの感応度が現れ、随伴の手順で求められます17。2009 年の論文の例では、モンテカルロ法による対数正規の分散のモデルのキャリブレーションで、勾配を有限差分で求めると 3 時間を超えた計算が、随伴を使うと 10 分未満になりました18。手順はキャリブレーションで扱います。
導入の難しさと前提が崩れる場面
パスワイズ法は、経路ごとに、ペイオフを入力で微分して平均する方法です。ペイオフと、経路を作る式の係数が、連続で区分的に微分できることが条件で、不連続なペイオフはそのままは扱えません21。デジタル・オプションの近似、条件付き期待値でペイオフをなめらかにする方法、尤度比法(ペイオフでなく確率密度を入力で微分する方法)との組み合わせなどの対処があります22。バリア・オプションのように、一定の水準を超えたかで支払いが変わる商品は、この問題に当たります。
実装では、連続の式から導関数の式を作ってから離散化する方法と、離散化した計算を微分する方法があります。後者のほうが、作り方が系統的で、自動微分のツールで開発期間を短くできるため、多くの場合に好まれます23。ツールには、元のコードから感応度も求めるコードを生成する方式と、値と感応度を組にした型で演算を置き換える方式があります24。実装の確認には、バンプの勾配と比べる方法があり、前進モードと後退モードの勾配が機械精度の範囲で一致することも確かめられます19。大きな評価ライブラリでは、メモリの管理も役に立つとされます。
AAD が速くするのは、モデルの中の感応度の計算です。オプションの価格モデルの選び方に不確かさがあると、ポートフォリオの評価にモデル・リスクが生じうるとされます25。
注
-
Capriotti and Giles, "Fast Correlation Greeks by Adjoint Algorithmic Differentiation"(arXiv、2010 年)の冒頭の 2 段落。バンプの手間は感応度の本数に比例し、相関の全ペアでは要因の数の 2 乗に比例して増えるとしています。 ↩ ↩2
-
Giles, "Advanced Monte Carlo Methods: Computing Greeks"(Oxford University、講義資料)の 5〜6 ページ("Finite difference sensitivities")。差分の式と手間、幅の大小による誤差とばらつき、同じ乱数の使用を述べています。 ↩ ↩2 ↩3 ↩4
-
Homescu, "Adjoints and automatic (algorithmic) differentiation in computational finance"(arXiv、2011 年)の 4 ページ。有限差分の幅は入力の値で変わり、精度と安定のつり合いを取る幅の選び方が難しいとしています。 ↩
-
Homescu(arXiv、2011 年)の 3 ページ(1 節 Introduction)。連鎖律、後退モードの手間が 5 倍未満(Griewank と Walther の理論の結果として紹介)、各モードの向き不向き、機械精度と打ち切り誤差を述べています。 ↩ ↩2 ↩3 ↩4
-
Homescu(arXiv、2011 年)の 4〜6 ページ(2 節)。前進(接線線形)モードの式と、入力の方向ごとに 1 回の計算が要ること。記号は Homescu の記法で、Z、A、B、Y の 3 段の例です。 ↩ ↩2
-
Homescu(arXiv、2011 年)の 4〜6 ページ(2.1、2.2)。後退(随伴)モードの式。転置した行列で逆の順に求め、 から 1 回で全感応度が求まります。 ↩ ↩2
-
Capriotti and Giles(arXiv、2010 年)の冒頭の 5 段落目。随伴の実装は AAD というプログラミング技法の例で、数値アルゴリズム一般の感応度の計算に使えるとしています。 ↩
-
Capriotti and Giles(arXiv、2010 年)の要旨。バスケットのモンテカルロの評価とポートフォリオ・デフォルト・オプションの試験で、すべてのペアの相関の感応度が価格を求める手間の 4 倍以内で求まるとしています。 ↩ ↩2
-
Giles(Oxford University、講義資料)の 27 ページ("Adjoint approach")。随伴法は 1 つの出力の感応度だけを与え、前進法は複数の出力の感応度を少ない追加の手間で与えます。 ↩
-
Giles(Oxford University、講義資料)の 25 ページ("Adjoint approach")。データは今の経路の分だけを保存すればよいので、メモリの要求は大きくないとしています。 ↩
-
Homescu(arXiv、2011 年)の 19 ページ(9 節)。評価ライブラリの複雑さのため、自動微分のツール、メモリの管理、チェックポインティングなどの技術が役に立つとしています。 ↩
-
Giles(Oxford University、講義資料)の 23〜24 ページ("Adjoint approach")。漸化式、、、1 歩あたり前進 、後退 。、 は Giles の記号です。 ↩ ↩2
-
Giles(Oxford University、講義資料)の 26〜27 ページ("Adjoint approach")。 はパラメータごとに異なり は共通なので、後退は (パラメータ数)です。 ↩
-
Homescu(arXiv、2011 年)の 16 ページ(8.1 節)。Giles と Glasserman の 2006 年の論文の紹介で、約 10 倍、5 倍、25 倍の記述と、同じ段落の "several orders of magnitude" の記述があります。 ↩
-
Homescu(arXiv、2011 年)の 17 ページ(8.1 節)。バスケットのデフォルト・オプションで、バンプに比べ 20 名で約 100 倍、40 名で約 500 倍の速さとあります。 ↩
-
Homescu(arXiv、2011 年)の 17 ページ(8.1 節)。Capriotti、Lee、Peacock の 2011 年の論文の紹介で、後退モード 40 秒未満、有限差分は約 1 時間 40 分とあります。 ↩
-
Homescu(arXiv、2011 年)の 16 ページ(7 節)。目的関数 の勾配に価格の感応度が現れ、随伴で求められます。 ↩
-
Homescu(arXiv、2011 年)の 19 ページ(8.2 節)。Kaebe、Maruhn、Sachs の 2009 年の論文の紹介で、3 時間超と 10 分未満の比較があります。連続の式から随伴を作る方法(ContAdj)です。 ↩
-
Homescu(arXiv、2011 年)の 6 ページ(2.3 節)。自動微分の勾配を有限差分の勾配と比べること、前進と後退の勾配が機械精度で同一と期待されること。 ↩ ↩2
-
Homescu(arXiv、2011 年)の 19〜20 ページ(9.1 節)。2010 年の Baxter の発表の紹介で、各ルーチンを計算の関数と随伴の関数で表し、逆の順に呼ぶ例があります。 ↩
-
Giles(Oxford University、講義資料)の 11 ページ("Pathwise sensitivities")。連続で区分的に微分できるペイオフと係数が条件で、不連続なペイオフは扱えません。 ↩
-
Giles(Oxford University、講義資料)の 20〜21 ページ("Discontinuous payoffs")。デジタルの区分線形の近似、条件付き期待値、Vibrato Monte Carlo。バリアは条件付き期待値の例です。 ↩
-
Homescu(arXiv、2011 年)の 3 ページ(1 節)。連続の随伴と離散の随伴の呼び方、離散の随伴が系統的で開発期間を減らせるため好まれること。 ↩
-
Giles(Oxford University、講義資料)の 19 ページ("Automatic Differentiation")。ソースコードから新しいコードを生成する方式と、値と感応度の組の型で演算を再定義する方式(演算子のオーバーロード)。 ↩
-
Cont, "Model uncertainty and its impact on the pricing of derivative instruments"(Newton Institute のプレプリント)の要旨。オプションの価格モデルの選び方の不確かさが、オプションのポートフォリオの評価の「モデル・リスク」につながりうるとしています。 ↩