机器学习与算法交易(六): 深度学习技术及其在算法交易的应用
用于交易的深度学习
作为表征学习的深度学习
许多⼈⼯智能任务,如图像或语⾳识别,都需要关于世界的知识。其中⼀个关键挑战是如何对这些知识进⾏编码,以便计算机能够利⽤它们。⼏⼗年来,开发机器学习系统需要⼤量的领域专业知识,才能将原始数据(如图像像素)转换为学习算法可以⽤来检测或分类模式的内部表征。
同样,机器学习算法能为交易策略增加多少价值,很⼤程度上取决于我们构建特征的能⼒,这些特征需要能够代表数据中的预测性信息,以便算法能够处理它们。理想情况下,这些特征应能捕捉结果的独⽴驱动因素,正如我们在第四章“⾦融特征⼯程——如何研究阿尔法因⼦”中以及在第⼆部分和第三部分设计和评估捕捉交易信号的因⼦时所讨论的那样。
表示学习(representation learning)允许机器学习算法⾃动发现对检测或分类模式最有⽤的数据表示,⽽不是依赖于⼿动设计的特征。深度学习(DL)将这种技术与关于特征性质的特定假设相结合。
深度学习与机器学习和⼈⼯智能的关系
⼈⼯智能的最初⽬标是实现通⽤⼈⼯智能,即解决那些被认为需要⼈类⽔平智能的问题的能⼒,以及对世界进⾏推理和得出逻辑结论并⾃动进⾏⾃我完善的能⼒。不涉及机器学习的⼈⼯智能应⽤包括对世界信息进⾏编码的知识库,并结合⽤于逻辑运算的语⾔。
用于金融时间序列和卫星图像的CNN
全连接前馈神经⽹络不对输⼊数据的局部结构做任何假设,因此任意重新排序特征对训练结果没有影响。相⽐之下,CNN 的⼀个关键假设是数据具有⽹格状拓扑结构,并且局部结构⾄关重要。换句话说,它们编码了⼀个假设,即输⼊具有图像数据中常⻅的结构:像素形成⼀个⼆维⽹格,可能还有多个通道来表示颜⾊信号的分量。此外,相邻像素的值对于检测边缘和⻆落等关键特征,可能⽐远处的像素点更具相关性。因此,CNN 最初的应⽤⾃然⽽然地集中在图像数据上,例如⼿写识别。
然⽽,随着时间的推移,研究⼈员在时间序列数据中也发现了类似的特征,从⽽拓宽了 CNN 的有效应⽤范围。时间序列数据由按固定间隔进⾏的测量组成,这些测量沿时间轴创建了⼀个⼀维⽹格,例如某个股票代码的滞后收益率。此外,还可以有第⼆个维度,包含该股票代码在同⼀时间段内的其他特征。最后,我们可以⽤第三个维度来表示更多的股票代码。
除了图像之外,CNN 的⼀个常⻅⽤例还包括⾳频数据,既可以是在时域中的⼀维波形,也可以是在经过傅⾥叶变换后,在频域中的⼆维频谱。CNN 在 AlphaGo 中也扮演了关键⻆⾊,这是第⼀个在围棋⽐赛中战胜⼈类的算法,它在⽹格状的棋盘上评估不同的棋局位置。
CNN原理
从⼿动编码到从数据中学习滤波器
对于图像数据,这种局部结构在传统上推动了⼿动编码滤波器的发展,这些滤波器可以提取此类模式,⽤作机器学习(ML)模型中的特征。相⽐之下,卷积层旨在从数据中学习此类局部特征表示。⼀个关键的洞⻅是将其输⼊(称为感受野)限制在输⼊的⼀个⼩区域内,以便捕捉反映边缘或⻆落等常⻅模式的基本像素组合。然⽽,这类模式可能出现在图像的任何位置,因此 CNN 也需要能够识别不同位置的相似模式,并可能允许微⼩的变化。随后的层级则学习合成这些局部特征,以检测更⾼阶的特征。
卷积各元素的运作方式
卷积层整合了三种架构思想,使其能够学习到在⼀定程度上对位移、尺度变化和扭曲保持不变的特征表示:
- 稀疏连接(⽽⾮密集连接)
- 权重共享
- 空间或时间降采样
此外,卷积层允许输⼊可变⼤⼩的数据。连续的计算通过卷积、检测器和池化这⼏个阶段来处理输⼊,最先进的 CNN 由多个⼤⼩各异的此类层组成,这些层要么相互堆叠,要么在不同的分⽀上并⾏运⾏。每增加⼀层,⽹络就能检测到更⾼级、更抽象的特征。宽度轴也可以代表时间,⾼度轴代表不同的特征,⽽通道则可以捕捉对不同对象(如股票代码)的观察结果。
卷积阶段:提取局部特征
第⼀阶段将⼀个滤波器(也称为核)应⽤于输⼊图像的重叠区域。该滤波器是⼀个矩阵,其尺⼨远⼩于输⼊,因此其感受野仅限于少数连续的值,例如像素或时间序列值。因此,它专注于局部模式,并相对于全连接层显著减少了参数和计算量。⼀个完整的卷积层包含多个特征图,这些特征图以深度切⽚的形式组织起来,以便每⼀层都能提取多种特征。
在扫描输⼊时,卷积核会与其感受野覆盖的每个输⼊⽚段进⾏卷积。卷积操作就是将滤波器权重和匹配的输⼊区域的值分别重塑为向量后,计算它们的点积。因此,每次卷积都会产⽣⼀个数字,⽽整个扫描过程则会⽣成⼀个特征图。由于相同向量的点积最⼤,因此特征图反映了每个输⼊区域的激活程度。
步幅(stride)定义了扫描输⼊时使⽤的步⻓,即⽔平和垂直⽅向上移动的像素数。较⼩的步幅会扫描更多(重叠的)区域,但计算成本也更⾼。当滤波器与输⼊不完全匹配,并在扫描过程中部分越过图像边界时,通常有四种处理⽅式:
- 有效卷积:丢弃图像和滤波器⽆法完全匹配的扫描结果
- 相同卷积:对输⼊进⾏零填充,以⽣成⼤⼩相同的特征图
- 完全卷积:对输⼊进⾏零填充,使得每个像素被扫描的次数相同,包括边界像素(以避免对更靠近中⼼的像素进⾏过采样)
- 因果卷积:仅在左侧对输⼊进⾏零填充,以使输出不依赖于未来时期的输⼊;保持时间序列数据的时间顺序
检测器阶段:添加⾮线性
特征图通常会经过⾮线性变换。如 softplus 函数:
\[f(x)=ln(1+e^x)\]池化阶段:对特征图进⾏降采样
卷积层的最后⼀个阶段可能会对特征图的输⼊表示进⾏降采样,以实现以下⽬的:
- 降低其维度并防⽌过拟合
- 降低计算成本
- 实现基本的平移不变性
这假设特征的精确位置不仅对于识别模式不那么重要,甚⾄可能是有害的,因为它很可能在⽬标的不同实例中发⽣变化。池化降低了特征图的空间分辨率,这是⼀种使位置信息不那么精确的简单⽅法。然⽽,这⼀步是可选的,许多架构仅在某些层使⽤池化,或者根本不使⽤。
迁移学习:⽤更少的数据实现更快的训练
迁移学习可以带来更好的性能和更快的训练速度,并且需要更少的标记数据。CNN 的迁移学习⽅法依赖于在像 ImageNet 这样的⼤型数据集上进⾏预训练。其⽬标是让卷积滤波器提取出能够泛化到新图像的特征表示。第⼆步,它利⽤预训练的结果来初始化并重新训练⼀个新的 CNN,或者将其作为输⼊,送⼊⼀个处理⽬标任务的新⽹络。
在迁移学习中,常见做法有两类:
- 特征提取(feature extraction):将预训练网络的卷积部分参数冻结,仅替换并训练原网络中的全连接部分,或者将瓶颈特征作为输入送入一个新的全连接网络。这样可以利用预训练网络学到的通用低阶特征(如边缘、色块等),同时在新的任务上快速收敛。以 AlexNet 为例,其瓶颈层会为每张输入图像产生一个 4096 维的向量,该向量也可以作为其它机器学习模型(如 SVM、随机森林)的特征输入。
- 微调(fine-tuning):在特征提取的基础上,继续训练预训练网络的部分卷积层或全部层以适配新任务。常见策略是冻结前面若干层(保留较通用的低阶特征)而只微调靠近输出端的中高层;或者在数据量足够大时对整个网络进行微调。微调通常能在保持通用表征的同时,使网络后端学习到与目标任务更贴合的高阶特征,但需更小的学习率与更谨慎的正则化以防止过拟合或破坏先验特征。
综上,迁移学习可在“冻结卷积层 + 训练新密集层(或替换分类器)”与“在此基础上微调部分/全部卷积层”两种策略间权衡:前者训练速度快、对小样本稳健;后者在样本充分或任务差异较大时通常能获得更好的性能。
CNN的具体实践
利⽤迁移学习对卫星图像进⾏分类
卫星图像在另类数据中占有重要地位(参⻅第 3 章,⾦融另类数据——类别与⽤例)。例如,⼤宗商品交易员可以依靠卫星图像,通过监测农场活动、矿区动态或油轮运输情况来预测某些农作物或资源的供应量。
⽤于时序数据的 CNN:预测收益率
CNN 已被成功应⽤于⼀维、⼆维和三维的时间数据表示。如果数据满⾜模型的⼀个关键假设,即局部模式或关系有助于预测结果,那么将 CNN 应⽤于时间序列最有可能取得成果。在时间序列的背景下,局部模式可以是相关区间内的⾃相关或类似的⾮线性关系。在第⼆和第三维度上,局部模式意味着多变量序列的不同分量之间,或不同股票代码的这些序列之间存在系统性关系。由于局部性很重要,因此相应地组织数据⾄关重要,这与前馈⽹络不同,在前馈⽹络中,打乱任何维度的元素都不会对学习过程产⽣负⾯影响。
⽤于多元时间序列和情感分析的 RNN
RNN的原理
前馈神经⽹络(FFNN)将每个样本的特征向量视为独⽴同分布。因此,它们在评估当前观测值时不会考虑先前的数据点。换句话说,它们没有记忆。CNN 使⽤的⼀维和⼆维卷积滤波器可以提取特征,这些特征通常是少量相邻数据点的函数。然⽽,它们只允许浅层的参数共享:每个输出都是将相同的滤波器应⽤于相关时间步和特征的结果。RNN 模型的主要创新在于,RNN 允许更复杂的输⼊输出关系,每个输出都是前⼀个输出和新信息的函数。因此,RNN 可以在使⽤当前特征向量进⾏计算时,将先前观测值的信息纳⼊其中。
RNN的输入输出关系一般包括:
- ⼀对多:例如,图像字幕⽣成,它接收⼀个像素向量(如前⼀章所述),并将其映射为⼀个单词序列
- 多对⼀:情感分析接收⼀个单词或词元(token)序列(参⻅第 14 章《⽤于交易的⽂本数据——情感分析》),并将其映射为⼀个标量或向量输出
- 多对多:机器翻译或视频帧标注将输⼊向量序列映射到输出向量序列,可以是同步⽅式(如图所示),也可以是异步⽅式。多变量时间序列的多步预测也是将多个输⼊向量映射到多个输出向量
展开一个带循环的计算图
RNN中相邻两层的关系可表示为:
\[y_t=g(W_{hh}h_{t-1}+W_{xh}x_{t})\]LSTM 架构的 RNN
⼀个典型的 LSTM 单元包含四个参数化层,这些层通过转换和传递向量来相互作⽤并与单元状态交互。这些层通常包括⼀个输⼊⻔、⼀个输出⻔和⼀个遗忘⻔,但也存在⼀些变体,可能包含额外的⻔或缺少某些机制。
⽤于条件⻛险因⼦和资产定价的⾃编码器
⽤于⾮线性特征提取的⾃编码器
⾃编码器是⼀种专⻔⽤于学习新表示的神经⽹络,它以有助于解决其他任务的⽅式对输⼊进⾏编码。更具体地说,该⽹络可以看作由⼀个编码器函数$h=f(x)$和一个解码器函数$g(\cdot)$构成,编码器从输入$x$中学习隐藏层参数,解码器学习从编码$h$中重构输入:
\[x=g(f(x))\]泛化线性降维
降维通过限制隐藏层的⼤⼩来创建⼀个“瓶颈”,从⽽实现有损压缩,这种⾃编码器被称为⽋完备⾃编码器,其⽬的是通过最⼩化形式为$L$的损失函数来学习数据最显著的特性:
\[arg \min L(X,G(f(x)))\]根据任务的不同,⼀个仅包含单个编码器和解码器层的简单⾃编码器可能就⾜够了。然⽽,正如其他神经⽹络⼀样,拥有更多层的深度⾃编码器可能具备多项优势。这些优势包括:能够学习更复杂的编码,实现更好的压缩效果,并且在计算量和训练样本更少的情况下完成这些任务,当然,这也会⾯临过拟合的固有⻛险。
⽤于图像压缩的卷积⾃编码器
全连接前馈架构并不适合捕捉具有⽹格状结构的数据中常⻅的局部相关性。因此,⾃编码器也可以使⽤卷积层来学习层次化的特征表示。卷积⾃编码器利⽤卷积和参数共享来学习层次化的模式和特征,⽽不受其位置、平移或⼤⼩变化的影响。
使⽤正则化⾃编码器管理过拟合
正则化可以通过约束⾃编码器的学习过程,并迫使其⽣成有⽤的表示来帮助解决过拟合问题。理想情况下,我们可以精确地将模型的容量与数据分布的复杂性相匹配。但在实践中,最优模型通常是将(有限的)过剩容量与适当的正则化相结合。为此,我们在训练⽬标中加⼊⼀个依赖于编码层$h$权重的稀疏性惩罚项$\Omega(h)$:
\[L(X,G(f(x)))+\Omega(h)\]使⽤降噪⾃编码器修复损坏的数据
使⽤损坏的输⼊是另⼀种防⽌⽹络学习恒等函数的⽅法,它能促使⽹络从数据中提取信号或显著特征。降噪⾃编码器已被证明能够学习原始数据的数据⽣成过程,并在⽣成模型领域中⼴受欢迎:
\[L(x,g(f(\tilde{x})))\]⽤于时间序列特征的 Seq2seq ⾃编码器
循环神经⽹络(RNN)是为处理序列数据⽽开发的,这类数据的特点是数据点之间存在纵向依赖关系,且这种依赖关系可能跨越很⻓的范围。类似地,序列到序列(seq2seq)⾃编码器旨在学习适合序列⽣成数据特性的表示。Seq2seq ⾃编码器基于 RNN 的组件,如⻓短期记忆(LSTM)⽹络或⻔控循环单元。它们学习序列数据的表示,并已成功应⽤于视频、⽂本、⾳频和时间序列数据。
利⽤⽣成对抗⽹络(GAN)⽣成合成时间序列数据
GAN 的⽬标是⽣成:它们在给定简单输⼊(甚⾄可以是随机数)的情况下,能产⽣复杂的输出,例如逼真的图像。它们通过对可能的输出进⾏概率分布建模来实现这⼀⽬标。这个概率分布可以有很多维度,例如,图像中的每个像素、⽂档中的每个字符或词元,或时间序列中的每个值,都可以是⼀个维度。因此,该模型能够⽣成极有可能代表该类输出的样本。
GAN的原理
GAN 的关键创新在于⼀种学习数据⽣成概率分布的新⽅法。该算法在两个分别称为“⽣成器”和“判别器”的神经⽹络之间,建⽴⼀场竞争性或对抗性的博弈。
- ⽣成器的⽬标:将随机噪声输⼊转换为特定类别对象的虚假实例,例如⼈脸图像或股票价格时间序列
- 判别器的⽬标:从⼀组包含⽬标对象真实样本的训练数据中,区分出⽣成器制造的虚假输出
- GAN 的总体⽬标:让两个⽹络在各⾃任务上都变得越来越好,直到⽣成器产⽣的输出连判别器也⽆法与原始样本区分开
循环⽣成对抗⽹络(RGAN)和循环条件⽣成对抗⽹络(RCGAN)是两种旨在合成逼真的实值多元时间序列的模型架构,作者的⽬标应⽤领域是医疗,但该⽅法对于克服历史市场数据的局限性也可能极具价值。
作者成功⽣成了在视觉上和量化上都令⼈信服的逼真样本。此外,他们还通过使⽤合成数据(包括合成标签)来训练模型,评估了这些数据的质量,结果表明在真实测试集上的预测性能仅有轻微下降。作者还展示了 RCGAN 在⼀个早期预警系统中的成功应⽤,该系统使⽤了⼀个包含 17000 名重症监护室患者的医疗数据集。因此,作者证明了 RCGAN 能够⽣成可⽤于监督式训练的时间序列数据。在本章的“TimeGAN——⽤于合成⾦融数据的对抗性训练”⼀节中,我们将把这种⽅法应⽤于⾦融市场数据。
TimeGAN 架构:结合对抗式训练和监督式训练
TimeGAN 通过将我们熟悉的 DCGAN 示例中对真实序列和合成序列的⽆监督对抗损失,与针对原始数据的逐步监督损失相结合,明确地融⼊了时间序列的⾃回归特性。其⽬标是奖励模型学习历史数据中存在的、从⼀个时间点到下⼀个时间点的过渡分布。
此外,TimeGAN 包含⼀个嵌⼊⽹络,该⽹络将时间序列特征映射到低维潜在空间,以降低对抗空间的复杂性。其动机在于捕捉通常维度较低的时间动态驱动因素。TimeGAN 架构的⼀个关键要素是,⽣成器和嵌⼊(或⾃编码器)⽹络都负责最⼩化监督损失,该损失衡量模型学习动态关系的好坏程度。因此,模型学习到的潜在空间是以促进⽣成器忠实再现历史数据中观察到的时间关系为条件的。除了时间序列数据,该模型还可以处理不随时间变化或变化频率较低的静态数据。
TimeGAN 架构的四个组成部分
TimeGAN 架构将对抗性⽹络与⾃编码器相结合,因此包含四个⽹络组件:
- ⾃编码器:嵌⼊⽹络和恢复⽹络
- 对抗⽹络:序列⽣成器和序列判别器组件
作者强调通过三种不同的损失函数对⾃编码器和对抗⽹络进⾏联合训练。重构损失⽤于优化⾃编码器,⽆监督损失⽤于训练对抗⽹络,⽽监督损失则⽤于强制实现时序动态。得益于这⼀关键洞⻅,TimeGAN 能够同时学习编码特征、⽣成表示以及跨时间迭代。更具体地说,嵌⼊⽹络创建了潜在空间,对抗⽹络在该空间内运⾏,⽽监督损失则同步了真实数据和合成数据的潜在动态。
该架构的训练分为三个阶段:
- 使⽤真实时间序列训练⾃编码器,以优化重构
- 使⽤真实时间序列优化监督损失,以捕捉历史数据的时间动态
- 联合训练四个组件,同时最⼩化所有三个损失函数
其中,嵌⼊任务起到了正则化对抗性学习的作⽤,因为它降低了维度,⽽监督损失则约束了⽣成器的步进动态。
深度强化学习:构建交易智能体
解决强化学习问题的主要挑战
信⽤分配
在强化学习中,奖励信号的出现可能远晚于导致该结果的⾏动,这使得将⾏动与其后果联系起来变得复杂。例如,当⼀个智能体反复进⾏ 100 种不同的持仓和交易时,如果它只知道投资组合的回报,它如何能意识到某些持仓的表现远好于其他持仓?
信⽤分配问题,就是尽管存在这些延迟,仍要准确评估在特定状态下⾏动的收益和成本所⾯临的挑战。强化学习算法需要找到⼀种⽅法,将正⾯和负⾯结果的功劳分配给可能参与其中的众多决策。
探索与利⽤
强化学习的动态和交互特性意味着,智能体需要在经历所有相关轨迹之前,就对状态和⾏动的价值进⾏评估。虽然智能体在任何阶段都能选择⾏动,但这些决策都基于不完整的学习,却能让智能体初步洞察其⾏为的最佳选择。
对⾏动价值的部分可⻅性带来了决策⻛险,即智能体可能只会利⽤过去的(成功)经验,⽽不会探索未知领域。这种选择限制了智能体的接触范围,使其⽆法学习到最优策略。
强化学习算法需要在这种探索与利⽤之间进⾏权衡:探索过少可能会产⽣有偏差的价值评估和次优策略,⽽利⽤过少则从⼀开始就阻碍了学习的发⽣。
关于强化学习的更多内容请浏览:强化学习(reinforcement learning)









