狄奥尼索斯之歌公众号文章

Two Sigma:深度学习如何建模金融市场

Two Sigma:从股价预测到交易执行,David Kriegman 解析 RNN、Transformer 与强化学习在量化金融中的应用,并探讨金融市场的非平稳性、模型落地的现实挑战,以及深度学习能否提供传统模型之外的独立信息。

 

演讲来源:Two Sigma Presents 
主讲人:David Kriegman,加州大学圣迭戈分校计算机科学与工程教授、Two Sigma 研究人员

David Kriegman 是加州大学圣迭戈分校计算机科学与工程教授,主要研究计算机视觉与机器学习,曾在 Two Sigma 从事研究。在这场 2021 年的 Two Sigma Presents 演讲中,他探讨了一个核心问题:深度学习如何利用金融市场中的序列数据,并将预测转化为实际交易决策?

演讲从特征提取、收益预测、组合优化和交易执行的完整流程出发,以股价预测为例,介绍从传统神经网络、RNN、GRU、LSTM 到注意力机制与 Transformer 的技术演进,并进一步讨论强化学习在交易中的应用及其对市场模拟、算力和工程基础设施的要求。

TL;DR:David Kriegman 核心观点

  1. 1. 深度学习在量化投资中的应用,不只是预测股价。Kriegman 将投资流程拆为特征提取、收益预测、组合优化和交易执行。即使预测准确,也必须考虑持仓、风险、交易成本和市场冲击,才能将预测转化为实际交易。
  2. 2. 金融市场天然存在大量序列问题。从价格、新闻到交易指令,时间信息贯穿投资流程。Kriegman 从 RNN、GRU、LSTM 讲到注意力与 Transformer,解释不同神经网络如何利用历史信息,以及如何应对长期依赖与训练困难。
  3. 3. 强化学习把预测扩展为连续决策。 与监督学习不同,RL 可以把买卖行动、市场冲击和长期累计回报纳入优化目标。但金融市场不像游戏那样规则固定,可信的市场模拟器、计算资源与软件基础设施是实际应用的重要前提。
  1. 4. 复杂模型的价值在于新增信息。 金融市场具有非平稳性,历史规律可能随时失效。如果深度网络只是重复线性模型已经捕捉到的信息,增加复杂度并没有多少价值。关键在于能否提供已有模型无法提取的独立信息。

演讲精编

什么是序列,为什么金融离不开它

我今天要讲的是用于序列的深度学习。序列是一组按顺序排列的元素,元素是什么取决于应用。文本可以是词或字符的序列;语音是随时间变化的音频信号,可能每秒采样几千次,音乐可能每秒采样一万、两万甚至四万次;视频是接连出现的图像。你在电商网站上依次浏览的商品页面,也构成一个序列。在金融市场,我们还会看到股票价格序列。

文本、声音、视频、浏览记录和股价都是序列
文本、声音、视频、浏览记录和股价都是序列

序列处理任务可以接收一个序列,再产生另一个序列;两者长度不一定相同。例如,给一段餐馆评论判断正面还是负面,是一段文本输入、一个分类结果输出。像“这个越南三明治太绝了”这样的口语,如果不理解说话方式,甚至可能把好评误判为差评。给家庭视频判断它是生日派对、体育活动还是游泳,也是长输入、单一结果。

反过来,给一张图片生成供视障人士阅读的说明,是一个输入产生一串文字。推荐系统根据你浏览过的页面推荐下一项;机器翻译把一种语言的词序列变成另一种语言的词序列,两边的词数可能不同;语音识别把采样频率很高的音频变成词序列。我们预测股票明天的价格或涨跌时,也是在用过去一段历史产生一个输出。

不同任务中的序列输入与输出;股价预测用历史序列产生下一期预测
不同任务中的序列输入与输出;股价预测用历史序列产生下一期预测

