【BiLSTM分类】基于matlab白鲸算法BWO优化双向长短期记忆神经网络数据分类预测【含Matlab源码 2495期】

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

⛄二、部分源代码

%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
tic
% restoredefaultpath

%% 读取数据
res = xlsread(‘数据集.xlsx’);
%% 划分训练集和测试集%
P_train = res(1: 250, 1: 12)‘;
T_train = res(1: 250, 13)’;
M = size(P_train, 2);

P_test = res(251: end, 1: 12)‘;
T_test = res(251: end, 13)’;
N = size(P_test, 2);

num_dim = size(P_train, 1); % 特征维度
num_class = length(unique(res(:, end))); % 类别数(Excel最后一列放类别) % 类别数(Excel最后一列放类别)
%% 数据转置
% P_train = P_train’; P_test = P_test’;
% T_train = T_train’; T_test = T_test’;

%% 得到训练集和测试样本个数
M = size(P_train, 2);
N = size(P_test , 2);

%% 数据归一化
[P_train, ps_input] = mapminmax(P_train, 0, 1);
P_test = mapminmax(‘apply’, P_test, ps_input);

扫描二维码关注公众号,回复: 14595677 查看本文章

t_train = categorical(T_train)‘;
t_test = categorical(T_test )’;

%% 格式转换
for i = 1 : M
p_train{i, 1} = P_train(:, i);
end

for i = 1 : N
p_test{i, 1} = P_test(:, i);
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]江知航,王艳霞,颜家均,周堂容.基于BILSTM的棉花价格预测建模与分析[J].中国农机化学报. 2021,42(08)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/129986791