我们知道,深度学习技术的发展一定程度上依赖于数据集的规模,然而随着数据集的规模不断变大,对其中的样本进行标注将变得越来越昂贵。而自监督学习方法就是针对这一问题的,该类方法无需标注数据,可以直接从样本数据自身中学习出一些有效的表征,而这些样本的表征则可以继续帮助下游任务的训练。由于自监督学习可以很好地利用海量的无标注样本,这类方法目前已经成为了深度学习领域的一大热点。
对比学习(contrastive learning)是自监督学习的一大分支,它通过构造不同的样本对,来让模型在对比中学习到样本之间的差异,进而获得对于样本的表征。这次我们就介绍一种对比学习方法, Contrastive Predictive Coding (CPC),以及它所提出的InfoNCE损失函数在金融数据中的应用。
Contrastive Predictive Coding
首先说一下CPC方法的大体思路:CPC希望能从序列样本中提取出一种共享信息(shared information),这种信息是随着序列 缓慢变化 并 贯穿始终 的,因此论文中也称其为“slow features”。举一些例子,比如一段讲话的语音序列,讲话的语调可以看做是slow feature,再比如一段文本的中心思想等,它们一般都不会在序列中剧烈变化。如果能够捕捉到这类信息,那幺就可以很好地用于对未来序列的预测。
要想提取这类信息,一种容易想到的做法就是构建一个encoder-dedcoder架构,通过重构(或生成)序列,来得到encoder对于序列的表征。然而,这种方法通常是利用mean-squared error或者cross-entropy这类loss函数,去精确地生成样本序列的每一个局部细节,这样不仅要求模型要足够复杂,还可能导致模型将建模能力花费在对于局部细节的生成上,而忽略了序列中的slow features,使得最终的效果并不一定好。也就是说,对于目标样本x,像encoder-dedcoder架构那样, 直接通过模型从表征c中重构x并不一定是最优的 。因此CPC换了一个思路,我们先不用提取到的表征c去生成样本x,而是 让c和x之间的相关性更大 ,这样我们就认为提取到的c包含了更多的共享信息。
具体来说,CPC的任务如上图所示,对于一个序列 ,目标是根据从 中提取出的表征 (先提取出 的局部表征 ,然后用RNN聚合得到 的全局表征 ),然后从中预测未来的序列 。为了抽取到对于预测有效的表征,CPC通过 互信息 (mutual Information, MI)来度量 和 之间相关性,公式如下式所示,并希望的两者的互信息最大:
InfoNCE
CPC的目标是最大化互信息,然而在实际中我们是很难通过上式直接计算互信息的,因为实际的 和 往往是高维连续的变量,这样我们就无法通过有限的样本集去准确估计密度比 。因此,在这里CPC直接用一个神经网络 去近似这个密度比,即
这里的 代表正比于,考虑到密度比大于零,这里的 采用一个简单log-bilinear形式:
其中 代表从未来样本 中提取的局部表征,该函数形式可以理解为:将表征的线性变换 作为对于未来的某种预测,我们用这个预测和未来表征 之间的内积来估计互信息,并希望它越大越好。
有了函数 来估计密度比,我们就可以按照机器学习的方式,通过构造loss函数来对 进行优化,从而实现最大化互信息的目标,CPC构建的loss函数叫做InfoNCE(NCE代表Noise Contrastive Estimation),形式如下:
其中样本集 是N个随机挑选的样本,包含1个从 采样的正样本(即 就是表征 对应的未来序列),和N-1个从分布 中采样的负样本(即样本 是从样本集的第 个step中随机挑选的)。
接下来,我们就证明,对InfoNCE进行优化,其实是在 增大互信息 的下界 ,即
Step1 : 证明对于最优的InforNCE中函数 ,满足
先看一下这个loss的形式,可以发现它类似于一个分类问题的交叉熵 ,可以把 看做是 通过一个softmax预测出分类为正样本的概率 (即 ),那幺对InfoNCE进行优化,其实就是在优化一个分类问题(N个样本可以看作是N个类,我们的目标是最大化正样本类的预测概率),当InfoNCE loss达到最优时,这个 softmax概率就应该为正样本的实际概率 ,因为样本集 中有且仅有1个正样本,根据概率论可知, 中第 个样本 为 所对应的正样本 的概率为:
可以看出, 为正样本的实际概率同样可以写成softmax的形式。当InfoNCE达到最优时, 应该等于该实际概率,这时有 。
Step2 :证明对于最优的InfoNCE loss,满足
根据step1的结论,最优的InfoNCE loss可以写做
其中第2步到第3步是因为 是从整个数据集中随机挑选的,样本服从数据集的先验分布,因此这里可以近似为样本 的期望,又因为 和 相互独立,因此 ,可以推出第4步;而对于正样本 ,应该满足 (即 和 的共同出现的可能性更大,因为 本身就是 的历史表征),可以推出第5步;最后整理可以推出不等式 。
通过上面的证明我们发现,InfoNCE其实就是在优化互信息 的下界,用于step2中的第3步是对于期望的估计,因此 InfoNCE在N越大时估计的下界就越精确 。
InfoNCE与MINE的联系
接下来我们将分析InfoNCE与另外一项互信息方面的重要工作( Mutual Information Neural Estimation , Mine)之间的联系。先介绍一下MINE这项工作,前面已经提过了,对于高维连续的变量,通过有限数量的样本是很难直接估计他们的互信息的,而MINE则利用了一种神经网络的方法实现了估计。下面将简要介绍MINE的做法,想深入了解的同学可以看原论文。
回忆一下,变量 和 的互信息形式为:
接下来通过推导给出互信息的另外一种表示形式。
我们知道对于两个分布 和 ,其KL散度(Kullback-Leibler divergence)可以写做:
这里引入KL散度的 Donsker-Varadhan (DV) 表示形式,KL散度还可以写成下面的形式:
其中 是从变量空间到实数域的一个任意函数,而互信息就是通过该函数所能达到的上确界。关于该形式的证明这里就不展开了,感兴趣的同学可以看这篇文章。
到这里可能大家已经想到MINE是怎幺用神经网络来估计互信息 了,如果我们令 是联合分布 , 是边缘分布乘积 ,那幺互信息 就有如下形式:
其中 是神经网络的参数空间, 是以 为参数的神经网络。MINE的做法就是将一个神经网络作为函数 ,然后通过梯度上升来逼近上确界,从而实现对于互信息的估计。
现在来看InfoNCE和MINE之间的联系,对于InfoNCE loss 中的函数 ,我们令 ,则有
由于样本集 中有1个正样本和N-1个负样本,因此可以得到第2步;由 恒大于等于0可以得到第3步;最后整理可以得到第4步的形式,若将该式中的求和平均看成是取期望,然后与MINE的公式进行对比,发现只相差了一个常数(感觉这里有些疑问,因为MINE中是 ,而这里推出来的是 , 和 是否可以直接交换?),这意味着其实 对InfoNCE loss进行优化,在本质上等价于在MINE中用梯度上升去估计上确界 。
InfoNCE在金融中的应用
这里再介绍一篇将InfoNCE应用于股票预测的工作,这篇论文的出发点是在股票的低频预测(例如预测日频涨跌)中如何更好地结合高频数据(例如分钟数据)。我们知道高频数据的量很大。其中会包含一些低频数据中没有的细节信息,但是相对应的噪声也很大,如果能从高频数据中提取出一些有效的细节信息补充到低频数据中,那对于模型预测一定是有帮助的。而接下来介绍的这篇工作 Contrastive Multi-Granularity Learning Framework (CMLF)就利用对比学习的思想,通过基于InfoNCE的loss来学习高频数据的有效表征。
该论文的整体思路如下图所示,论文提出了两种对比学习机制: 跨粒度对比 (cross-granularity contrast)和 跨时间对比 (cross-temporal contrast)。简单来说,跨粒度对比是为了学习不同粒度数据之间的一致性(比如日频和分钟频数据虽然粒度不同,但是走势应该是一致的);跨时间对比是为了学习历史与当前数据的相关性(和上面CPC的思路类似)。
模型设计
现在具体介绍模型中对比学习机制的设计,如上图所示,其中 和 分别是粗粒度和细粒度数据,模型的目标通过feature encoder分别从粗细粒度的数据中学习到好的表征。
1. 跨粒度对比
跨粒度对比从 粗粒度-细粒度样本对 中来学习数据的一致性,首先利用encoder分别从粗粒度和细粒度数据中抽取特征:
然后基于InfoNCE构建跨粒度对比的loss函数
其中 , 是随机挑选的 个样本集合(encoder 在t时刻从随机细粒度样本 中提取的特征)。
2. 跨时间对比
类似于CPC,跨时间对比学习从 历史-当前样本对 中学习数据的时间相关性,为了提取历史数据的表征,这里用了一个自回归模型(例如RNN)来聚合历史信息 ,其中 表示历史特征, 代表粗粒度和细粒度特征的拼接。那幺对比loss是
其中
3. 多粒度特征融合
在通过前面的对比学习方法抽取到不同粒度数据的特征后,我们需要将特征融合在一起,然后用于接下来的预测,容易想到的方式有相加、拼接等方法,这里CMLF自定义了一套特征融合机制,借助于一些技术面指标和自定义指标,通过学习门控函数来实现特征的融合。具体如下:
其中 是一些技术面指标的集合,CMLF用到的有:Upper and lower band of Bollinger Bands、Money Flow Index 、 Moving Average Convergence Divergence。另外 和 是论文提出的指标,其实就是上面两个对比学习中正样本在训练好的判别器 上输出的值,具体如下式所示,我们认为这两个指标是discriminative scores,分别代表了在跨粒度和跨时间上的相关性,其中 通过度量不同粒度数据的一致性,反映了价格的短期波动情况(越不一致,代表当前的价格波动越大), 通过度量历史和当前数据的相关性,反映了长期波动情况。
用一个RNN将每个step的融合特征 再聚合起来,就可以得到表征 ,最后让 过一个线性层就可以得到对于股票收益率 的预测。
4. 目标函数
和其它模型类似,CMLF也是按照pre-training + fine-tuning的方式进行训练,不过有别于CPC,CMLF在预训练的时候除了上面的对比loss以外,还加入了对于未来序列的预测,如下式所示。这样其实也可以将预训练看成是 加了对比学习正则项的监督学习训练 。
在微调阶段,模型固定encoder 和 、以及判别器 和 ,然后继续通过监督学习去预测未来的收益率。
实验
下面介绍实验部分,CMLF在真实股票市场数据上进行了实验,实验数据设定如下:
数据:日频(粗粒度)、15分钟频率(细粒度)的价量数据
标的:三个主要市场指数CSI300(沪深300)、CSI800(中证800)和NASDAQ100的成分股
特征:high, open, low, close, volume-weighted average price and trading volume
1. 股票趋势预测
模型在股票价格预测上的表现如下表所示,通过与其它baseline以及CMLF的一些变体的比较,我们可以看出CMLF中各个模块的有效性。
Coarse/Fine/Multi-Grained RNN 代表直接用粗/细/拼接数据来训练模型,模型架构与CMLF相同,但是没有引入对比学习来辅助训练。
CMLF w/o CT(CG) 代表在预训练时移去对应的cross-granularity (cross-temporal) 对比loss项,并相应地在特征融合时令 ( )为0。
CMLF w/o AMFM 代表不做特征融合, w/o MII代表在融合只用技术面指标,不用论文提出 和 指标。
2. 市场模拟交易
为了进一步说明模型的有效性,该论文还根据模型的预测结果构建了交易策略,在历史数据上做了回测模拟。这里采用的投资策略是 TopK-Drop ,基本思路是每个交易日根据模型的预测结果,等权重持有top K分数的股票,卖出Drop支最差的股票,策略的具体流程可以看这个文档。回测时考虑了交易手续费、涨跌停等实际情况,细节可以看论文实验部分,最终的结果如下所示,其中benchmark代表CSI300指数的收益。
3. 股票表征可视化
为了证明对比学习可以抽取出有效的股票特征,论文随机选择了测试集的一个交易日,然后利用t-SNE方法可视化了该交易日一些股票的特征表示,如下图所示,图中画出了CSI300股票中当日收益率排在top 20%和bottom 20%的股票的特征表示,相比于没有使用对比学习的Multi-Grained RNN,CMLF抽取的特征可以更好地区分不同趋势的股票。
总结
这篇文章主要介绍了对比学习中InfoNCE的原理及其在股票预测中的相关工作,正如CPC论文中说的那样,作为一种自监督学习方法,对比学习不需要像生成式模型那样去重构样本的每一个细节,而是将目标放在分辨正负样本上面,这样就可以减小模型的负担、避免过拟合;而CMLF则利用InfoNCE,通过在原有的预测loss上面增加对比学习正则项的方式,使得模型可以更好地从多粒度数据中抽取出有效的表征,从实验结果可以看出,如果能找到合适的正负样本对,对比学习可以有效地提升模型在金融数据上的训练效果。
参考资料
[1] Oord A, Li Y, Vinyals O. Representation learning with contrastive predictive coding[J]. arXiv preprint arXiv:1807.03748, 2018.
[2] Hou M, Xu C, Liu Y, et al. Stock Trend Prediction with Multi-granularity Data: A Contrastive Learning Approach with Adaptive Fusion[C]//Proceedings of the 30th ACM International Conference on Information & Knowledge Management. 2021: 700-709.
[3] Belghazi M I, Baratin A, Rajeshwar S, et al. Mutual information neural estimation[C]//International Conference on Machine Learning. PMLR, 2018: 531-540.
[4] Blog: Explanation of Mutual Information Neural Estimation
Be First to Comment