alphanet GNN和GAN华泰金工深度学习量化研究
由aya创建,最终由aya 被浏览 65 用户
《alphanet GNN和GAN华泰金工深度学习量化研究》Deep Alpha 研讨会 small_q small_q 更新于 大约 1 个月前 · 阅读 785
#1、华泰人工智能系列研究:四年五主题四十七篇研究 首先非常感谢宽邦科技的邀请,这里我替换了一下标题,主办方给的题目是《国内投资机构深度学习量化实践》,我这里改成了《华泰金工深度学习量化研究》,因为我个人很难代表整个国内的投资机构,国内的买方和卖方,公募和私募研究差异还是挺大的。 总体来讲,买方机构会更务实,目标明确。卖方研究有特殊之处,市场对我们的期待是探索前沿内容,帮大家踩坑,所以需要我们仰望星空。但同时又不能太飘,也需要脚踏实地。双重标准之下,研究面临的挑战很大。 过去4年多时间里,在首席林晓明总的带领以及多位同事的通力合作下,华泰金工团队在人工智能领域也有了一定研究成果。我们从2017年6月到现在,一共发布47篇人工智能深度研究,涵盖5个主题:模型测试主题、因子挖掘主题、对抗过拟合主题、真假序列和生成对抗网络主题。 前两个主题属于进攻式的研究,alpha模型最重要的环节是因子和模型,刚好对应我们的前两大主题模型测试以及因子挖掘,目标就是尽可能拟合收益获取alpha。但是对于人工智能模型来说,优点是拟合能力强,缺点是拟合能力太强,以至于把数据中的噪音也学习进去了,所以我们也需要做防御式的研究。一方面找技术对抗过拟合;另一方面,过拟合最重要的原因是数据量不够,中国市场能获取到的数据相对比较有限,所以我们就思考能不能用深度学习技术生成更多数据,参与到模型训练中提升鲁棒性,所以又有了我们另外一个系列,叫做真假序列和生成对抗网络。 最后一个主题叫做其他,我们希望模型不光预测能力强,还可以用来帮助我们去理解市场。前者让我们在市场中存活下来,后者让我们在市场中长期存活下来。像我们做的因果推断、无监督学习这些研究,都可以帮助我们更好地理解市场运行的规律。
完整视频观看地址:https://webcast.roadshowchina.cn/cmeet/NlZBZVhZRGZ6Q1NSRjdrbmJqQjZUQT09
#2、选股因子挖掘神经网络:AlphaNet
接下来我们介绍一些具体研究。今天想分享的第一部分研究是选股因子挖掘网络AlphaNet,这是我们同事李子钰老师做的非常漂亮的工作。多因子选股通常可以分成三步,因子生成、多因子合成和组合优化。传统的多因子选股框架里,在因子生成这一步,一般基于基本面或者量价的逻辑提取常规因子,然后用线性回归方法做因子合成。如果我们想把人工智能技术用在因子选股策略,第一个方案就是在因子合成这步,把线性回归替换成更复杂的非线性模型,比如XGBoost这样的决策树集成模型,就有了我们第一代人工智能选股模型:传统因子+XGBoost。 因子生成这一步能不能用人工智能技术?我们用遗传规划技术自动生成海量选股因子,再送到随机森林或者 XGBoost模型中做因子合成,就有了我们第二代人工智能选股模型。 前两代模型并没有真正用到我们今天的主题——深度学习。我们在去年开发了第三代人工智能选股模型AlphaNet。AlphaNet的特点是把因子生成和因子合成放到同一个神经网络里面,实现了端到端的收益预测。当然这并不是我们研究的终点,最后一步组合优化我们目前并没有用到人工智能技术,接下来如果能够对于强化学习有进一步了解,或许可以把这三步都融合起来,用深度强化学习实现真正端到端的投资决策。 最近十年深度学习技术飞速发展的核心推动力量之一就是卷积神经网络的提出。卷积神经网络在图像识别以及语音识别上已经有了非常成功的应用。卷积的作用是提取相邻数据中的固定模式。对于图像,相邻的像素是有意义的,他们可能组成有规律的局部图像,语音也是如此,但是对于因子数据,卷积并没有那么合适。比如图上展示的因子数据,如果用一个2×2的卷积核提取邻域线索,我们能提取到的是 open和high之间的模式,high和low之间的模式,low和close之间的模式,它能提取的信息和因子排布顺序有关系。但是问题在于凭什么我们只能去计算open和high之间的规律?为什么open和close,open和vwap之间就不能提取规律?显然在这里用卷积网络并不那么合适。我们就想能不能用另外的网络结构代替卷积。
所以我们提出了AlphaNet网络结构,它最大的特点是没有用传统的卷积运算,而是使用了自定义的、更适合用在因子构建的运算。比如其中的一种自定义运算叫ts_correlation,它的作用是对任意两个输入因子,计算过去D天的相关系数,由于对任意股票对进行了遍历,避免了因子顺序的排布造成的影响,可以充分挖掘因子之间的规律。 再比如还有一个相对简单的自定义运算叫ts_stddev,它的作用是对单个因子过去一段时间的数据计算标准差。我们总共提出6个特征提取的运算符,对过去30天的15个原始因子进行上述的特征提取,最后送到LSTM网络里面预测股票收益。 AlphaNet和传统的遗传规划有什么区别?遗传规划就好比物种进化,基因突变通常是没有方向性的,遵循的是自然选择法则,也就是说因子在下一轮迭代里会变得更好还是更差并不确定,我们会把因子的筛选去交给时间,这就导致了它的效率其实并不高。而深度学习是很功利的,他的目标就是希望最后的预测误差尽可能小,所有参数都会围绕最终的目标去优化。所以把因子挖掘的工作交给AlphaNet,效率会比遗传规划更高。 我们基于AlphaNet网络构建了一个500增强的选股策略,从2011年到现在相对于基准指数,超额收益大约20%,信息比率超过3,是一个不错的选股策略。如果各位投资人朋友对AlphaNet策略感兴趣,欢迎联系华泰金工团队。
#3、图神经网络:挖掘股票间关系信息
接下来我想分享的第二部分研究是图神经网络。 图神经网络最大的优势是什么?我们通常把股票看成相互独立的个体,股票和股票之间没有关系,不管是线性模型还是非线性模型,都有一个样本独立同分布的假设。但事实上,在金融市场里面,股票和股票之间一定有相互影响,怎么样才能把这种关系信息提炼出来,就是图神经网络要做的工作。图神经网络的基本思想用一句话就能概括:把我邻居的因子加到我自己的因子身上。这就引申出来两个问题:一、怎么定义邻居?比如对于茅台,五粮液算不算邻居,中国平安算不算邻居?二、怎么把邻居的因子加到自己身上来?是等权相加,还是以距离为权重,离我近的邻居多加一点,离我远的邻居少加一点?围绕这两个问题,就衍生出了不同的图神经网络算法。 先回答第一个问题:怎么定义邻居?传统的定义方式叫做显式定义图结构,Feng 2019这篇文献基于产业链上下游关系、股权结构关系等,对美股100多种关系进行建图。比如波音和美联航存在产业链上下游关系,就可以定义成一个邻居对,最后可以得到一个庞大的股票网络,这是传统的显式定义方式。 还有一种方式叫做隐式定义图结构,它背后的假设是任意两个股票都可能有关系,即便不属于同行业,也没有产业链上下游关系,但他们可能是相同的投资人在进行交易,所以也存在相互影响。那到底怎么样去评估任意两个股票间的影响,或者说连接强度?最简单的方式是计算相关系数,可以得到一个相关系数矩阵,但是问题在于相关系数矩阵有两个缺点:1、相关系数没有参数,所以无法优化,也就没有办法借助深度学习的优势。2、即使有参数,梯度下降需要求导,而相关系数本身是除法,拿协方差除以方差,除法求导比较复杂。 怎样解决这两个问题?科学家提出来了很巧妙的方法,通过简单的内积运算计算两个股票之间的关系。
以上图为例,假设有3只股票、3个选股因子,首先要算茅台和五粮液之间的距离,我们把这2只股票的3个因子写成一行,得到一个1×6的向量。同时定义一个叫注意力机制参数的向量,也就是表格里红色向量。接下来对这两个向量计算内积,所谓内积就是对应元素两两相乘再相加,最后可以得到7.76。我们发现茅台和五粮液的连接强度是7.76,茅台和迎驾贡酒的连接强度是4.21,显然茅台和五粮液更接近。 怎么去确定注意力机制参数?答案是他们是优化出来的,也就是说图神经网络的目标是要找到一个最优的红色向量,使得算完任意两个股票间的距离之后,把离我近的邻居的因子多加给我一点,离我远的邻居的因子少加给我一点,从而更新了每个股票的因子。再用更新之后的因子去预测股票收益,最终目标还是希望预测误差尽可能小,然后再用预测误差反向传播,迭代优化网络里面包括注意力在内的所有参数。说得更直白一点,所谓图注意力网络就是要找到一个最优的红色向量,本质上是一种距离的定义方式,在最优定义方式之下去做选股预测。 第二个问题是怎么把邻居的因子加到自己身上来?
最简单的方法是直接加。如上图,假设h1是茅台原始因子,h1‘是茅台更新之后的因子, h2-h6是茅台的5位邻居,最简单的方式就是把邻居的因子等权加到自己身上。但是显然这样太粗糙了,科学家就提出了第二种方案——加权求和,它是以alpha为权重进行加权。alpha是谁呢?就是刚才我们计算的股票间距离,标准化之后得到的注意力系数。本质上就是离我近的邻居就多加给我一点,离我远的邻居少加给我一点。这种隐式建图结合距离加权的方法就叫做GAT图注意力网络。当然邻居之间的求和还可以有更多的花式操作,加法可以替换成任意的函数f,只要函数有参数,只要参数可以被优化,都可以做为加和的方式。
我们在微软的 Qlib开源工具包里实现了图注意力网络模型。可以看一下模型流程,首先对于每个股票,我们使用过去20天的158个量价因子作为模型输入,首先把原始数据送到两层的LSTM模型里面,提取T时刻的隐状态,假设第二层LSTM的隐藏神经元个数hidden size是64,那么就可以提出来64个隐状态因子,这一步操作本质上做时序降维,把过去20天的158个因子降维到最近一天的64个因子。接下来我们把64个隐状态因子送到GAT网络里面,计算邻居间距离,再把邻居的因子加给自己,从而得到了64个新的因子。再把64个新的因子送到两层的全连接神经网络,最后去预测股票收益。然后再用预测的误差反向传播,迭代优化网络里面的所有参数。 图注意力网络模型相比于传统机器学习模型的优势在哪?对于传统机器学习模型如 XGBoost和LightGBM等树模型来说,用到的往往都是最新一个截面上的因子数据,既没有考虑股票历史信息,也没有考虑股票间的关系信息。对于LSTM和GRU等时序神经网络来说,有考虑历史信息,但是没有考虑关系信息。对于图注意力网络GAT来说,它同时使用时序信息和关系信息,相同的输入数据,GAT挖掘到的信息一定是最多的。
我们基于GAT模型构建了简单的选股策略。使用沪深300成分股、158个特别简单的量价因子,预测T+2日vwap相对于T+1日vwap的收益,做成一个日频选股策略。组合构建采用TopkDropout,每天持有50个股票,每天换5个,把5个预测得分最差的扔掉,把5个最好的加进来。在双边千四费率下,从2010年初到2021年8月底,模型相对于沪深300年化超额收益可以达到25%,对照组LSTM模型超额收益21%,LightGBM模型超额收益17%。挖掘的信息越多,模型的表现确实就会越好。当然可以看到GAT模型在2019~2020这两年超额收益走平了,所以我们接下来会考虑如何对模型做更多改进。
第一个改进就是增加更多因子,在原有158简单量价因子上增加50个相对复杂的因子。第二个改进是修改损失函数,提升多头端权重,使得模型对于头部收益股票的筛选能力更强。经过这两个改进之后,我们发现最终得到的这条黑线超额收益是最高的,同时也解决了2019~2020年模型失效的问题。
#4、生成对抗网络GAN在量化中的应用 最后一部分我想分享的内容是生成对抗网络GAN。
GAN可以用来做什么?GAN是一种生成模型,可以生成足够以假乱真的样本。比如左上角是用GAN生成人脸,2014年生成的人脸还面目模糊,到了2017年就特别逼真了。再比如左下角是用GAN生成医学影像,科学家想训练深度学习模型做乳腺癌影像筛查,但问题在于真样本数量特别少,样本量不够机器就没法学。科学家就想到用对抗网络模拟出一些真样本,参与到训练,提升模型鲁棒性。在金融领域,我们开始用GAN生成资产价格序列,发现生成的序列比传统的统计生成模型效果更好。
上面这两个图是我们用GAN做的上证指数连续20年价格的生成,与下面两个图Bootstrap和GARCH两个传统模拟技术做比较。Bootstrap的缺点在于波动特别均匀,我们知道真实序列应该有波动率聚集特性,大部分时间岁月静好,偶尔会有暴涨暴跌,但是Bootstrap没有办法表现这个特点。GARCH模型虽然有波动率聚集,但波动的幅度有点过分,红色这条线几天时间就涨到80倍,不太合常理。综合比较下来GAN方法生成的效果最好。 GAN原理并不复杂,本质上是左右互搏,GAN由Generator和Discriminator两个网络组成, Discriminator叫判别器,相当于验钞机,Generator叫生成器,相当于造假币,这两个网络如果同时训练,那么水平同时提升,道高一尺魔高一丈,一直到纳什均衡的理想状态,两个网络能力都很强,我们最后想取的就是G网络。
除了刚才的肉眼观测之外,我们也可以找一些统计指标,定量证明GAN比传统方法更好。我们找了真实资产价格序列所具有的6个特性做评价指标:自相关性、厚尾分布、波动率聚集、盈亏不对称、杠杆效应、粗细波动率相关,我们发现GAN和真实序列非常接近,6个指标全部通过检验。而传统的Bootstrap和GARCH模型,各有一半指标没有通过。 当然GAN并不完美,它有三个重要的缺点:1、判别器和生成器的训练不同步;2、模式崩溃;3、损失函数不收敛。
我们展开介绍模式崩溃这个缺陷。比如上面这5个图,我们想让模型学写手写数字0~9,但是模型5000次迭代后只学会了0和8,相当于我想教模型学降龙十八掌,他最后只学会一掌,当然一掌如果打得足够好,也可以骗过判别器,但是这和我们训练的初衷背道而驰。 科学家围绕这些原始GAN模型的缺陷,提出来数百种变式做改进,其中最重要的两种变式分别是WGAN和DCGAN,这两个模型分别从损失函数和网络结构角度进行改造,我们也可以把这两个方向进行融合,就得到了W-DCGAN。 最后我们想把GAN真正应用于投资实践,这里我们用到GAN的另一种变式,叫cGAN。GAN和cGAN这两个模型区别在哪呢?传统的GAN是无条件生成,也就是说如果生成人脸,男女老少都可以生成,而cGAN可以在给定的条件下做生成,比如给定条件叫男性,模型最后就只会定向生成男性人脸。应用于资产预测时,我们可以给定一个条件叫做过去40个交易日的资产收益率序列,让cGAN生成未来20个交易日的资产收益率序列,这就相当于用过去40天生成未来20天,从一个生成视角转换成了一个预测视角。
假设我们需要对股债商这三大类资产做预测。我们送到生成器中的是两方面输入,一部分是随机噪音,另外一部分是三个资产过去40个交易日的收益率序列,模型会生成未来20个交易日的收益率序列。接下来对20天日频收益计算区间收益,得到一个1×3的区间收益向量,这个过程重复1000次,最后就可以得到1000*3的区间收益矩阵。因为输入包含了噪音,所以1000次生成结果一定是不一样的。最后对1000×3的收益率矩阵计算协方差,得到一个3×3的协方差矩阵,就可以作为三个资产未来20天风险的一个测度。把cGAN和传统历史波动率得到的协方差矩阵做对照,同时用在风险平价策略上,对比一下效果。
比如说对股票债券商品三类资产,每20天进行调仓,左上角的红线是cGAN做风险平价的结果,灰线是传统历史波动率做风险平价的结果,发现红线相比灰线优势比较明显,而且超额收益相对也比较稳定。我们修改随机数种子,修改回测日期,修改资产组成,发现红的都还是要比灰的好,结论相对来说是比较稳健的。 除此以外,GAN还有更广泛的应用。一个重要的应用是检验过拟合。传统上做量化模型调参,都是在历史真实数据里进行测试。比如我们做双均线择时参数选择,我们发现历史上(7、28)这组参数比(5、20)好,但是问题在于我怎么证明(7、28)是真的好,而不是过拟合?我们想到的方案是用GAN生成1000组假的沪深300数据,相当于1000个平行宇宙,把这两组参数放在1000个平行宇宙里面做测试,发现85%的场景之下都是(7、28)更好一点,所以大概率可以证明我们选的最优参数不是过拟合。 另一个重要应用是训练模型。传统上我们使用真实数据训练模型,但是UCL的Koshiyama等人 2019年做了一个研究,他们用GAN生成假数据,用假数据训练一堆机器学习模型,再对这些模型做集成。发现用假模型集成得到的模型,表现会比在真数据训练得到的模型要更好。用真数据训练的模型就好比温室里的花朵,只见过单一的真实数据,但是假模型见过大量GAN生成的假数据,见过千山万水,表现大概率比真模型更好。
最后我想用一本书来结束今天的分享。这本书是我们在路演过程中我非常敬重的一位领导推荐给我们的,中文名叫做《市场的错误行为》,台译本叫《股价棉花和尼罗河密码》,书的作者是Mandelbrot,他是一位著名的数学家和经济学家,是分形理论的开创者。
书里有一幅图,也就是PPT右边这个图,他提的一个问题是何为真何为假,意思是4个子图里面有2条是真实资产价格序列,有一条是用传统的几何布朗运动模拟出来的假序列,还有一条是Mandelbrot提出来的多重分形理论模拟出来的假序列。Mandelbrot的结论是传统的几何布朗运动是有缺点的,没有办法刻画真实资产价格所具有的两个特性,一个是多尺度相似性,一个是长时程相关性。两者分别对应标题里面的棉花和尼罗河密码。Mandelbrot说他提出来的多重分形理论可以解决这两个问题。他还强调多重分形理论可以用在投资的各个领域,比如分析投资、建立投资组合、期权定价、风险管理。这本书是Mandelbrot在20多年前写的,我们现在有更加强大的深度学习工具,相信我们会比20多年前的往圣先哲做得更好。 以上就是我的分享,谢谢各位投资人朋友。
完整视频观看地址:https://webcast.roadshowchina.cn/cmeet/NlZBZVhZRGZ6Q1NSRjdrbmJqQjZUQT09