机器学习可以预测汇率变化吗?:作为一个在美国生活的印度人,Neelabh 和家乡之间存在恒定的金钱流动。如果在市场中,美元更加强势,则印度卢比相对贬值:-机器学
作为一个在美国生活的印度人,Neelabh 和家乡之间存在恒定的金钱流动。如果在市场中,美元更加强势,则印度卢比相对贬值,因此从印度购买 1 美元需要更多的卢比。如果美元相对弱势,则购买 1 美元需要的卢比会更少。
如果可以预测第二天的美元的价值,那么可以以此为参考做出更好的决策,最小化风险并最大化收益。了解到神经网络的强大,尤其是循环神经网络,Neelabh 想到了预测美元和卢比的兑换汇率的点子。
在这篇文章中,我们将告诉你如何利用时序分析和机器学习时序模型来预测未来的兑换汇率变化。
序列问题
我们从序列问题的讨论开始,最简单的序列机器学习问题是「一对一」问题。
在这种问题中,向模型输入一个数据或一个向量,模型会对输入生成一个预测结果。无论是回归、分类还是通过卷积网络的图像分类都属于这个类型。通过扩展这种模式,我们可以将其改造成利用过去的输入和输出进行学习的模型。
一对多问题是一对一问题的扩展,因为一对一问题的模型只有一个输入和输出。而现在模型的输出再馈送到模型作为新的输入,这样模型就会生成多个输出,下面我们将了解一对多为什么又称为循环神经网络。
由于连接方式构成有向循环,循环神经网络可以处理序列问题。就是说,循环神经网络可以在每一次的迭代中保持网络形态不变的前提下,将输出作为下一步的输入。从编程的角度上说就像是利用确定的输入和一些隐藏变量,在固定不变的程序上保持运行。最简单的循环神经网络,将时间轴展开之后,可以看成一个全连接神经网络。
RNN Unrolled Time
在这个单变量的例子中,只包括了两个权重。权重 u 和当前输入 x_t 相乘,权重 w 和上一步输出 y_t-1 相乘。这个利用过去输出和当前输入的公式很像指数加权移动平均法(exponential weighted moving average,EWMA)。
只要将网络单元一个接一个堆叠起来,就可以轻易建立一个深度循环神经网络。简单的循环神经网络可以很好的处理短期记忆模型,但是在长时依赖项中,模型将会遇到根本的困难。
长短期记忆神经网络(Long Short-Term Neural Network)
之前说过,简单的循环神经网络无法捕捉长期依赖序列中的特征,是一个根本的困难。这个问题很重要,因为我们希望以后我们的 RNN 可以分析文本和回答问题,在这些任务中很自然的需要分析长序列的文字。
90 年代末,Sepp Hochreiter 和 Jurgen Schmidhuber 提出了 LSTM,这种模型对长期依赖性的处理要比 RNN、隐马尔可夫模型和其他序列学习方法要优秀地多。
LSTM 模型将各种运算集合在一个单元中,LSTM 有一个内部状态变量,并且该状态变量可以从一个单元传递到另一个 LSTM 单元中,同时通过门运算进行修改。
1. 遗忘门
这是一个 Sigmoid 层,以 t-1 时刻的输出和 t 时刻的当前输入为参量串接到一个单张量中,加上线性变换,最后用 sigmoid 函数变换。由于 sigmoid 函数的性质,这个门的值被限定在 0 和 1 之间,该值与内态的值相乘,这也它会被叫做忘记门的原因。如果 ft=0 那么过去的内态将被忽略,如果 ft=1 那么内态将被完整的传递。
2. 输入门
输入门以过去的输出和当前输入为参量并馈送到一个 sigmoid 层。同样,这个门的输出值也是在 0 和 1 之间,输入门的值将和候选层的输出值相乘。
这个层对当前输入和过去输出应用了双曲正切函数作为变换(激活函数),结果将返回一个与内部状态相加的候选向量。
内态通过这个规则不断更新:
过去的状态和遗忘门的值相乘,然后加上输出门所给出新的候选状态。
3. 输出门
这个门控制多大比率的内部状态将被传递到输出,这和其它门的工作方式类似。
以上描述的三个门有互相独立的权重和偏置,因此,网络将分别学会,保持过去输出的概率、保持当前输入的概率以及将内态传递给输出的概率。
在一个循环神经网络中,不仅需要输入数据,还需要输入网络过去的状态。举例来说,如果我喊「嘿!我开车的时候发生了不得了的事!」这时你的大脑的一部分将把这句话分解成,「噢,Neelabh 正在给我讲一个故事,这个故事的主人公是 Neelabh 并且故事发生在路上。」然后,你需要将我刚才告诉你的话记住一部分。在接下来的故事中,你都必须随时保留部分听过的话的印象,才能逐渐明白整个故事。
另一个例子是关于是关于视频加工的,同样需要用到循环神经网络。大多数情况下,一部电影中,当前画面所描述的内容相当依赖于上一个画面的内容。经过一段时间的训练后,循环神经网络将学会保留过去画面的哪些部分和保留的比率,以及保留当前画面的多少信息,丰富的结构使其拥有比简单前馈神经网络强大得多的性能。
时间序列预测
RNN 的强大功能令我印象深刻,因此我决定使用 RNN 预测美元和卢比的兑换汇率。这个计划中使用的数据集是从 1980 年 1 月 2 日到 2017 年 8 月 10 日的兑换汇率的数据。稍后我将给出链接供你们下载和实验。
数据集展示了 1 美元相对卢比的价值,我们一共拥有总数目为 13 730 条从 1980 年 1 月 2 日到 2017 年 8 月 10 日的数据记录。
在这段期间,1 美元的卢比价值总体在上升。不难看到,在 2007-2008 年之间,由于经济大衰退,美国经济经历了一次重大的危机,这个图描绘了从 20 世纪末期到 21 世纪早期世界市场经济衰退的轨迹。
这段期间内,全世界的经济发展状况不是很好,特别是北美和欧洲(包括俄罗斯),都陷入了明显的衰退。不过,与此同时,很多新兴的经济体受到的冲击要小得多,特别是中国和印度,在这场灾难中,他们的经济依然得到了大幅增长。
训练集和测试集的分割
现在,为了训练模型,我们需要将数据集分成测试和训练集。在做时间序列时,以明确的日期为界限将数据集分为训练和测试两部分是很重要的。毕竟,你不会希望你的测试数据的时间排在你的训练数据之前。
在我们的实验中将定义一个日期,比如 2010 年 1 月 1 日,作为分界日期。训练数据的日期从 1980 年 1 月 2 日到 2009 年 12 月 31 日,包括大约 11 000 个数据点。
测试数据的日期从 2010 年 1 月 1 日到 2017 年 8 月 10 日,包括大约 2700 个数据点。
接下来要将数据集归一化,即将训练数据转换格式并将测试数据按同样的格式映射到训练数据上,这样可以避免假定知道测试数据的规模带来的影响。归一化或者数据转换意味着新变量的定义域将限定在 0 和 1 之间。
神经网络模型
一个全连接模型即将一个输入变换成一个输出的简单神经网络,它的构建就如同简单的回归模型那样通过前一天的价格预测第二天的价格。
我们以均方差作为损失函数,并使用随机梯度下降优化算法。经过足够多代的训练,将能开始寻找足够好的局部最优解。下方是全连接层性质的总结。
经过 200 个 epoch 的训练,或者 eraly_callbacks 的出现(无论哪个先出现),这个模型就开始尝试学习数据的模式和行为。由于我们区分了训练集和测试集,现在我们可以预测测试数据集并和真实值比较。
正如你所看到的,模型的表现并不好。基本上它只是重复过去的值,只有轻微的变化。全连接网络无法从单一的过去值预测未来的值。接下来我们尝试循环神经网络,看看它工作的如何。
长短期记忆
我们使用的周期循环模型是一个单层序列模型,层内使用 6 个 LSTM 节点,输入的维度设为(1,1),即网络的单个输入只含一个特征值。
最后一层是一个密集层,损失函数为均方误差函数,并且采用随机梯度下降作为优化器。我们将模型训练了 200 个 epoch,并采用了中断训练回调。模型的性质总结在上方展示。
这个模型几乎学会了将这些年的数据完全重现,并且在一个简单的前馈神经网络的辅助下,不出现延迟。不过,它仍然低估了一些确定的观察值,模型仍然有很大的改进空间。
模型的改进
这个模型还可以做很多的改进,通过改进优化器的方法以改变模型结构的方式可以有很多种。还有另一种很重要的改进方法是来自数据流管理系统的滑动时间窗口法。
这种方法源于只有最近的数据才是最重要的观点,即可以从一年时长的数据中尝试预测下一年第一天的值。就从数据集中获取重要模式并高度依赖于过去观察值而言,滑动时间窗口法是非常有用的。
你们也可以按自己的方式尝试去改进模型,看看模型会如何应答这些变化。
数据集
我已经把数据集公布在 github 项目中,请随意下载,尽情使用吧。
GitHub 地址:https://github.com/neelabhpant/Deep-Learning-in-Python
有用的学习资源
我个人一直追随着几位我最喜欢的数据科学家,比如 Kirill Eremenko,Jose Portilla,Dan Van Boxel(更知名的是 Dan Does Data 这个名号),还有很多。他们大部分都有自己的博客并在上面讨论今天主题的各方面,如 RNN,CNN,LSTM,甚至还有最近出现的新技术,神经图灵机。
尽可能去跟进各种人工智能大会的新闻。顺便提一下,有兴趣的可以关注,Kirill Eremenko 即将带着他优秀的队伍在 San Diego 作关于机器学习,神经网络和数据科学的报告。
结论
通过学习过去行为的主要特征并区分哪些特征才是对预测未来所需,LSTM 模型确实是很强大的工具。已经有几种应用管法广泛使用了 LSTM,比如语音识别、作曲、手写字识别,甚至还有我最近研究中的对人体移动和交通运输的预测实验。
对于我们而言,LSTM 就是一个拥有自己的记忆并能像天才一样做出精准决策的模型。
理论上,人能预测的,只要收集到足够的数据,机器就能模拟出人的思考分析过程。但是像汇率这样的受政策、突发事件等黑天鹅影响较大的东西,如何实时高效的收集数据信息反而更重要。在数据一样的情况下,至于是机器预测还是人工预测都是一样的效果,如果人也能处理过来所有的数据
可以的,先从相关背景谈起。对于量化经济而言,对外汇市场的分析和预测通常基于汇率历史数据,采用相应的数据分析手段构建预测模型。但是由于政策、舆论、国际形势等诸多外在“黑天鹅”事件的影响,仅依靠技术面的分析很难把握市场的偶发性跳变和由此引发的长期效应。
浪潮着眼于外汇市场热点,结合大数据和深度学习技术,提供基于自然语言理解和数值分析的汇率预测端到端人工智能解决方案,有以下三部分组成:
第一,金融数据预处理。采用大数据处理技术,从各个信息平台获得金融交易、资讯、报表等数据,并传输到集中存储中,金融数据预处理CPU平台(多个双路CPU服务器NF5280M5组成的集群)对交易、操盘等实时数据进行初筛和清洗,存入实时数据库;对新闻资讯、行业报表等实时性要求不强的数据和过期的实时数据存入历史数据库,以备后续处理使用。CPU程序的管理、调度、监控将由深度学习管理平台AIStation完成。
第二,模型训练。模型训练GPU集群(配置8卡GPU服务器,如NF5288M5)从集中存储中读取训练样本库数据,并加载实时数据处理模块、数值特征重构模块和自然语言理解等模块,运行深度学习框架,如TensorFlow,CNTK,MXNet等对初始模型进行训练,经过对大量数据样本的学习训练生成最终模型。训练中涉及多个训练任务的提交,其资源管理、调度、监控将由深度学习管理平台AIStation完成。
第三,模型应用。训练好模型根据实际应用场景的不同,可能以三种方式被加载,如加载到单台GPU工作站P8000上、嵌入式设备上以及GPU AI服务云上,对实际接收的金融数据样本进行测试识别,将智能化给出金融预测与识别。
整体架构如下所示:
一天中什么时候运动减肥效果好抓 小孩能不能练哑铃多大的孩子适合 小孩嘴唇起皮怎么办怎样才能预防 孩子的罗圈腿是怎么形成的三大因 孩子早恋怎么办如何有效疏导孩子 医生婆婆称自己专业孩子的事必须 儿子成人礼送什么礼物好呢给你孩 有孩子的夫妻千万不要离婚对于孩 小孩千万别让老人带的说法正确吗 自卑缺乏安全感的孩子怎么改善 怎么让孩子开口说话 这几个方法 怎么让孩子吃饭 教你如何让孩子 怎么管教不听话的孩子 家长首先 顽皮的孩子怎么管教的 这些方法 叛逆期的孩子怎么管教 引导孩子 孩子性格软弱怎么办 懦弱的性格 孩子性格偏激怎么办 孩子性格偏 孩子性格固执怎么办 家长们不妨 爱惹事的孩子怎么管教 不妨试试 养育优秀的孩子具备特征,家长要 高考数学难出新天际,可有的孩子 “做胎教”和“不做胎教”的孩子 花费十几万只考了302分 妈妈觉得 甘肃作弊考生留下来的疑团,是怎 一举夺魁!高三学生离校时,校领 高考钉子户:26次参加高考,今年 D2809次列车因泥石流脱线!此类 “女儿16岁,学校宿舍里分娩了” 扭曲邪门的内容,频频出现在教科 川渝地区几所大学实力很牛!四川