说到怎样在股市赚钱,大家常说“低买高卖”,也说“逢跌买入”。图里的例子中,一次低买高卖赚约 67 美分;如果能在更多低点买入、预测买卖两端,收益可能增加到约 2.74 美元。价格曲线上还有许多更小的波动,如果都能抓住,理论上机会更多。又有人说不要把鸡蛋放在一个篮子里,这讲的是分散投资、避免亏损;还有人说不要择时,但这与“低买高卖”和“逢跌买入”又有点矛盾。最后一条是不要让情绪左右决定。我们做量化投资时,确实让没有情绪的算法作决定:尝试判断何时买卖,同时考虑分散投资。

从数据到订单:四个不同的问题

这是一条典型的量化投资流程,在教材里也能看到类似图示。右边是市场,我们最终要在股票、期货、商品或期权等市场买卖。要买什么、买多少、何时买卖,这些决定由左边进入的数据驱动。我们先提取特征,然后预测价格或收益,接着优化投资组合,最后决定实际要送出的买卖订单。接下来我逐一说明。

数据、特征提取、收益预测、组合优化、交易执行与市场之间的关系
数据、特征提取、收益预测、组合优化、交易执行与市场之间的关系

先看预测。给定一只股票过去的价格,我们想知道未来某个时点的价格会更高还是更低。一种很简单的方法是算近期均价,预测价格会回到均值,这叫均值回归模型。另一种方法是把近期价格拟合成趋势线,再往前外推,这叫动量模型。图里的均值回归预测低估了实际价格,动量预测则略微高估。这些都不是深度学习,只是简单的预测模型。

均值回归与动量模型对未来价格的两种简单推断
均值回归与动量模型对未来价格的两种简单推断

刚才的例子只用了价格。我们也可以输入市场直接产生的技术特征,例如价格、成交量和买卖价差。还可以看企业本身的基本面:年报、销售,以及港口堵塞的消息是否意味着玩具制造商会遇到问题。新闻、社交媒体和分析师评论会反映人们对股票的态度。很多信息不是整齐的数字,而是文字、图像或其他未经整理的数据。圣诞节时停车场有多少车、港口停着多少集装箱船,也可能成为预测所需的信息。

技术面、基本面、市场情绪和其他信息都可成为预测特征
技术面、基本面、市场情绪和其他信息都可成为预测特征

下一步是投资组合优化。假设我们看一张道琼斯工业平均指数相关的示例组合表,其中列出六只股票未来十天的预测价格变动:宝洁为上涨 3.5%,Salesforce 为下跌 0.8%。我们要不要因此把钱全投进宝洁?当然还得看已经持有多少、对预测有多大信心、股价波动有多大、希望怎样分散投资,以及交易要付出多少成本。我们可以把这些问题写成一个大规模优化问题,在各种可能的资金分配中寻找合适的组合。

六只股票的示例预测及组合选择问题
六只股票的示例预测及组合选择问题

最后是执行:到市场上真正买卖,把组合调整到我们想要的位置。优化时看到的股价并不是商店里保证成交的标价;我们自己下单也会改变价格,买得越多,价格越可能移动。就像你穿着讲究、戴着好表去谈价,卖方可能开出更高的价。要不要把大单拆成小单、到哪些交易场所下单,都需要决定;一只股票即便在纽约证券交易所上市,也能在其他交易场所买卖。订单要一次下完、均匀分散到不同时段,还是随市场变化调整?采用市价单、限价单还是止损单?这些都是执行时的问题。我们还想建立市场冲击模型,估计自己的行动会造成什么影响。

执行环节要决定拆单、交易场所、下单时机和订单类型,并估计市场冲击
执行环节要决定拆单、交易场所、下单时机和订单类型,并估计市场冲击

在这条流程里,至少有三个环节带有序列问题:提取特征时可能要处理文本序列;预测时要利用过去的特征序列;执行时要连续决定如何买卖。下面我从深度学习的基础讲起,再把它接到预测问题上。

从感知机走到股价预测网络

深度学习基本上是较大的神经网络。神经网络并不新:Frank Rosenblatt 在 1958 年就实现了早期的感知机。后来之所以能训练更深、更复杂的网络,是因为出现了新架构,训练数据大量增加,训练算法发展,也有了大规模并行计算。

