神奇的AAD:跨域金融和人工智能

在"化曲为直の神奇"介绍了导数, 导数的求解与最值有着千丝万缕的关系, 最著名的就是费马引理。 这让导数在机器学习风险最小极为有用。

引言

在金融领域也讲究风险最小。在这个方面金融和机器学习有着非常相似的地方, 机器学习里面有经验/结构风险最小, 同时又告诉我们天下没有免费的午餐(NFL)。

在金融领域有基于市场效率原理的套利, 同时又有无套利原理。 都是矛盾的统一体。 同样导数在衍生品定价, 组合优化等多方面也极其有用。

不仅仅如此, 在理解风险的传播, 机器学习和金融领域都用到了图结构。 在机器学习领域有著名的贝叶斯网络和概率图模型。

而在金融领域同样用到了图, 著名的网格树方法。

不仅仅如此, 在具体求解上面, 都用到了蒙特卡罗方法和差分计算的技术。 本质上, 蒙特卡罗估算了积分,是积分的概率求解,背后有大数定理的支持,朝大的方向发展。

而差分计算估算了微分,背后有极限的支持, 朝小的方向走。

本质上,求解积分和求解微分区别不大, 但是在计算机时代, 往大的方向求解,就需要计算资源,需要内存,需要积累时间。 而往小的方向求解,就需要计算精度,需要迭代时间。 一个可以并发用空间换时间, 一个可以迭代用时间换空间。 按祖传的中庸之道,最好用的,往往是两者兼顾的改进。

胡扯一下

大名鼎鼎的最后一个数学全才庞加莱有个博士学生叫Louis Bachelier,虽然导师牛到不行不行的, 但Louis建树不多。 大概120年前, 那时候巴黎交易所已经运行了近180年, Louis Bachelier无意关注了一下巴黎交易所的股价变化, 然后觉得股价的变化和他正在做的研究, 布朗运动, 性质非常相似。 于是就用布朗运动讨论了一下股价变动,从此开启了一个新的时代,于是不是很成功的数学家Louis成为金融数学的先驱。

一方面, 跨期价格变化需要连续利率。 这是一个指数趋势。

另一方面, 波动是符合布朗运动的。

两者的叠加,带来了几何布朗运动(geometric Brownian motion (GBM) )

而几何布朗运动的数学描述刚好是随机微分方程:

它的解析解(伊藤积分)是

到了这里,如果针对期权则,则要再进一步。因为期权的价格,不仅跟股价S相关, 而且跟时间相关。 所以说期权的价格C是S和时间t的联合函数,其中S本身又是时间的函数C=C(S, t)。 这就需要用到伊藤引理了。

所以期权的价格也可以类别得到, 根据几何布朗运动描述的股价, 再根据伊藤引理就得到期权价格。

再往下可以无风险投资组合或者Delta对冲(组合delta中性)的假设下获得无风险收益,从而引入无风险收益r。

再往下推导就是著名的Black-Scholes BS模型了。

由于Merton对跨期资产定价模型(Intertemporal Capital Asset Pricing Model)进行了很好定义。 也称为Black-Scholes-Merton模型。

从上述过程可以看到, 求偏导数、偏微分在这些跨期资产定价模型中必不可少。 从2006年,Giles和Glasserman利用AAD算法进行快速求解偏微分计算以来, 在金融领域的作用越来越大。 而在人工智能机器学习相关领域,早在1977年就在视觉领域应用了。 但是到深度学习的爆发,让AAD变得更为火爆通用。

AAD是什么?

常见的求偏导数方法有4种。

1) 手动推导: 部分场景下手动推导很快, 但部分场景难以推导。但是每次要重新编码, 要重复工作。

2)有限差分(finite differentiation): 容易实现,但受限于浮点数精度,和高维计算量大的问题。

3)符号差分(symbolic differentiation):精确,但是对于内存要求和无限循环的场景不适用,会出现表达式组合爆炸(expression swell)的情况。例如大量连乘,导数符合就以平方项增加,如果二次偏导几乎难以想象的复杂:

4)自动差分:准确高效,但是代码实现有难度,并且实现效率也各异。一般有两种模式, 前向模式(又叫切线模式 Tangent)和后向模式(又叫伴随模式 Adjoint)

