楼主: kedemingshi
1634 35

[量化金融] 关于自动微分及其在 [推广有奖]

11
可人4 在职认证  发表于 2022-5-31 05:56:07
函数输出的导数,使用符号“c”、“v”、“w”作为补充参数:函数R2fig(double[](a,b,u,c,v,w),double cbar,double vbar,double wbar){1:double ubar=w*vbar-v*wbar;2:double bbar=a*cbar;3:double abar=b*cbar;4:return(abar,bbar,ubar);}要理解这些表达式,请关注c=a×b:函数Rfig的第一行。很明显,如果将函数φ应用于c,我们有(表示法为“c=φ(c)”,对应于从函数应用到c的导数的反向传播):“a:=φ(a×b)a=b×φ(c)=b×’c,ESAIM:PROCEEDINGS AND SURVEYS 7这正是函数R2fig的第三行所写的表达式。这可以通过调用R2fig三次来计算雅可比矩阵的m=3行,每次计算一行。(RfigState,c,v,w)=Rfig(a,b,u);(j11,j21,j31)=R2fig(RfigState,1,0,0);(j12,j22,j32)=R2fig(RfigState,0,1,0);(j13,j23,j33)=R2fig(RfigState,0,0,1);尽管计算梯度的低开销(就操作计数而言)使得该技术非常有用,但反向AD存在各种技术难题。由于导数相对于原始计算向后传播,可能需要保留原始值,从而增加存储负担。原始计算中的扇出对应于线性基元运算vv型=[u] ,这意味着伴随计算必须乘以这个小矩阵的转置,\'u=[1 1]\'\'v\'\'v= “v+”v,对应于简单加法。换言之,原始计算图中的扇出导致反向伴随计算图中的附加结果。

12
何人来此 在职认证  发表于 2022-5-31 05:56:09
这些转换的复杂性使得通过代码的源代码到源代码的转换来高效实现变得非常复杂。最流行的实现策略是实际存储数据流图,然后以反向顺序对其进行回溯,这会带来相当大的恒定因子开销。虽然这种转换是在AD社区中制定的,并且是由[39]和其他人[19]自动完成的,但在控制理论领域,它被称为Pontryagin MaximumPrinciple[32],在数学物理领域,它被称为伴随计算,在机器学习领域,它被称为反向传播[36],尽管不是自动完成的,在微分几何中,它被称为拉回。前向广告和反向广告的发现历史非常迷人,有许多才华横溢、五彩缤纷的玩家。前者由【24】讨论,后者在一定程度上由【19】讨论。2.4。实用的AD系统和应用程序最有用的复杂数值例程并不像静态数据流图那么简单,AD复杂性的一部分是处理控制。AD的其他“模式”也可用,用于计算高阶导数[25,30],使用叠加切线或余切将多个类似导数计算矢量化,称为向量模式,以节省存储,同时仍能高效地计算梯度[18,37],以及许多其他模式。另一个实质性的工作是由于采用精确导数和数值近似来实现不会相互转换这一事实而产生的,这是循环迭代收敛的一个特别困难的问题。此外,在积极的实施技术方面已经做了更多的工作,在TAPENADE【21、28、29】、ADIFOR【7】等积极的系统中投入了巨大的力量。

13
kedemingshi 在职认证  发表于 2022-5-31 05:56:12
目前,AD不仅在金融[6]和科学计算(如气候科学[22]),而且在机器学习[3、13、15]中有着重要的应用。广告领域很活跃,欢迎新来者。AD实施和文献目录保存在社区门户网站上,http://www.autodiff.org/.2.5.在考虑广告时,区分概念的层次结构可能会有所帮助,它跨越了自动性和普遍性的范围。AD类型I:一种有效计算由一组方程指定的函数导数的微积分。AD类型II:手动应用的规则,通过机械方式将实现数字功能的计算机程序转换为有效计算某些导数的程序。对于我们的示例,增益不是很大,因为正向计算需要3+1+2=6(参见Ffig的第2、4和5行)而反向计算需要3+2(即,函数R2fig中的所有计算),代价是原始表达式中涉及的所有六个变量的RfigState存储)。但对于更复杂的表达式,更明显的好处是使用了backardimplementation,但代价是存储量增加。8 ESAIM:会议记录和调查SAD类型III:一种计算机程序,可自动将指定数值函数的输入计算机程序转换为也能有效计算导数的计算机程序。AD类型IV:包含在编写数值算法的语言中的AD运算符,它们可以应用于使用它们的过程。本文作者与杰弗里·马克·西斯金德(JeffreyMarkSiskind)合作完成的广告研究项目旨在使IV型广告成为现实,并使其快速、稳健、通用和方便[31]。

