一、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。

二、部分源代码

%%
%加载序列数据
%数据描述:总共270组训练样本共分为9类,每组训练样本的训练样个数不等,每个训练训练样本由12个特征向量组成,
[XTrain,YTrain] = japaneseVowelsTrainData;
%数据可视化
figure
plot(XTrain{1}')
xlabel('Time Step')
title('Training Observation 1')
legend('Feature ' + string(1:12),'Location','northeastoutside')
%%
%LSTM可以将分组后等量的训练样本进行训练,从而提高训练效率
%如果每组的样本数量不同,进行小批量拆分,则需要尽量保证分块的训练样本数相同
%首先找到每组样本数和总的组数
numObservations = numel(XTrain);
for i=1:numObservationssequence = XTrain{i};sequenceLengths(i) = size(sequence,2);
end

三、运行结果



四、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双向长短时记忆(BiLSTM)数据预测【含Matlab源码 1824期】相关推荐

  1. 【BiLSTM数据预测】基于matlab双向长短时记忆BiLSTM数据预测【含Matlab源码 1824期】

    ⛄一.LSTM和BiLSTM神经网络结构及原理介绍 长短期记忆网络(Long short-term memory, LSTM)实质上可以理解为一种特殊的RNN,主要是为了解决RNN网络在长序列训练过程 ...

  2. 【Matlab语音处理】声音信号频谱分析仪【含GUI源码 325期】

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

  3. 【Matlab图像检索】综合特征图像检索【含GUI源码 395期】

    一.代码运行视频(哔哩哔哩) [Matlab图像检索]综合特征图像检索[含GUI源码 395期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  4. 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】

    一.代码运行视频(哔哩哔哩) [Matlab肌电信号]肌电信号处理[含GUI源码 966期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨 ...

  5. 【Matlab条形码识别】二维条形码识别【含GUI源码 607期】

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

  6. 【LSTM分类】基于卷积神经网络结合双向长短时记忆CNN-Bi-LSTM实现数据分类含Matlab源码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  7. 单目标应用:白鲸优化算法(Beluga whale optimization,BWO)优化双向长短时记忆BiLSTM的权值和阈值(提供MATLAB代码)

    一.算法简介 白鲸优化算法(Beluga whale optimization,BWO)由Changting Zhong等人于2022年提出,该算法模拟了白鲸游泳,觅食和"鲸鱼坠落" ...

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

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

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

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

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

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

最新文章

  1. tornado环境搭建
  2. 因子和(类素数筛选法)
  3. 【转】Javascript面向对象编程(二):构造函数的继承
  4. Elegant Construction HDU-5813 构造
  5. 如何使用 Mac 中的“信息”?
  6. 【MAVEN】搜索错误“Index downloads are disabled,search results may be incomplete”
  7. C++PrimerP104
  8. 【Hoxton.SR1版本】Spring Cloud Gateway之Predicate详解
  9. 【Opencv实战】这是我见过的最强大“美颜滤镜”,代码美颜傻瓜式一键操作~(附源码)
  10. 使用SpringBoot+Shiro实现记住我功能
  11. 游戏建模:模型场景制作过程分享
  12. python将多个表的数据合并到一个表
  13. 惠州市城市职业学院计算机考点,2020广东乡镇惠州考区笔试考点地理位置及考场安排表...
  14. 思科路由器各种show命令的输出详解
  15. 漏洞复现----6、Jenkins远程命令执行漏洞(CVE-2018-1000861)
  16. 几种线程安全的Map解析,真香系列
  17. AIRSIM 中文使用手册-2021/4/6
  18. php 上标和下标,css如何显示文字的上标和下标
  19. css 实现简单的镂空渐变文字效果
  20. Java的final和多态

热门文章

  1. Java - PhantomJS + EChartsConvert实现ECharts图片保存到服务端
  2. Vue项目在nginx下的部署实践(个人学习总结)
  3. Quartz-第一篇 认识Quartz
  4. JS前端加密JAVA后端解密详解
  5. Java笔记(day12)
  6. 【转】开发板上修改时间方法
  7. 400. Nth Digit
  8. js中不能做变量名的字符
  9. Android OpenGL ES(十二):三维坐标系及坐标变换初步 .
  10. 转:孩子,上学去!乖