1958 年的感知机,以及推动深度学习发展的架构、数据、算法和计算能力
1958 年的感知机,以及推动深度学习发展的架构、数据、算法和计算能力

看一个感知机:它接收  等数值输入,计算加权和,再通过非线性激活函数。式子里还有一个偏置项;为了让后面的图更简单,我就不再画这个项了。

单个神经元的输入、权重、偏置与激活函数
单个神经元的输入、权重、偏置与激活函数

Rosenblatt 用的是阈值函数,后来有了较平滑的双曲正切函数和 Sigmoid 函数;它们看起来像阈值,却是可微的,这有助于训练网络。近年来常用的是整流线性单元(ReLU)及其变体:低于阈值时输出零,高于阈值时输出输入值。有些变体在负值区域保留一点斜率。这些函数使我们能够训练网络。

Sigmoid、双曲正切与 ReLU 激活函数的形状
Sigmoid、双曲正切与 ReLU 激活函数的形状

单个节点有局限,于是我们把多个感知机连成两层乃至更多层。图中每个节点都有自己的权重和激活函数,两层网络可用两组权重矩阵表示。

多层感知机把输入层、隐藏层和输出层连接起来
多层感知机把输入层、隐藏层和输出层连接起来

现在用这个网络预测明天的股价。假设我们有过去  天的价格,但网络只接受  个输入;如果  大于 ,就必须截掉较早的历史。我们只要一个输出,也就是下一天的预测价格 。

训练网络就是估计这些权重。我们可以从过去十年的价格记录里取许多例子:在每个例子中,把前  天的价格交给网络,再拿它对下一天的预测与实际价格相比。损失函数衡量两者差多少;可以取差的绝对值,也可以取差的平方。把所有训练例子的损失加起来,再寻找让总损失尽量小的一组权重。

历史价格进入网络,预测值与真实值通过损失函数比较
历史价格进入网络,预测值与真实值通过损失函数比较

我们可以用反向传播计算梯度,再用随机梯度下降等方法调整权重。随机梯度下降的发展,对训练更大的网络尤其重要。真正做预测时,也不会只输入价格:每个时点还可能有成交量、价差、基本面和市场情绪等特征。它们的更新频率不同;财报不会每天公布,新闻和社交媒体信息却可能不断出现。我们可以把相关特征拼接起来作为输入。

同一预测网络可接收技术、基本面、情绪与其他数据特征
同一预测网络可接收技术、基本面、情绪与其他数据特征

这种全连接网络有一个问题:如果回看  个时点,每个时点有  个特征,仅第一层就要处理大约  个输入权重。相对于训练数据,权重数量可能变得很大,网络未必能充分利用这些信息。

回看长度和每期特征数增加时,第一层的输入权重也随之增加
回看长度和每期特征数增加时,第一层的输入权重也随之增加

循环网络如何记住过去

这就引出了循环神经网络。我先从刚才的两层网络出发,让它每次只接收一个时点的输入。假设我们看过去 30 天,就依次送入 30 组数据;与此同时,把上一步的隐藏状态反馈给下一步。这样,网络每接收一个新输入,内部状态也跟着更新,相当于带着一份记忆。

普通循环网络让隐藏状态回流,供下一个时点使用
普通循环网络让隐藏状态回流,供下一个时点使用

怎样训练有反馈回路的网络?我们把它沿时间展开,画成从第 1 步到第  步的一串单元。展开后就能像训练前馈网络那样做反向传播。这里的关键是各步共享同一组权重;画出 30 个单元,并不等于训练 30 套不同的参数。

同一组权重沿时间复用,循环网络展开后可通过时间反向传播
同一组权重沿时间复用,循环网络展开后可通过时间反向传播

不过,回看 30 步时,展开的计算路径相当于 31 层深,训练会变困难。梯度有时变得很大,我们可以用梯度裁剪处理;有时梯度会趋近于零,早期信息就难以通过这么多层传到最后。正则化等技术可以帮助训练,但信息仍常常传不够远。这也是我们引入门控循环网络的原因。

普通循环网络中的梯度问题与长期信息传递困难
普通循环网络中的梯度问题与长期信息传递困难

