当前位置: 首页 > 科技观察

从零开始:如何使用LSTM预测汇率趋势

时间:2023-03-16 17:18:28 科技观察

作为一个生活在美国的印度人,Neelabh和他的家乡之间有着源源不断的资金流动。如果市场上美元走强,印度卢比相对走弱,所以从印度买1美元需要更多的卢比。如果美元相对疲软,购买一美元需要更少的卢比。如果您可以预测第二天美元的价值,您可以以此为参考做出更好的决策,将风险最小化并获得最大回报。了解神经网络,尤其是循环神经网络的强大功能后,Neelabh萌生了预测美元与卢比汇率的想法。一般来说,预测汇率的方法有很多,例如:购买力平价(PPP)相对经济实力法计量经济模型时间序列模型本文将告诉您如何使用时间序列分析和机器学习时间序列模型预测未来的汇率变化。序列问题我们从序列问题的讨论开始。最简单的顺序机器学习问题是“一对一”问题。一对一在这类问题中,将数据或向量输入到模型中,模型针对输入生成预测结果。无论是回归、分类,还是通过卷积网络进行图像分类,都属于这一类。通过扩展这个模型,我们可以将其改造为一个从过去的输入和输出中学习的模型。一对多问题是一对一问题的扩展,因为一对一问题的模型只有一个输入和输出。现在模型的输出被作为新的输入提供给模型,这样模型就会产生多个输出。接下来我们就来了解为什么一对多也被称为递归神经网络。OnetoMany由于连接方式形成有向循环,循环神经网络可以处理序列问题。也就是说,循环神经网络可以在每次迭代中保持网络形状不变的情况下,将输出作为下一步的输入。从编程的角度来看,这就像在具有某些输入和一些隐藏变量的固定程序上运行。最简单的递归神经网络,将时间轴展开后,可以看成是全连接神经网络。RNN展开时间在这个单变量示例中,仅包含两个权重。权重u乘以当前输入x_t,权重w乘以上一步的输出y_t-1。这个公式使用过去的输出和当前的输入,很像指数加权移动平均线(EWMA)。通过简单地将网络单元一个接一个地堆叠,可以轻松构建深度循环神经网络。简单的循环神经网络与短期记忆模型配合得很好,但对于长期依赖性,该模型将存在根本性的困难。长短期神经网络(LongShort-TermNeuralNetwork)之前说过,简单的递归神经网络无法捕获长期依赖序列中的特征是一个根本性的困难。这个问题很重要,因为我们希望我们的RNN将来可以分析文本并回答问题。在这些任务中,分析长文本序列是很自然的。上世纪90年代后期,SeppHochreiter和JurgenSchmidhuber提出了LSTM,它在处理长期依赖性方面比RNN、隐马尔可夫模型和其他序列学习方法要好得多。LSTM架构LSTM模型将各种操作集成在一个单元中。LSTM有一个内部状态变量,这个状态变量可以从一个单元传递到另一个LSTM单元,并通过门操作进行修改。1.Forgetgate这是一个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.数据集样本数据集显示了1美元对卢比的价值,我们从1980年1月2日到2017年8月10日共有13730条数据记录。美元对印度卢比汇率曲线在此期间,价值1美元卢比普遍上涨。不难看出,2007年至2008年间,美国经济因大衰退而经历了一场重大危机。这张图描绘了从20世纪末到21世纪初世界市场经济衰退的轨迹。在此期间,世界经济发展不是很好,尤其是北美和欧洲(包括俄罗斯),陷入了明显的衰退。但与此同时,许多新兴经济体受到的影响要小得多,尤其是中国和印度,尽管发生了灾难,它们仍实现了大幅增长。训练集和测试集的拆分现在,为了训练模型,我们需要将数据集拆分为测试集和训练集。在进行时间序列时,重要的是将数据集拆分为具有明确日期边界的训练和测试部分。毕竟,您不希望您的测试数据在时间上领先于您的训练数据。在我们的实验中,我们将定义一个日期,例如2010年1月1日,作为截止日期。训练数据的日期为1980年1月2日至2009年12月31日,包括约11,000个数据点。测试数据日期为2010年1月1日至2017年8月10日,包括约2700个数据点。Training-Test下一步是对数据集进行归一化,即将训练数据格式进行转换,将测试数据映射到相同格式的训练数据上,避免假设测试数据大小的影响众所周知。归一化或数据转换意味着新变量的范围将在0和1之间。神经网络模型全连接模型是将输入转换为输出的简单神经网络。它的构造就像一个简单的回归模型,通过前一天的价格预测第二天的价格。我们使用均方误差作为损失函数,并使用随机梯度下降优化算法。在训练了足够多的世代之后,它将开始找到足够好的本地解决方案。以下是全连接层属性的总结。在全连接层训练200个epoch或发生eraly_callbacks(以先到者为准)后,模型开始尝试学习数据的模式和行为。由于我们区分了训练集和测试集,我们现在可以预测测试数据集并与地面实况进行比较。真实值(蓝色)与预测值(橙色)如您所见,模型表现不佳。基本上它只是重复过去的值,只有轻微的变化。全连接网络无法从单一的过去值预测未来值。接下来我们尝试循环神经网络,看看它是如何工作的。我们使用的长短期记忆循环模型是单层序列模型,层中使用6个LSTM节点,输入维度设置为(1,1),即网络的单个输入包含只有一个特征值。LSTM模型的最后一层是dense层,损失函数是均方误差函数,采用随机梯度下降作为优化器。我们使用中断训练回调对模型进行了200次训练。模型的属性总结如上所示。LSTM预测该模型几乎已经学会了准确地重现这些年的数据,并且借助于一个简单的前馈神经网络,没有任何延迟。然而,它仍然低估了某些观测值,模型仍有很大的改进空间。模型的改进这个模型还可以改进很多,有很多方法可以通过改进优化器的方法来改变模型的结构。还有一个很重要的改进方法是来自数据流管理系统的滑动时间窗方法。这种方法源于这样的想法,即只有最近的数据才是最重要的,即可以尝试从一年的数据中预测下一年第一天的值。滑动时间窗可用于从高度依赖于过去观察的数据集中提取重要模式。您也可以尝试以自己的方式改进模型,看看模型如何响应这些变化。我已经将数据集发布在了github项目中,欢迎大家下载使用。GitHub地址:https://github.com/neelabhpant/Deep-Learning-in-Python有用的学习资源我个人一直在关注几位我最喜欢的数据科学家,比如KirillEremenko、JosePortilla、DanVanBoxel(比较知名以DanDoesData的名字命名),等等。他们中的大多数人都有自己的博客,并在上面讨论当今话题的方方面面,比如RNN、CNN、LSTM,甚至还有最近兴起的一项新技术,神经图灵机。尽可能多的关注各种人工智能会议的消息。对了,有兴趣的可以关注一下,KirillEremenko将带着他的优秀团队在圣地亚哥做一场关于机器学习、神经网络和数据科学的报告。结论LSTM模型确实是强大的工具,它可以学习过去行为的主要特征并区分预测未来需要哪些特征。在我最近的研究中,已经有几个应用程序广泛使用了LSTM,例如语音识别、音乐创作、手写识别,甚至是人体运动和交通的预测实验。对我们来说,LSTM是一个拥有自己的记忆并像天才一样做出精确决策的模型。原文:https://blog.statsbot.co/time-series-prediction-using-recurrent-neural-networks-lstms-807fa6ca7fHeart(id:almosthuman2014)》】点此阅读本作者更多好文