如果美元在市场上走强,则人民币(RMB)下跌,因此,我们购买一美元必须拿出更多的人民币。如果美元走软,则花费更少的人民币购买相同的美元。
如果能够预测明天将花费多少美元,那么这可以指导一个人的决策,并且在最小化风险和最大化回报方面非常重要。利用递归神经网络,我们可以预测美元和人民币之间汇率。
有很多预测汇率的方法,例如:
- 购买力平价(PPP),将通货膨胀考虑在内并计算通胀差异。
- 相对经济实力方法,考虑各国的经济增长来预测汇率的方向。
- 计量经济模型,用于预测汇率的另一种常用技术,可根据预测者认为重要的因素或属性进行定制。可能存在两个不同国家之间的利率差异,GDP增长率,收入增长率等特征。
- 时间序列模型纯粹依赖于过去的行为和价格模式可用于预测未来价格行为的想法。
在本文中,我们将告诉你如何使用时间序列分析、利用时间序列的机器学习来预测未来的汇率行为。
序列问题
我们先来谈谈序列问题。涉及序列的最简单的机器学习问题是一对一的问题。
在这种情况下,我们对模型有一个数据输入或张量,模型使用给定的输入生成预测。卷积网络的线性回归,分类甚至图像分类都属于这一类。我们可以扩展这个公式,以允许模型使用输入和输出的传递方式。
它被称为一对多问题。一对多问题就像一对一的问题一样,我们对模型有一个输入,模型生成一个输出。但是,模型的输出现在作为新输入反馈给模型。该模型现在可以生成一个新的输出,我们可以无限期地继续这样做。现在可以看到为什么这些被称为循环神经网络。
递归神经网络处理序列问题,因为它们的连接形成有向循环。换句话说,他们可以通过使用自己的输出作为下一步的输入来保持从一次迭代到下一次迭代的状态。在编程术语中,这就像运行具有某些输入和一些内部变量的固定程序。如果我们展开时间轴,最简单的递归神经网络可以被视为完全连接的神经网络。
在这种单变量情况下,仅涉及两个权重。权重乘以当前输入xt(即u)和乘以前一输出yt-1(即w)的权重。此公式类似于指数加权移动平均值(EWMA),方法是将输出的通过值与输入的当前值进行对比。
人们可以通过简单地将单元彼此堆叠来构建深度递归神经网络。简单的递归神经网络仅适用于短期记忆。如果我们有更长的时间依赖性,我们将看到它遇到了根本问题。
长短期神经网络
正如我们所讨论的,一个简单的循环网络存在一个基本问题,即无法捕获序列中的长期依赖关系。这是一个问题,因为我们希望我们的RNN分析文本并回答问题,这涉及跟踪长序列的单词。
在90年代后期,LSTM由Sepp Hochreiter和Jurgen Schmidhuber提出,其对于在许多应用中替代RNN。
该模型在包含多个操作的单元格中组织。LSTM有一个内部状态变量,它从一个单元格传递到另一个单元格并由Operation Gates修改。
1. 忘记门
它是一个sigmoid层,它将t-1处的输出和时间t处的当前输入连接起来,并将它们连接成单个张量并应用线性变换,然后是sigmoid。由于sigmoid特性,此门的输出介于0和1之间。此数字与内部状态相乘,这就是门被称为忘记门的原因。如果ft = 0,则完全忘记先前的内部状态,而如果ft = 1,则将未改变的状态通过放行。
2. 输入门
输入门采用先前的输出和新输入,并将它们传递到另一个sigmoid层。该门返回0到1之间的值。输入门的值乘以候选层的输出。
此图层对输入和上一个输出的混合应用双曲正切,返回要添加到内部状态的候选矢量。
使用此规则更新内部状态:
先前的状态乘以遗忘门,然后加到输出门允许的新候选的分数。
3. 输出门
该门控制将多少内部状态传递给输出,并且它以与其他门类似的方式工作。
上面描述的这三个门具有独立的权重和偏差,因此网络将了解要保留多少过去的输出,保持多少当前输入,以及将多少内部状态发送到输出。
在递归神经网络中,您不仅要给网络提供数据,还要提前一段时间给网络状态。例如,如果我说“嘿!当我开车的时候发生了一件疯狂的事情”,你脑中有一部分正在打开翻转开关,说“哦,这是一个Neelabh告诉我的故事。这是一个故事,主角是Neelabh,路上发生了一些事情。”现在,你带着我告诉你的那句话的一小部分,当你听我所有的其他句子时,你必须保留所有过去句子中的一些信息,以便了解整个故事。
另一个例子是视频处理,你再次需要一个循环神经网络。当前帧中发生的事情在很大程度上取决于电影最后一帧中的内容。在一段时间内,一个反复出现的神经网络试图学习要保留什么以及保持多少与过去相比,以及从当前状态保持多少信息,这使得它与简单的前馈神经网络相比如此强大。
时间序列预测
我对递归神经网络的优势印象深刻,并决定用它们来预测美元和卢比INR之间的汇率。此项目中使用的数据集是1980年1月2日到2017年8月10日之间的汇率数据。稍后,我将为您提供下载此数据集并进行实验的链接。
数据集以卢比显示$ 1的值。从1980年1月2日到2017年8月10日,我们共有13,730条记录。
在此期间,用卢比购买1美元的价格一直在上涨。可以看出,2007 - 2008年期间美国经济出现大幅下滑,这主要是由于那段时期的大衰退造成的。这是21世纪末和2010年初世界市场普遍经济衰退的时期。
这一时期对世界发达经济体来说并不是很好,特别是在北美和欧洲(包括俄罗斯),这些经济陷入了明显的衰退。许多新兴经济体受到的影响要小得多,特别是中国和印度,其经济在此期间大幅增长。
训练测试数据拆分
现在,为了训练机器,我们需要将数据集分成测试和训练集。当你按时间顺序分割训练和测试某个日期时,这一点非常重要。因此,我们不希望测试数据出现在训练数据之前。
在我们的实验中,我们将定义一个日期,比如2010年1月1日,作为我们的分割日期。训练数据是1980年1月2日至2009年12月31日之间的数据,大约有11,000个训练数据点。
测试数据集在2010年1月1日至2017年8月10日之间,约为2,700点。
接下来要做的是规范化数据集。你只需要拟合和转换训练数据,然后转换测试数据。你这样做的原因是你不想假设你知道你的测试数据的规模。
规范化或转换数据意味着新的比例变量将介于0和1之间。
神经网络模型
完全连接模型是一个简单的神经网络模型,它构建为一个简单的回归模型,它将接受一个输入并将吐出一个输出。这基本上取自前一天的价格并预测第二天的价格。
作为一个损失函数,我们使用均方误差和随机梯度下降作为优化器,在足够数量的迭代之后将尝试寻找良好的局部最优。以下是完全连接层的摘要。
在训练该模型200个纪元或early_callbacks(以先到者为准)之后,该模型试图学习数据的模式和行为。由于我们将数据分成训练和测试集,我们现在可以预测测试数据的价值并将其与实际情况进行比较。
如预期所料,该模型并不好。它本质上是重复以前的值,并有一个轻微的转变。完全连接的模型无法从单个先前值预测未来。现在让我们尝试使用递归神经网络,看看它到底好不好。
长短期记忆LSTM
我们使用的循环模型是一层顺序模型。我们在图层中使用了6个LSTM节点,我们给出了形状(1,1)的输入。
最后一层是全链接层,其中损失是均方误差,随机梯度下降作为优化器。我们使用early_stopping回调训练这个模型,进行200次迭代。模型摘要如上所示。
该模型已经学会了重现数据的年度形状,并且没有使用简单的前馈神经网络所具有的滞后性。它仍然低估了某些数量的一些观察结果,这个模型肯定有改进的余地。
模型的调优
在这个模型中可以进行很多更改以使其更好。可以通过更改优化程序来尝试更改配置。我看到的另一个重要变化是使用Sliding Time Window方法,该方法来自流数据管理系统领域。
这种方法要求必须有最新数据。可以显示一年的模型数据,并尝试对下一年的第一天进行预测。在获取数据集中的重要模式方面,滑动时间窗口方法非常有用,这些模式高度依赖于过去的大量观察。
结论
LSTM模型足够强大,可以学习最重要的过去行为,并了解这些过去的行为是否是进行未来预测的重要特征。LSTM有很多应用,在实际应用中LSTM使用率很高。语音识别、音乐创作、手写识别等应用,甚至应用于目前对人类移动性和旅行预测的研究。
LSTM就像一个拥有自己记忆的模型,在做出决策时可以表现得像一个聪明的人。