作者:齐国君

大家看到这个标题,一定有个疑问:傅立叶变换能用来炒股发财?

事实上,几年前就有公司或者基金把深度学习的最新方法用来做股价预测,用来在股市上一搏了。

比如就有国内的研究人员用LSTM 这种递归神经网络来预测风云莫测的中国股市 。

一些朋友也在私下里告诉过笔者,某美国的交易机构就用LSTM来做自动化高频交易,在大规模资金的帮助下,实现了日进斗金;当然,实际使用时要克服很多工程问题,比如要选取合适的输入信号、实现和交易所的高速事实通讯等。这些都不在本文探讨之类。所以,想读完本文就可以成为亿万富翁的朋友可以散了。

我们这里用炒股做个引子,真正想介绍的是如何深入把经典的信号处理技术引入到深度学习技术中,用来分析各种序列数据(sequence data),比如股票价格、金融信号等,乃至更为一般的物理、经济、社会等活动的动态信号,抽象出有价值的模式,进而对其进行预测和分析。

如果大家对技术细节感兴趣,可以参考我们在ICML和 KDD上发表的论文

Hao Hu§, Guo-Jun Qi*. State-Frequency Memory Recurrent Neural Networks, in Proceedings of International Conference on Machine Learning (ICML 2017), Sydney, Australia, August 6-11, 2017. [pdf]
Liheng Zhang§, Charu Aggarwal, Guo-Jun Qi*, Stock Price Prediction via Discovering Multi-Frequency Trading Patterns, in Proceedings of ACM SIGKDD Conference on Knowledge Discovery and Data Mining (KDD 2017), Halifax, Nova Scotia, Canada, August 13-17, 2017 [pdf]

长期还是短期投资?
我们以资本市场的投资为例,来引出为什么要用傅里叶变换的方法对不同周期的价格信号进行分析。

所有人在进入股市前,都首先要做出一个根本的投资策略:究竟投资有潜力的股票、进而获得长期回报,还是打打短线,赚一票就走路?显然,对于不同的策略,用来预测的信号也是不一样的。

对长期投资者来说,短期的价格波动不应该对其预测的长期股价产生太大影响,这类投资者更应该关注的是股价在更大周期上的波动;用更专业的术语来说就是低频率、长周期的股价信号应该对预测长期股价更有价值。

对短期投资者、特别对高频交易的投资者来说,他们更关心的是短期的价格波动,进而以小步快跑的方式获得累积的收益。也就是说,这类打短线的投资者更对高频地、短周期的股价波动敏感。

从状态记忆(State Memory)到多频率状态记忆(State-Frequency Memory)
炒股的例子告诉我们,对特定的应用,不同频率上的信号所起到的作用是不一样的。这类问题在很多工程应用中都有所体现。

比如对特定物体进行跟踪。作为一个经典的预测问题,物体跟踪通过特定的观察量(比如雷达、激光雷达等)对某个物体实际的位置进行持续的预测。这个时候,找到符合物体运动周期的特征,并用这些特定频率上的特征对运动进行分析就非常重要。

同样地,在分析、预测社会活动时,这种特定周期或频率的特征模式往往也是非常常见的。比如,在分析交通流量时,上下班周期、在一个星期内不同天的周期等,对交通流量的分析预测都会起到非常关键的作用。找到并针对性地量化分析这些周期对预测未来趋势的影响,往往是分析序列数据的关键。

这些都启发我们:在对信号进行预测时,需要对不同频率的信号区别对待,针对特定的任务加以合理应用。

640.jpg

而经典的LSTM仅仅对时间信号的状态向量做为记忆元(Memory Cell)进行建模,而忽略了另一个重要维度频率。而我们将状态(state)-频率(frequency)联合起来,形成一个状态-频率矩阵(State-Frequency Matrix,SFM) 而非仅仅用一个向量来表示状态

矩阵中的每个元素,用它的行来索引不同状态:每个状态在物理意义上可以理解成代表某个引发信号波动的因子。另一方面,用SFM的列来检索不同的频率,代表不同因子对不同频率的影响。

有了SFM做为记忆元,我们就可以像一般LSTM里那样定义输入门、输出门、遗忘门和控制信息的流向。特别地,如果我们对高频、短周期信号(比如短期高频的交易时)更关心,对应SFM矩阵的高频部分的信息流就会被输入门、输出门选定出来对信号序列进行建模。反之,如果我们对低频的、长周期信号(比如长期投资时)更有兴趣,那么我们就可以让模型聚焦在用SFM中的低频部分进行分析。

具体SFM矩阵中高、低频分量的选择,将由针对特定问题所定义的目标函数,通过训练的方法来自动完成。比如,我们可以选择优化高频交易下的预测准确率或者收益,这时SFM中高频部分会起到更大的作用,从而被选中。

自适应的定义频率
另外一个重要的问题是,我们往往在事先无法确定那个频率上的分量更重要,这是我们可以通过允许模型以自适应的方式来确定这些频率。具体来说,我们可以把这些频率分量 定义为输入、输出的函数来机器学习的方法来确定合适的频率。

640.jpg
同时意味着,随时具体某个任务外界环境的变化,比如出现某个特定金融事件,使得市场发生较平常更激烈动荡时,我们希望SFM的高频对应着更高的频率,来适应市场的变化。

这种自适应的调节分析频率的能力,有利于我们对那些非平稳(non-stationary)的序列数据进行建模、分析。

下面图中可以看到在对某个时间序列建模时,频率自适应模型A-SFM是如何随时间不断地调整其覆盖的频率段的。

640.jpg
更多的结果和详细的介绍,大家可以参看我们的论文。

Hao Hu§, Guo-Jun Qi*. State-Frequency Memory Recurrent Neural Networks, in Proceedings of International Conference on Machine Learning (ICML 2017), Sydney, Australia, August 6-11, 2017. [pdf]
Liheng Zhang§, Charu Aggarwal, Guo-Jun Qi*, Stock Price Prediction via Discovering Multi-Frequency Trading Patterns, in Proceedings of ACM SIGKDD Conference on Knowledge Discovery and Data Mining (KDD 2017), Halifax, Nova Scotia, Canada, August 13-17, 2017 [pdf]

源代码
希望自己动手尝试的朋友们,可以直接去我们的github主页下载源码了。


https://github.com/hhkunming/State-Frequency-Memory-Recurrent-Neural-Networks

https://github.com/z331565360/State-Frequency-Memory-stock-prediction


转自知乎:https://zhuanlan.zhihu.com/p/27213419