门控、注意力与其他序列结构

门不是只有开和关两种状态的数字开关,它更像水阀:门的数值决定多少信息能流过去。一个门可以按比例缩放输入;另一个形式可以在两路输入之间分配比例。比例介于零和一之间,这些操作仍可微,因此也能用前面讲的训练方法。

取值在零到一之间的门,可缩放信号或按比例混合两路信号
取值在零到一之间的门,可缩放信号或按比例混合两路信号

刚才那种反馈隐藏状态的网络叫 Elman 网络;另一种 Jordan 网络把输出层的信息反馈回去。现在我们在循环结构中加入门。第一个是更新门,它决定把上一时点的状态和新的候选状态按什么比例混合;另一个是重置门,控制旧状态有多少信息参与候选状态的计算。

更新门控制旧状态与新候选状态的混合
更新门控制旧状态与新候选状态的混合
门控循环单元中的更新门、重置门与状态组合
门控循环单元中的更新门、重置门与状态组合

这类结构叫门控循环单元(GRU),能让信息在更长的时间范围内传播。另一种更早出现的门控循环网络是长短期记忆网络(LSTM),它有更多门和更多参数。长短期记忆说的不是记住许多年前的事,而是可能比较好地保留几十步以前的信息。GRU 参数较少,常有人认为它在训练数据较少时表现更好。

GRU 与 LSTM 的门、参数数量和内部结构比较
GRU 与 LSTM 的门、参数数量和内部结构比较

循环网络仍然难训练,而且不一定能关注历史中最相关的部分。处理序列还可以用一维卷积网络;扩张卷积让它看到更久以前的信息。注意力机制则可以理解为一种可微的“键—值”存储:拿查询与键做软匹配,再取得相关的值。注意力起初也用于循环网络,后来 Transformer 把注意力本身放到架构中心。BERT 是语言处理中的例子;在我研究的计算机视觉领域,视觉 Transformer 的准确率也开始超过过去的卷积神经网络。

卷积、扩张卷积、注意力与 Transformer;右图展示查询、键和值
卷积、扩张卷积、注意力与 Transformer;右图展示查询、键和值

当买卖本身改变市场:强化学习

再往前走一步,就是强化学习。我们参与市场时,自己的行动会影响市场;买卖本身可能使价格改变。前面讲的更多是监督学习,从已有训练数据里学习,并没有把我们自己的行动对市场的影响放进去。强化学习是一种端到端方法:它把买入、卖出等连续决策连在一起,目标是提高一段时间内的累计回报,而不是只看一次预测。

强化学习在游戏里很成功,AlphaGo 和 Dota 2 都是例子,在机器人领域也有成果。金融市场里应用它需要更多条件。游戏的规则定义得很清楚;我们首先需要一个足够好的模拟器,能模拟自己的行动会怎样影响市场。还需要软件工具,我们会使用 OpenAI Gym、Ray RLlib 等工具,也开发内部工具。大量模拟需要计算资源,也需要能支持相应规模的软件基础设施。

强化学习把连续行动与累计回报连起来,应用需要模拟器、软件和计算资源
强化学习把连续行动与累计回报连起来,应用需要模拟器、软件和计算资源

方法之外,还需要数据和工程

回顾投资流程,我认为四个环节中至少三个需要处理序列。深度神经网络可以用不同形式在这些环节里训练和应用。要在 Two Sigma 所需的规模上完成这些工作,还要有数据、计算、软件基础设施和研究人员。

我们使用超过一万个数据源,每年新增超过 20 PB 数据。价格数据本身相对紧凑,其他形式的信息让总体规模大得多。我们会用 CPU、GPU 和 TPU,需要分布式系统、针对学习方法的软件工具,也需要很多人共同把这些方法实现出来。

数据、计算、软件基础设施和研究人员都是规模化应用所需条件
数据、计算、软件基础设施和研究人员都是规模化应用所需条件

我们管理约 580 亿美元资产,交易约 8,000 只股票,每天交易约 3 亿股。这意味着要迅速做出大量决定,不能逐笔交给人来判断;我们通过前面讲的这些方法来做决定。下面我来回答大家的问题。