而AAD就是第4种自动差分(Automatic differentiation)或者算法差分(Algorithmic differentiation)中的一种。 叫伴随式自动差分(Adjoint Automatic Differentiation) 。也就是说AAD是差分计算的好手!这就是为什么它在金融和机器学习等领域受到重视, 慢慢在两个领域中凸现出来。

首先就速度比较来看, 自动差分的两种模式(前向和反向)都比有限差分方法要快。

就自动差分的两种模式的内部比较而言,一般伴随式要比前向模式要快。

自动差分AD的原理?

某种意义上, 自动差分是结合了符号差分和有限差分的优点。

首先类似符号差分, 对导数计算利用导数的组合法则:

但是这些组合法则不是全部表达式展开的方式去做的。而是基于计算图进行逐步计算的。 例如对于简单的连乘, 就分解成4步计算结构:

在求解的时候, 也是对每步按组合图计算中间结果。 这样避免了表达式的积累。 顺序计算相当于图遍历。

举个具体的例子, 对于表达式, 首先给出计算图结构, 要求必须是二叉图的形式:

具体的数值计算过程如下:

在计算偏导的时候,针对每一层求分步偏导,

再结合数值计算图求解最终偏导数:

这样最终可以求解到偏导数:

所以,自动差分很好结合了二叉计算图和逐步求偏导的流式过程,从而避免了符号的组合爆炸。

除了上述的前向模型后, 还反向模型,也就是我们说的伴随式模型。

在后向模型中, 我们要按计算图方向计算伴随导数值。

同一个例子来看, 计算过程是由后向前的。

具体的计算过程如下:

从上面可以看到, 伴随式可以同时计算出所有输入变量的偏导数。 上面演示了AAD的原理。 在具体计算的过程中, 前向和后向都可以选择。甚至在求解二次导数(导数的导数)的时候,还可以交叉组合形成4种AD求解方法。

伴随式自动差分AAD的矩阵计算?

对于AAD的矩阵计算依然可以利用并行的计算图来实现, 例如:

对应的具体的计算图:

前向AD的实现过程:

后向AD(AAD)的实现过程:

但是要注意的是, 由于前向和伴随式的顺序,使得矩阵计算的时候,行列的优先顺序变了:

对于前向的情况是逐层的雅可比矩阵与向量的乘积计算,

所以对于一次计算过程对于雅可比矩阵逐行计算

但是对于伴随式模型, 是向量与雅可比矩阵的乘积计算过程,

所以对于一次计算过程对于雅可比矩阵逐列计算,或者雅可比矩阵的转置的逐行计算。

AAD算法本质和误差反传非常相似, 不过误差反传并不需要是一个二叉网络, 可以是任意的链接网络。而AAD是构建一个标注的二叉结构网络,更为通用有效。

和误差反传相比, 两者在原理和实现上都接近,可以设计成通用的计算模式。

AAD的实现?

AAD的实现一般都需要存储计算图的节点数据,包括数据存储和图关系。

目前有些工具实现了专用工具, 例如COSY, AD的R语言包, Matlab包, 也有通用的Adol-C, AD02, CppAD, AudoDiff。最近在深度学习领域比较火爆的是Python实现的 Tensorflow的Tangent, PyTorch, Autograd等等

更为全面的调研看下表:

但是在主流的深度学习相关平台的计算时间设计(是否延迟模式)和模型的存储结构上,有会八仙过海各显神通。

同时由于网络的计算过程,存在很多可以并行的部分, 那么对GPU的支持也是一个关键。

小结

AAD在金融量化模型和机器学习尤其深度学习应用进入大爆发的时代, 这里概述了AAD的应用背景和基本思想,并且比较了误差反传,其他微积分计算的思想。 结合金融领域和机器学习以下方面都是AAD的应用领域:

1)蒙特卡洛 Hamiltonian Monte Carlo sampling

2) 变分推理 Variational inference

3) 神经网络 Neural networks

4) 数值优化 Numerical opitmization

希望大家有所收获。

https://item.jd.com/12626464.html

参考:

http://dlsys.cs.washington.edu/schedule

https://www.okcd00.tech/assets/CSE599G1%20DeepLearning%20System%20Lecture4.pdf

http://jmlr.org/papers/volume18/17-468/17-468.pdf

https://arxiv.org/pdf/1107.1831.pdf

https://arxiv.org/pdf/1811.05031.pdf

原文发布于微信公众号 - AI2ML人工智能to机器学习(mloptimization)

原文发表时间:2019-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券