14
nandehutu2022 在职认证  发表于 2022-5-31 05:56:15
因此,这些工作不仅关注于适合数学分析和集成到编译器中的AD过程的形式化,还关注于使AD更具通用性和健壮性,允许AD操作符以嵌套方式用作一级操作符,从而扩大了涉及可方便快捷地编写的派生的程序的范围[4,5,33,34]。我们还探索了将IV型AD集成到激进编译器中所能达到的速度极限[38]。我们希望AD对所有数字程序员来说都像现在的线性代数微例程库一样无处不在,并且优化编译器在未来将以目前支持三角函数或循环的相同方式支持AD。确认。这项工作由爱尔兰科学基金会于年9月拨款资助。1/I2637。感谢合作者杰弗里·马克·西斯金德(JeffreyMarkSiskind)和阿蒂利姆·古恩斯·贝丁(AtilimGunes-Baydin)进行了许多有益的讨论。S’ebastien Geeraert3.1对伴随算法微分(AAD)的实际实现。本研究的目的是展示一种实现伴随算法微分(AAD)的方法。AAD是一种以自动且高效的方式产生精确计算导数的方法。通过使用AAD的路径微分,我们可以计算价格的蒙特卡罗敏感性:如果金融合同的支付值由p(θ)=E[f(θ,W)]给出,其中θ是一个参数,W是一个随机变量,我们可以通过p(θ)=E来估计其导数fθ(θ,W)≈MMXi=1fθ(θ,Wi),通过交换差异和期望。

15
大多数88 在职认证  发表于 2022-5-31 05:56:20
AAD的优势在于计算时间不取决于灵敏度的数量:通过反向区分操作(从最终计算开始,回到初始计算),我们可以逐步计算每个中间结果对最终输出的影响。因此,我们可以一次计算每个灵敏度。在现有的自动差异库中,使用了两种方法:操作符重载(如ADOL-C、Adept)和源代码转换(如Tapenade)。源代码转换包括在编译之前自动在源代码中添加用于计算导数的指令。它需要一个能够读取现有源代码并理解它的工具(就像编译器一样)。因此,这种方法很难实现。它通常无法处理语言的高级特性(如面向对象编程)。使用操作符重载要容易得多。操作符重载是一些编程语言的一个特性,允许重新定义基本操作符(如+、*、/)。例如,如果源代码中有一个加法a+b,它将对参数a和b调用+(由程序员编写)的自定义实现,而不是执行传统的加法。在AAD的情况下,我们重新定义了基本运算符,以处理衍生工具的计算。它允许快速将AAD应用于现有代码,只需对代码进行很少的修改。与源代码转换相比,编译器无法很好地优化运算符重载,并且可能会在执行过程中增加一些开销。因此,它被认为效率较低。ESAIM:会议记录和调查9为了简单起见,我们选择在C++中使用操作符重载。

16
nandehutu2022 在职认证  发表于 2022-5-31 05:56:23
我们实现的特点是,它专注于蒙特卡罗计算,并且无论是在CPU(使用OpenMP)上还是在GPU(使用CUDA)上,它都是高效并行的。3.2。AAD原理和基本实现我们将计算建模为由基本函数fi产生的n个中间结果xi的序列:xi=fi(x,…,xi-1) 对于i=1,n、 为了计算输出xnw相对于输入x的导数,有两种可能的微分模式:o切线模式:我们将变量x的切线定义为˙x=x个x、 我们知道˙x=x个x=1,因此我们可以使用链式法则计算i=1到i=n的切线:˙xi=xix个=xfi(x,…,xi-1) =我-1Xj=1金融机构xj公司xj公司x=i-1Xj=1金融机构xj˙xj。最后,灵敏度由切线˙xn给出=xn公司x、 o伴随模式:我们将变量x的伴随定义为x=xn公司x、 我们知道xn=xn公司xn=1,因此我们可以使用链式规则(xi)计算从i=n到i=1的伴随词=xn公司xi=nXj=i+1xn公司xj公司fj公司xi=nXj=i+1xjfj公司xi最后,灵敏度由伴随x给出=xn公司x、 AAD使用伴随模式:这样,如果有多个输入,所有感知都会立即计算(它们由相应的伴随给出)。这就是为什么在我们想要计算对许多输入的敏感性的情况下使用AAD特别有趣的原因。AAD的缺点是,由于导数是反向计算的,所以在开始差异化之前,必须先获得xim的值。因此,要在实践中应用AAD,我们必须首先进行前向扫描,从开始到结束计算并存储每个中间结果XI。然后我们可以进行反向扫描,从末端到开始计算坐标xi。这里是结果算法:对于i从1到nxi=fi(x。

17
大多数88 在职认证  发表于 2022-5-31 05:56:26
xi-1) 对于i<n,xi=0;对于i从n到1,xn=1对于j从1到i- 1xj+=xi·金融机构xj使用操作符重载很容易实现:函数是基本操作符,重载后可以在正向和反向扫描期间计算和存储相关量。要将AD应用于蒙特卡罗计算,我们必须使用不同的输入(随机变量)对同一计算进行多次区分。因此,我们将上述算法应用于向量:向量的每个分量对应于蒙特卡罗的一条路径。在计算结束时,我们可以对任何伴随的成分进行平均,以获得相应的灵敏度。我们提出了两种彼此非常接近的算法版本:oCPU版本,重载操作符用于循环。为了并行化这个版本,我们使用OpenMP框架,该框架允许在可用的CPU核之间轻松划分for循环的蒙特卡罗路径。10 ESAIM:程序和调查oGPU版本,过载的操作员调用GPU函数。这些函数(也称为内核)在CUDA中实现,CUDA是Nvidia图形卡的专有框架。我们需要小心避免无用的计算。有些计算在所有MonteCarlo路径上都是相同的:如果一个计算不依赖于随机变量(直接或间接),它总是具有相同的输入和输出。因此,为了提高效率,我们需要以标量方式进行这些计算。3.3。优化当原始计算的很大一部分是确定性的时,就会出现效率问题。在这种情况下,正向扫描成本很低,因为几乎所有的计算都是标量的。然而,反向扫描非常昂贵,因为所有的伴随计算都是向量的(所有中间伴随间接地依赖于随机变量)。

18
mingdashike22 在职认证  发表于 2022-5-31 05:56:29
例如,对对数正态基础的调用可能会发生这种情况,如图3(左)所示。如果确定性漂移和波动性涉及大量计算,则会有大量相应的伴随计算(因为它们是矢量的,所以成本很高)。我们可以通过在反向扫描的中间计算中间均值来解决这个问题。如果我们将计算划分为f(θ,W)=g(h(θ),W),其中h=(h,…,hq)是确定性部分,g是非确定性部分,则灵敏度由mmxi=1给出fθ(θ,Wi)=MMXi=1qXj=1g级hj(h(θ),Wi)hj公司θ(θ)=qXj=1MMXi=1g级hj(h(θ),Wi)!hj公司θ(θ)。实际上,这意味着在反向扫描期间,我们可以在确定性和非确定性部分之间暂停计算,并用其(标量)平均值替换每个(向量)伴随。因此,当我们恢复反向扫描时,后续的计算是标量的。电话优化的效果如图3(右)所示。然而,请注意,这个技巧之所以有效,是因为取导数的平均值是一个线性运算。它不能应用于方差计算。但是,如果我们想估计灵敏度之外的方差,我们可以将蒙特卡罗路径分成几个组,并对每个组应用技巧来计算灵敏度的估计;然后,可以使用在不同组上获得的不同灵敏度样本估计方差。为了提高并行化,我们并行地进行独立计算。如果其中一个的输入不依赖于另一个的输出,则两个计算是独立的。因此,计算分为按时间顺序排列的层:每一层只能在前一层完成时开始。

19
何人来此 在职认证  发表于 2022-5-31 05:56:32
在一个层内,一切都可以并行计算。当一个中间结果被许多计算用作输入时,在反向扫描期间,相应的伴随必须更新多次。但是,由于伴随更新读取并修改伴随,同一变量上的两个伴随更新不能并行发生(它们必须在不同的层中):如果伴随更新是天真地完成的(即,通过依次添加更新),层的数量将相对于伴随更新的数量线性增长,从而打破了并行化。但结果伴随只是许多独立贡献的总和。因此,我们可以使用分而治之的方法:大和可以计算为两个较小的独立子和的相加。因此,通过按二的幂聚合关联更新,层的数量仅以对数增长。这一聚合过程如图4所示。最后,我们还可以利用模型的特殊性和收益。例如,对于CVA计算,Payoff可以被视为简单得多的Payoff的总和。因此,我们可以用许多小的Aadw替换一个大的Aadw,从而提高并行性。此外,我们可以在GPU版本中使workon CPU(将计算图形划分为层的依赖关系分析)与onGPU(中间结果和伴随的实际计算)的工作重叠:当GPU在一个AAD上计算结果时,CPU在下一个AAD上工作。ESAIM:会议记录和调查11f  μ + ∑W  ∑W   W    ∑μ …  …  …  …  θ1.θ2.θk-1.θk …g h   f  μ + ∑W  ∑W   W    ∑μ …  …  …  …  θ1.θ2.θk-1.θk …图3:。对数正态基础调用的计算图,具有确定性漂移u(θ)和确定性波动率∑(θ)。

20
mingdashike22 在职认证  发表于 2022-5-31 05:56:35
付款形式为f(θ,W)=(exp(u(θ)+∑(θ)W)- K) +其中θ表示输入,W是标准高斯分布。每个节点对应于前向扫描中的中间结果。每个向下箭头(inred)对应一个伴随更新。实线表示矢量计算,虚线表示标量计算。在双圆节点处计算伴随平均值。在左侧(无优化),在反向扫描结束时计算平均值,因此反向扫描完全是矢量的。在右侧(经过优化),均值是在反向扫描的中间计算的,因此反向扫描主要是标量扫描(这要便宜得多)。这里,非确定性部分是g(h,W)=(exp(h+hW)- K) +且确定性部分为h(θ)=(u(θ),∑(θ))。3.4。结果在CVA的一个例子中,我们计算了200个灵敏度和5000条路径,我们得到了以下计时:CPU GPUFinite差异271 s 29 sAAD 9.1 s 2.4我们看到,当有许多灵敏度需要计算时,AAD与有限的差异相比可以获得有趣的收益:CPU上的系数为30,GPU上的系数为12。这表明,该方法可以在CPU和GPU上高效并行化,特别是如果我们利用模型和Payoff的特殊性。然而,AAD不能直接应用于非光滑支付。这就是为什么[16]提出了振动蒙特卡罗方法,该方法包括在Euler格式的最后一步将似然比方法应用于条件期望。4.Olivier Pironnau根据与Gilles Pag\'es和Guillaume Sall12 ESAIM的联合研究,《定量融资中的第二敏感性:会议记录和调查》3 2 1 1a 4 4 6 6 2 1 5 5 5 6 7 8 91 1a 6 1 6++6 6 7 3 2 4 4 5 5图4。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-10 17:55