首页 > 其他分享 >基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录

基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录

时间:2022-11-16 19:34:35浏览次数:42  
标签:汇率 预测 模型 Bi 学习 神经网络 LSTM


博主初步打算使用Keras框架来实现LSTM网络,现阅读了相关论文并记录了实现流程,以供参考学习。
下面是相关论文介绍:

基于 Bi-LSTM 和迁移学习的多元汇率预测研究

Bi-LSTM 模型

双向长短期记忆网络 (Bi-directional long short-termmemory, Bi-LSTM) 是 LSTM 模型的扩展, 其包括前向LSTM 和后向 LSTM, 前向和后向的 LSTM 应用可以改善模型学习的长期依赖性, 从而提高模型的准确性[。 其结构如图 1 所示。

基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录_迁移学习


图 1 为 Bi-LSTM 网络在 t-1、 t、 t+1 时刻, 模型沿时间轴展开的结果, 其中 x 为模型输入, h 为隐藏层状态, y 为输出。假设 为 t 时刻前向 LSTM 网络的隐藏层状态, 其计算公式如公式 (1) 所示:

基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录_迁移学习_02


公式 (1) 中 xt 表示神经单元在 t 时刻的时序数据输入, 表示神经单元在 t-1 时刻前向 LSTM 网络的隐藏层状态。同理 为 t 时刻后向 LSTM 网络的隐藏层状态, 其计算式如公式 (2) 所示:

基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录_lstm_03


公式 (2) 中 表示 t-1 时刻后向 LSTM 网络的隐藏层状态。Bi-LSTM 网络输出就是两部分隐藏层状态 与 组合在一起, 从而构成网络整体隐藏状态 ht。

迁移学习

迁移学习将训练任务分为 Task A 与 Task B。 首先保存已经训练好的 Task A 的网络结构与权重。 在使用Task A 的网络训练 Task B 之前, 冻结 Task A 前几层网络的权重, 微调剩下的网络结构与权重, 最后再使用Task B 的数据训练网络[4]。 迁移学习过程如图 2 所示。

基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录_学习_04

数据预处理

为了加速模型参数的优化, 对输入模型的汇率时间序列数据进行预处理操作。 具体而言, 采用 min-max 函数对汇率数据在 [0,1] 范围内进行归一化, 以加快模型收敛的速度。 归一化转化公式如公式如下所示:

基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录_学习_05


其中 xi 为模型训练后的预测值, xi’ 为预测值的反归一化值。数据归一化后, 创建序列数据集用于模型训练和测试。 以 5 个时间步为一个样本, 并根据相应的时间步长分 1 天、 3 天、 5 天和 7 天确定输出。

短期预测模型构建及预测结果

基于 Windows 操作系统进行了长期短期汇率预测实 验 。 使 用 CPU 版 本 的 TensorFlow 神 经 网 络 库 中 的Keras 框架, 搭建神经网络模型。 在构建 Bi-LSTM 模型的过程中借鉴了江知航和王艳霞在基于 Bi-LSTM 的棉

花价格预测中所使用的 Bi-LSTM 神经网络并对其进行改造。 所构建的 Bi-LSTM、 LSTM 模型网络结构如图 3所示。

基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录_学习_06


图 3 (a) 为所构建的 Bi-LSTM 模型网络结构, 包括 6 层神经网络: 一个 LSTM 隐藏层、 两个 Bi-LSTM 隐藏层和 3 个 Dense 层。设置模型的第 1 层为 LSTM 隐藏层, 采用 256 个初始神经元, 使用 Relu 函数, 并添加 Dropout 机制, 以10%的比例将部分神经元从神经网络中丢弃; 模型的第

2 层和第 3 层皆为 Bi-LSTM 层, 同样设置 256 个初始神经元, 使用 Relu 函数, 并添加 Dropout 机制; 结构的第 4 层和第 5 层为 Dense 层, 设置 256 个初始神经元, 使用 Relu 激活函数, 同样添加 Dropout 机制; 结

构的第 6 层为输出层, 将输出维度设为 1, 并使用 Relu函数。

在 LSTM 模型的网络结构和神经元数量设置方面,与 Bi-LSTM 模型保持一致, 并且使用相同的网络优化器和损失函数。 而两个模型之间的差异在于 LSTM 模型用 LSTM 神经网络层来替代 Bi-LSTM 神经网络层, 并进行模型预测训练。 其结构如图 3 (b) 所示。LSTM 模型的第 1、 2、 3 层都设置为 LSTM, 256 个初始神经元, 使用 Relu 函数, 并添加 Dropout 机制, 按10%的比例将神经元从神经网络中丢弃; 模型的第 4、 5层为 Dense 层, 神经元个数都为 256, 使用 Relu 函数,并添加 Dropout 机制; 模型的第 6 层为输出层, 同样将输出维度设为 1, 并使用 ReLu 函数。

将 2010 年 1 月至 2020 年 12 月的 3 种货币的汇率序列数据, 按照 8∶2 的比例划分训练集和测试集。 构造完时间序列数据后, 最终得到每种货币的汇率时间序列, 其中每种货币的汇率时间序列样本各为 3647 条。同时不同的优化算法决定了不同的学习率。 当学习率过大时, 模型可能无法收敛, 损失将继续上下波动。 当学习率过小时, 模型可能收敛缓慢, 耗费较多训练时间。因此使用 Adam 优化算法, 从而更加精细准确地调整网络。

首先以人民币/日元汇率数据为例来进行预测建模。图 4、 图 5 分别反映了 Bi-LSTM 和 LSTM 模型在测试集的预测值与真实值的对比曲线。

基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录_数据_07


基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录_lstm_08


图 4 中的曲线是模型预测的汇率值, 图 5 中曲线是真实汇率收盘价。 相对于 LSTM, Bi-LSTM 神经网络预测值与真实值曲线的拟合程度更高。 为了更加客观评估这两个模型的预测效果, 计算其在测试集上的两种预测误差指标如表 1 所示。

基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录_数据_09

长期预测模型构建及预测结果

由于长期汇率预测存在时间跨度大、 数据样本少的问题, 若是直接使用长期汇率数据训练模型, 会损失较多时间成本和预测精度。 因此, 采用迁移学习方法, 即利用长期汇率数据与短期汇率数据之间的相似性, 通过冻结短期 Bi-LSTM 神经网络前数层的权值, 再利用微调样本微调剩下的网络结构参数, 以达到提高长期汇率预测模型的准确性和时间效率的目标。

通过手动逐层累计冻结短期 Bi-LSTM 模型的神经网络层, 以检验不同迁移学习冻结层数对长期汇率预测模型性能的影响, 进而确定最佳的冻结层数。 如表 4 所示以人民币/日元预测时间步长 3 天为例, 比较在不同冻结层数下迁移模型的预测性能。

基于 Bi-LSTM 和迁移学习的多元汇率预测研究学习记录_学习_10

结语

构建了一种基于 Bi-LSTM 的短期汇率预测模型,提高了短期汇率预测的准确性, 为外汇交易者的短期交易提供更多参考意见。 进一步在短期 Bi-LSTM 模型的基础上, 运用迁移学习构建出了长期预测模型。 结论主要归纳为以下两点:
(1) 在短期汇率预测方面, 利用 RMSE 和 MAE 指标将 Bi-LSTM 神经网络与传统 LSTM 神经网络在 3 种货币上的预测误差进行对比分析, 可以得出, Bi-LSTM 神经网络具有更好的数据拟合和预测性能。 证明了 Bi-LSTM 模型在短期汇率预测中的可行性和泛化能力
(2) 在长期汇率预测方面, 采用迁移学习, 将训练好的短期 Bi-LSTM 模型作为预训练模型, 在不同时间步长上对 3 种货币进行迁移学习建模实证, 结果表明迁移学习可以有效解决时间步长增大而导致预测误差增大的问题, 同时节省模型训练时间。
Bi-LSTM 神经网络和迁移学习方法在长短期汇率预测中的优异表现, 不仅节省了模型训练时间, 而且提高了预测精度, 实现了对汇率更加准确有效的预测。 其他学者进行汇率研究提供了参考。 基于 Bi-LSTM 神经网络和迁移学习方法的预测模型在未来金融时间序列预测的发展中将具有广阔的前景和研究价值。


标签:汇率,预测,模型,Bi,学习,神经网络,LSTM
From: https://blog.51cto.com/u_15876949/5857165

相关文章

  • 基于 CNN-GRU 的菇房多点温湿度预测方法研究 学习记录
    本篇文章主要为学习其模型思想。引言卷积神经网络(CNN)作为在图像处理、计算机视觉等领域被广泛应用的模型,其特殊的网络结构通过共享权重的特性可以很好地处理高维稀疏特......
  • Keras学习记录之网络层结构
    全连接层(Dense)keras.layers.Dense(units,activation=None,use_bias=True,kernel_initializer='glorot_uniform',bias_initializer='zeros',kernel_regularizer=None,b......
  • Keras学习记录之模型编译-训练-评估-预测
    模型编译compile调用格式Keras的模型编译的语法格式为:compile(optimizer,loss=None,metrics=None,loss_weights=None,sample_weight_mode=None,weighted_metrics=None,......
  • Keras学习记录之模型
    Keras是一个用Python编写的高级神经网络API,它能够以TensorFlow,CNTK,或者Theano作为后端运行。模型构造API构造Keras的核心数据结构是​​model​​​,一种组织网......
  • 卷积神经网络研究综述 学习记录
    概要深度学习善于从原始输入数据中挖掘越来越抽象的特征表示,而这些表示具有良好的泛化能力。深度学习是包含多级非线性变换的层级机器学习方法,深层神经网络是目前的主要形式......
  • 管道、环境变量与常用命令-acw学习笔记
    管道、环境变量与常用命令管道文件重定向将标准在输出重定向到某一个文件管道也是一个重定向,和文件重定向有所不同可以将前一个命令的标准输出stdout重定向到下一个命......
  • Django Celery RabbitMQ访问被拒绝(403) ACCESS_REFUSED
    报错代码:(403)ACCESS_REFUSED-LoginwasrefusedusingauthenticationmechanismPLAI(省略) 解决方案:    在rabbitmq中注册用户具体代码实现:列出用户rabbitm......
  • mysql学习(9):联合索引和多个单列索引的使用区别详解
    前言为了提高数据库的查询效率,建索引是最常用的手段。那么问题来了,如果查询条件为2个及以上,我们是创建多个单列索引好呢,还是建一个联合索引比较好?正文我们首先来建一张表,......
  • freeRTOS之中断管理学习心得
    移植了FREERTOS后就创建了几个TASK,内核中断和TASK之间一直用共享内存和全局变量进行通讯。这样做对于一个简单的工程来说虽然也没什么,但是随着内容的增加,代码结构会越来越......
  • Markdown学习
     标题一级标题#+空格二级标题##+空格...字体helloworld粗体前后两个**helloworld斜体前后一个*helloworld粗斜体前后三个*helloworld删除前后两个~~引......