一、LSTM和BiLSTM神经网络结构及原理介绍

长短期记忆网络(Long short-term memory, LSTM)实质上可以理解为一种特殊的RNN,主要是为了解决RNN网络在长序列训练过程中发生梯度消失和梯度爆炸的问题。相比于RNN,LSTM主要是引入了细胞形态(cell state)用于保存长期状态,而LSTM的关键就在于如何控制长期状态c,从而引用了控制门的机制,该机制可以去除或者增加信息到细胞状态的能力。通过sigmoid函数将门输出为[0,1]的实数向量。当门输出为0时,乘以该向量的任何向量都将得到0向量,即判定为不能通过。当输出为1时,乘以任何向量都不会改变其原值,即可以通过。神经元中加入了输入门(input gate),遗忘门(forget gate),输出门(output gate),以及内部记忆单元(cell),其网络结构图如图1所示。

图1 LSTM网络结构
在LSTM神经网络训练学习的过程中,第一步是由遗忘门(forget gate)决定从细胞状态中丢弃哪些信息。该步骤会读取和输入数据点乘计算得到一个输出值,其决定了上一时刻的状态有多少会保留到当前时刻。计算公式如式(1)所示。
ft=σ(Wf×[ht-1,xt]+bf) (1)
式中: xt——当前细胞的输入;
ht-1——cell的前一次输出;
Wf——遗忘门的权重矩阵;
bf——遗忘门的偏置项;
σ——sigmoid函数。
第二步,将确定哪些新信息将会被添加到网络结构或细胞状态中。计算公式如式(2)所示。
it=σ(Wi×[ht-1,xt])+bi) (2)
式中: Wi——输入门的权重矩阵;
bi——输入门的偏置项。
接下来,就计算用于描述当前输入状态的C˜t,它的值是根据上一次的输出和本次的输出来进行计算的。计算公式如式(3)所示。
C˜t=tanh(Wc×[ht−1,xt]+bc)         (3)
式中: Wc——计算细胞状态的权重矩阵;
bc——计算细胞状态的偏置项。
第三步,进行细胞状态更新,将cell状态的Ct-1更新为Ct,ft×Ct-1忘记旧的值,it×C˜t用于添加新的值。计算公式如式(4)所示。
Ct=ft×Ct−1+it×C˜t         (4)
第四步,需要决定输出怎样的信息。计算公式如式(5)和式(6)所示。
Qt=σ(Wo×[ht-1,xt]+bo) (5)
ht=ot×tanh(Ct) (6)
式中: Wo——输出门的权重矩阵;
bo——输出门的偏置项。
LSTM是一个单向的循环神经网络,模型实际上只接收到了“上文”的信息,而没有考虑到“下文”的信息,在实际应用场景中,输出结果可能需要由前面若干输入和后面若干输入共同决定,获取到整个输入序列的信息,而BILSTM网络就可以同时保存双向数据信息。一个完整的BILSTM网络包含输入层,前向LSTM层、反向LSTM层和输出层。

图2 BILSTM网络结构图
图2所示,在Forward层从1时刻到t时刻正向计算一遍,得到并保存每个时刻向前隐含层的输出,wf表示为前向LSTM层。该步骤数学表达公式如式(7)所示。

ht=f(w1xt+w2ht-1) (7)

在Backward层沿着时刻t到时刻1反向计算一遍,得到并保存每个时刻向后隐含层的输出,表示为后向LSTM层。该步骤数学表达公式如式(8)所示。
h′t=f(w3xt+w5h′t+1) (8)
最后,在每个时刻将正向层和反向层在相应时间的输出结果进行组合从而获得最终输出,该输出结合了双向输入序列的信息。该步骤数学表达公式如式(9)所示。
ot=g(w4ht+w6h′t) (9)
BILSTM、LSTM模型网络结构和神经元个数分别如图3(a)和图3(b)所示。