Q&A

观众: 深度网络缺乏可解释性,这会怎样影响投资策略开发?

David: 有些用途确实像黑箱。我们可以根据过去的输入和结果解释它做过什么,却不一定知道每个决定在内部是怎样产生的。有些架构会形成可以解释的中间表示,让我们对模型多了解一点。

观众: 遇到新冠疫情这样的黑天鹅,原有的市场分布发生变化,你们会怎样对模型做正则化?是否有最后的停止交易规则?

David: 我刚才没有细谈交易的时间跨度。有些交易决策发生在秒、不到一秒或几分钟内,有些跨越一天。疫情期间人们的反应方式可能与之前不同;美联储发布公告,也可能让市场在短时间内突然变化。我们确实有人类交易员在市场紧张时监控这些系统。

观众: 极端市场事件值得另开一个专题。下一个问题:深度学习方法与有效市场假说怎样相容?

David: 市场在一定程度上是有效的,但新信息出现后,市场需要时间作出反应。即使大家能看到相同的信息,我们也希望更快地响应,用不同的方式吸收信息,或者同时综合更多信息。市场并非完全有效,这些低效之处可能带来机会;我们参与其中,也会让市场更有效。

观众: 计算机视觉有哪些方法可用于金融序列建模?

David: 在投资流程前端提取特征时,图像可以直接成为数据。有供应商分析卫星图像,从港口活动、油罐里的石油存量、进出港口的卡车数量等图像信息中提取特征。我和博士生也做过视频分类,其中一些方法和思路可以用于这里的序列决策。

观众: 金融时间序列不稳定。训练样本与样本外的数据分布不同,该怎样处理?

David: 这是我们几乎每天都面对的核心难题。深度学习在未来与过去很相似时通常更有效。有些变化可以模拟,有些不能。我们能在多大程度上模拟、预测变化,并引入领域迁移的方法,就能在多大程度上应对这个问题。

观众: 怎样量化深度神经网络输出的不确定性?我们怎么知道能否信任模型?

David: 这也适用于任何声称能预测的模型。要看它过去实际运行得怎样;到一定阶段,还得把它投入使用,继续测量、测试和评估。

观众: 模型要买卖很多次,是不是不必每次都预测正确,只要正确的次数多于错误的次数?

David: 对,这一点我本来应该在演讲中提到。做机器翻译或语音识别时,我们想尽可能接近百分之百正确;在这里,如果正确率高于 50%,你就可能有优势,并尝试利用它。与我以前研究的很多问题相比,这里的错误率高得多,这也是我觉得它很有意思的原因。

观众: 哪些新的深度学习研究方向可能用于量化金融?

David: 很难只挑几项。强化学习值得关注;帮助模型在不同领域间迁移、抵御数据分布变化的方法也很有价值。训练更快、更稀疏的架构同样有意思。去看国际机器学习大会(ICML)或国际学习表征会议(ICLR)的研究,很多方向都可能对我们有用。

观众: 这么多数据会造成存储问题吗?压缩技术有帮助吗?

David: 也会。我今天讲的是 Two Sigma 建模工作中的一个切面。每年新增约 20 PB 数据,计算系统必须能访问这些数据。有些数据和计算在云端,有些在本地。实时交易系统的要求,与研究员开发新模型时的要求不同。工程团队要处理物理存储、其上的软件层,以及不同计算环境中的数据访问。

观众: 深度学习模型与回归、核密度估计等统计模型在实际应用中相比怎样?数据少而模型大时,如何平衡偏差与方差?

David: 它们都有用武之地。如果深度模型最后只是退化成线性回归,那就没什么意思。如果它能提供一份与已有模型相对独立的信息,它就有价值。我们过去大量使用线性模型;循环网络这样的非线性模型,可能让我们从相同的数据里得到更多东西。


原视频:

https://www.youtube.com/watch?v=iyA6cVmShC0


前往微信阅读全文

内容来自公众号,可前往微信查看原文。

查看作者的更多文章 →订阅更新、RSS 与阅读指南 →