※ [本文转录自 DataScience 看板 #1ZrCHlhy ]
作者: subgn ( ) 看板: DataScience
标题: [心得] 当actor-critic遇到black-scholes
时间: Sat Jan 28 14:44:57 2023
Medium网页好读版
https://tinyurl.com/u4au6u2e
本文试着将Reinforcement Learning的Actor-Critic模式与选择权评价模型里的投资组合
复制框架(delta hedge)两种极为相似的概念整合,实作出可以同时计算选择权价格(对应
到RL的critic)与避险比率(对应到RL的actor)的强化学习框架。
https://miro.medium.com/max/750/1*Jzkn6FmYbD0UC_GkukwHvg.png
Black-Scholes Model
相信交易过选择权的人一定都对Black-Scholes与Delta不陌生(已经熟悉Black-Scholes的
读者可以直接跳过这一段,这边不打算花太多篇幅讲解它)。首先,根据此理论,选择权
评价公式长这样:
https://miro.medium.com/max/750/1*Jzkn6FmYbD0UC_GkukwHvg.png
还有一个很重要的公式,Delta,代表若要复制一个选择权的报酬,所需持有的标的物的
数量,就是前面选择权价格公式的其中一部分:
https://miro.medium.com/max/252/1*dE53bK_AWzr8o3-dXkAbVQ.png
Black-Scholes虽然是一套从纯理论出发的公式,但他能在实务中屹立长久,靠的就是这
个评价模型 与 复制报酬的架构。在这个架构中,造市者借由持有一个特定比例(delta)
的选择权标的物,就可以对冲掉选择权价格的涨跌。至于这价格公式与Delta公式怎么来
的?简单的说,先假设股价的走势呈现几何布朗运动(这是最基础的假设,当然也有更复
杂的模型,例如固定收益的LMM或是Hull-White),再套入Ito’s Lemma得到一个微分方程
,接着再以选择权的到期报酬(payoff),以买权为例,Max(0, stock price — strike)
,作为边界条件去解微分方程式,就可以得到价格公式与delta公式。
https://miro.medium.com/max/538/1*qOd9yf62We6Ysay0sDHSiA.png
描述股价瞬时变动的几何布朗运动模型
Actor-Critic
这里同样的,已经对强化学习的Actor-Critic算法熟悉的读者可以跳过这段,因为网络
上有太多优秀的教学资源,所以这边我同样的也简单的介绍一下就好。Actor-Critic是一
种结合policy based与value based的强化学习算法,Actor负责执行动作,Critic负责
替前者执行的动作给予评价。两者各自有一个类神经网络,Actor靠Critic给出的评价来
以policy-gradient更新参数,Critic则是借由Actor实际与环境互动出来的结果,以
Bellman-Equation来更新参数。
借由不断的“环境互动 — 更新Policy — 更新Critic”的循环,最终达到策略最佳化的
目的。而回顾Black-Scholes的框架,他的价格公式与Delta公式,是由对股价走势的假设
(几何布朗运动)决定,并由数学推导(解微分方程)来获得。而强化学习的Actor与Critic
的函数,是由Agent与环境的互动出来的经验决定,并由学习获得,这两者有很多相似之
处,因此把Actor Critic稍加改造应该可以训练出一个不用理解Black-Scholes Model就
可以近似出其价格公式与Delta公式的神经网络。
Critic的更新方法:
https://miro.medium.com/max/588/1*kL8PqGCaaaxv6EjOcGz7qg.png
这边的→符号,是指以梯度下降法更新神经网络权重θ,使左边的值趋近右边值,也就是
以右边为target来训练θ。Critic是用来衡量根据目前状态St,未来所有Reward的折现期
望值(是的,折现期望值,这点也跟财务工程的思维很像),如果我们要用一个神经网络来
估计选择权价值,回顾一下,Black-Scholes框架的一个重点就是用delta避险来复制选择
权,那我们会希望评估值的变动会尽量接近避险部位价值的变动
https://miro.medium.com/max/616/1*zI3FcKVQQ_nTnJbSUNUbvw.png
移项后再把delta*St替换为RL 领域熟悉的符号r,就得到
https://miro.medium.com/max/632/1*BgIZkrwjxvL8kdl3-WpZ2g.png
(选择权版本的critic更新公式,注意rt的部分与原版A2C正副相反)
训练Actor
除了训练评价函数V(也就是critic)来计算选择权价格以外,我们还需要一个actor来决定
delta避险部位,而这次是反过来,critic要去指导actor函数,critic透过advantage
function来告诉actor,刚刚选的action是好还是坏。
https://miro.medium.com/max/720/1*V0gHx98xs5aLW7FJXjrI2A.png
(原版actor critic的期望reward的梯度)
注意在原本的actor-critic框架中,Actor是产生一组离散的机率分布,代表执行各种
action的机率,训练actor的方式是让reward总和的期望值最大化,而要最大化期望值,
就是靠advantage function来告诉actor什么action是好,什么action是坏,数学上来说
就是用policy gradient来更新这个policy的权重。
https://miro.medium.com/max/1094/1*sNVHuhAliTKOyxGAeRoBng.png
(原版actor critic的期望reward的梯度)
但是因为我们要决定的是一个避险比例delta,它只是一个数值,而非在多个action中选
一个来执行(离散机率分布),所以问题更简单,只要让他产生的delta值去逼近
advantage function(这就成为一个简单的regression problem)
实作
建立起理论基础后,下一步就是来实作了,作为一个概念验证专案(POC),这边先不打算
从实际市场历史股价来训练,而是先用Black-Scholes Model产生出模拟股价(虽然原本的
目的是做出model-less架构),并用这些模拟价格训练出选择权估值函数与delta函数,并
验证算出来的值是否与Black-Scholes公式相差不远。
程式码部分如下,首先是产生模拟股价的BlackProcess类
https://medium.com/media/ad9ff5c07bec38ad1ee711fad713756b
再来是强化学习必定要有的自定义Env类,这边并没有继承openAI的env,而是直接创建新
的类
https://medium.com/media/083e21555e72a3fc27412557766028a7
还有产生actor与critic model的function,喂给actor与critic的input有5个,分别是价
内程度、价内程度的平方、剩余天期、剩余天期的平方、价内程度*剩余天期。(值得注意
的是,因为选择权价格永远大于0,所以critic最后一层的activation要用sigmoid,而
delta值有正有负(看是call还是put),所以actor最后一层activation选tanh。)
https://medium.com/media/dd4f17469493152f7ec6e9324bf6ac35
以及定义好要进行神经网络学习的loss function:
https://medium.com/media/33f25206127a3fc90fb6d324fcdb510b
接着是actor-critic的训练流程:
https://medium.com/media/d4e2fc91b531013789648686a1d912cd
最后是结合再一起进行测试,假设的初始股价S0=1,波动度30%,无风险利率1%,天期为
30日,履约价K=1.1。
https://medium.com/media/ec1dc2f0d99fce3d08c1d55ef29799d8
测试的结果,可以发现不论是估值还是delta算出来的结果跟Black-Scholes公式天差底远
,在经过50回合训练后,神经网络预估的选择权价值是0.0106,Black-Scholes公式计算
值为0.0347,delta方面,神经网络预估值是-0.0689,Black-Scholes公式计算值为0.521
。
为了解决这个问题,在真正开始actor-critic交互式训练之前,先对两者分别进行“预训
练”。
首先是actor(delta预估函数)的预训练,假设天期为10个交易日的选择权,则我们制作一
个输出10个delta值的Model,因为用delta避险仓位要能复制选择权的最终payoff,所以
让输出的delta各自乘以对应时间的dS,相加后,再加上选择权初始价值,整个总和让它
逼近选择权到期时的Payoff,因为我们还没有正确的价格函数,所以选择一个价外选择权
,并假设其价格等于0。
https://miro.medium.com/max/828/1*WjxUgS8OFwUo5hsJ4M0f5w.png
接着利用预训练完毕的actor(delta预估函数)来预训练critic(估值函数),从期末的
payoff值开始,以反序方式,借由本期估值等于下一期估值减去避险部位损益,当作估值
函数的神经网络学习目标。
https://miro.medium.com/max/640/1*BCWsULH9oG4mwWvwIUhnYw.png
在先对模型施以预训练后再进入actor-critic后,我们发现两个模型很快地进入状况,在
50回合训练后,估值方面,神经网络的预估为0.0373,Black-Scholes公式解为0.0347,
delta方面,神经网络的预估为0.4471,Black-Scholes计算值为0.5210。
虽然这只是一个用模拟价格训练出来的Proof of Concept模型,还是最简单的vanilla选
择权,但是它初步验证了将actor-critic与Black-Shcoles两个框架相似之处融合之后的
可行性。