图3 预测模型搭建
图3(a)为BILSTM神经网络预测模型,其结构如下。
结构第一层为LSTM层的初始神经元个数为128。结构第二层为BILSTM,初始神经元个数为128,激活函数使用ReLu。结构第三层为全连接层,神经元个数为128,激活函数使用ReLu。结构第四层添加正则化Dropout, 参数按0.25比例随机置0。结构第五层为全连接层,神经元个数为64,激活函数ReLu。结构第六层添加正则化Dropout, 参数按0.25比例随机置0。结构第七层为输出层,输出维度为1,激活函数使用PReLu。

LSTM神经网络模型采用同样的网络结构和神经元个数,网络优化器和损失函数与BILSTM模型均保持一致。不同之处为该模型将BILSTM神经网络舍弃,用LSTM神经网络进行模型预测训练和论证。图3(b)即LSTM价格预测模型,其结构如下。

结构第一层为LSTM,初始神经元个数为128。结构第二层为LSTM,初始神经元个数为128,激活函数使用ReLu。结构第三层为全连接层,神经元个数为128,激活函数使用ReLu。结构第四层添加正则化Dropout, 参数按0.25比例随机置0。结构第五层为全连接层,神经元个数为64,激活函数ReLu。结构第六层添加正则化Dropout, 参数按0.25比例随机置0。结构第七层为输出层,输出维度为1,激活函数使用PReLu。

二、部分源代码

三、运行结果











四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.
[6]江知航,王艳霞,颜家均,周堂容.基于BILSTM的棉花价格预测建模与分析[J].中国农机化学报. 2021,42(08)

【数据预测】基于matlab BP+ELM+LSTM+BiLSTM+SAELSTM数据预测【含Matlab源码 1825期】相关推荐

  1. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  2. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  3. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  4. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  5. 【Matlab水果识别】自助水果超市【含GUI源码 594期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]自助水果超市[含GUI源码 594期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]倪云峰,叶健,樊娇娇 ...

  6. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  7. 【Matlab树叶分类】BP神经网络植物叶片分类【含GUI源码 916期】

    一.代码运行视频(哔哩哔哩) [Matlab树叶分类]BP神经网络植物叶片分类[含GUI源码 916期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  8. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  9. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  10. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

最新文章

  1. php批量生成200条8位兑换码
  2. python处理表格数据-基于Python快速处理PDF表格数据
  3. Swagger生成的接口需要权限验证的处理方法
  4. cordova 插件开发
  5. Vue解析--如何应对面试官提问
  6. 仿小说蓝色小说网站导航引流网站源码 带手机版
  7. Alibaba Nacos Linux下的集群安装与mysql持久化数据
  8. mysql sqlsugar_【开源框架】SqlSugarRepository 全库ORM 正式发布
  9. 1102: 【入门】字符图形1-星号矩形
  10. 如何在DOS系统中进入phpStudy的MySQL ?
  11. 刘宝瑞相声《珍珠翡翠白玉汤》台词
  12. TeXmacs 中文输入问题
  13. 隐马尔科夫模型(HMM)学习笔记二
  14. matlab高斯正反算程序6,基于matlab的高斯投影正反算与相邻带坐标换算程序设计...
  15. 编程之美-中国象棋将帅问题
  16. 工商银行网上支付开发
  17. 直播预告 | ICLR专场一
  18. iframe中加入html,HTML中IFRAME标签的使用
  19. Gradient Harmonized Single-stage Detector
  20. WordPress登录注册系统的优化

热门文章

  1. asp.net 基础(一)
  2. Docker Compose 笔记
  3. android (三)、Activity工作原理
  4. PHP通过反射获得类源码
  5. C语言 简单选择排序算法
  6. halcon-高速下载
  7. 190628每日一句
  8. 《数据算法:Hadoop_Spark大数据处理技巧》艾提拉笔记.docx 第1章二次排序:简介 19 第2章二次排序:详细示例 42 第3章 Top 10 列表 54 第4章左外连接 96 第5
  9. Atitit ati licenseService    设计原理
  10. atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener