系列文章目录在最后面,各位同仁感兴趣可以看看!
BP神经网络
- 第一节、BP网络定义
- 第二节、BP网络结构及其特点
- 第三节、信息传播方式
- 信息的正向传播:实质是计算网络的输出
- 误差的反向传播:实质是学习过程
- 第四节、 BP网络的算法流程图及设计
- 第五节、 BP网络的局限与不足
- 第八节、BP网络主要应用及其MATLAB代码
- 最后:总结
- 系列文章目录
第一节、BP网络定义
BP网络,即反向传播网络(Backpropagation Network),是一种单向传播的多层前向网络。它能够实现从输入到输出的任意非线性映射,具有强大的建模能力。BP网络的核心在于其权值调整方法,采用反向传播的学习算法,即δ学习算法。这种有导师的学习算法通过计算输出误差,并将误差反向传播到每一层,从而调整网络权值,以最小化误差函数。BP网络在众多应用领域中表现优异,是神经网络研究和应用的基础模型之一。
第二节、BP网络结构及其特点
下面用一幅图进行表示BP神经网络模型结构,如下图所示。
由上图BP网络模型结构图可知,其特点为:
第一是:网络连接的特点
(1)是多层前馈网络,包括输入层、若干隐层以及输出层。它可以拥有两个或更多的隐层,通过这些层的组合实现复杂的非线性映射。
(2)层与层之间采用全互连方式,即每一层的神经元与下一层的所有神经元都有连接,而同一层的神经元之间则不直接相连。
第二是:层接关系: 层与层之间的连接是单向的,即从输入层到输出层的信息传递是沿着前向路径进行的。同时,信息传播过程包括两个方向:正向传播和误差的反向传播。正向传播将输入信号传递至输出层,产生网络预测值;而反向传播则通过计算误差梯度,将误差从输出层反向传递至各个隐层,用于调整网络权值以优化模型性能。
第三节、信息传播方式
从BP神经网络模型结构图可以看出,信息传播主要包括两种方式:其一是信息的正向传播,即输入通过各层神经元进行逐层传递,生成网络的输出;其二是误差的反向传播,通过计算输出误差并将其反向传递至各隐层,用于调整网络权值以最小化误差。
信息的正向传播:实质是计算网络的输出
(1)输入层单元没有激活函数,直接接收输入信号并传递给下一层,因此在某些书籍中,输入层可能不被视为一个实际的网络层。它主要作用是将输入数据格式化为网络可以处理的形式,而不参与任何计算或非线性变换。
(2) 隐层神经元的输出:采用S函数激发:它将输入信号映射到0和1之间,使得网络能够引入非线性特性,从而提高其对复杂模式的建模能力。
(3)只有在需要将网络的输出限制在0和1之间时,输出层才使用S型激活函数(Sigmoid函数)。在其他情况下,输出层通常采用线性激活函数,以便生成连续值并适应不同的回归任务或多类别分类任务。
误差的反向传播:实质是学习过程
BP网络输出与理想输出误差计算公式为:
认为BP网络好坏,常用误差性能指标函数为(误差均方值最小)来甄别,如下图所示公式:
基本小总节:
- BP网络具有一层或多层隐含层,用于捕捉输入数据的复杂特征。
- BP网络中的隐含层到输出层的激活函数必须是处处可微的,常见的选择包括S型函数(Sigmoid函数)或正切函数(Tanh函数)。
- 当需要将网络的输出限制在0和1之间时,输出层应使用S型激活函数。在一般情况下,隐含层采用S型激活函数,而输出层则使用线性激活函数以适应不同的任务需求。
- 网络的输入输出关系由各层连接的权因子决定,这些权因子对网络的表现起到关键作用。
- 权因子通过学习算法进行调节,随着学习的深入,网络能够逐渐提高其智能和准确性。
- 隐含层数量越多,网络能够提供更高的输出精度,并且个别权因子的损坏对网络输出的影响较小。
第四节、 BP网络的算法流程图及设计
BP网络算法流程图如下:
设计方案如下:
- 网络的层数
理论上,具有偏差和至少一个S型隐含层以及一个线性输出层的BP网络,可以逼近任何有理函数。增加层数可以进一步降低误差和提高精度,但也会增加网络的复杂性和训练时间。因此,通常优先考虑增加隐含层中的神经元数量,而不是增加层数。 - 隐含层的神经元数
提高网络训练精度的有效方法是通过增加一个隐含层的神经元数。相比增加隐含层数,这种方法在结构实现上更为简单。具体设计时,可以通过对不同神经元数进行训练对比,并适当增加一些余量来确定最优神经元数。 - 初始权值的选取
初始权值通常选取在(-1, 1)之间的随机数。由于每次训练时权值随机初始化,每次训练得到的网络权值都会有所不同。 - 学习速率
学习速率决定每次循环训练中权值变化的幅度。较大的学习速率可能导致系统不稳定,而较小的学习速率则会延长训练时间,虽然能保证网络误差逐渐趋于最小。为了保证系统稳定性,通常选择较小的学习速率,范围在0.01到0.8之间。 - 期望误差的选取
设计网络训练过程中,期望误差值应通过对比训练来确定。较小的期望误差值通常需要更多的隐含层节点和更长的训练时间。因此,可以对比两个不同期望误差值的网络,通过综合考虑来确定最优方案。
这些方法和策略有助于优化BP网络的设计,提高网络的精度和稳定性,适应不同的应用需求。
第五节、 BP网络的局限与不足
BP网络的挑战与应对策略:
- 需要较长的训练时间
由于涉及到复杂的求导运算,BP网络的训练时间通常较长。随着网络规模和复杂性的增加,这一问题变得更加显著。 - 训练瘫痪问题
训练过程中可能会出现训练瘫痪现象。为避免这种现象,可以采取以下措施:
(1)选取较小的初始权值。
(2)采用较小的学习速率。
虽然这些方法可以减小训练瘫痪的风险,但也会增加训练时间。 - 局部极小值
BP算法可以使网络权值收敛到一个解,但无法保证该解是误差超平面的全局最小值,可能会陷入局部极小值。为应对这一问题,可以采用以下策略:
(1)多次训练,初始权值随机化。
(2)使用动量项来帮助网络跳出局部极小值。
(3)结合其他优化算法,如遗传算法或模拟退火算法,以提高全局搜索能力。
这些挑战和对应策略需要在设计和训练BP网络时予以考虑,以优化网络性能和训练效率。
如上图所示,W初始值不合适的时候,误差性能指标e可能落入局部极小值。
第八节、BP网络主要应用及其MATLAB代码
BP网络的主要应用及构建步骤:
(1)主要应用
1.函数逼近: 通过输入矢量和相应的输出矢量训练网络,以逼近一个函数。
2.模式识别:利用特定的输出矢量将其与输入矢量联系起来,实现模式识别。
3.分类:按照定义的方式对输入矢量进行分类。
4.数据压缩:减少输出矢量的维数,以便于传输或存储。
(2)构建网络的步骤
6. 明确输入、输出变量,确定样本数据:定义网络的输入和输出变量,并收集相应的样本数据。
7. 构建初始网络:设计网络结构,包括层数和每层的神经元数量。
8. 确定网络参数:设置训练的最长步数和目标误差。
9. 神经网络训练(调整权值、阈值):通过反向传播算法调整权值和阈值,实现神经网络的学习。
10. 网络输出计算(网络模拟仿真):计算网络输出,进行模拟仿真。
11. 仿真误差评估:评估仿真结果的误差。
12. 测试检验数据的仿真和误差评估(泛化能力):使用测试数据检验网络的仿真结果和误差,评估网络的泛化能力。通过这些步骤,可以有效地构建和优化BP网络,适应不同的应用需求。
代码示例:应用于拟合曲线,模拟预测结果。
clc
clear all
close all
a = xlsread('d:\花生特征提取数据.xlsx');
b = a;
a0 = min(a);
for z = 2:9b(:,z) = a(:,z) - a0(z);
end
a1 = max(b);
for z = 2:9b(:,z) = b(:,z) / a1(z);
end
P = b(1:40, 2)';
T = b(1:40, 4)';
net = newff(minmax(P), [10, 1], {'tansig', 'purelin'}, 'trainlm');
net.trainParam.epochs = 500;
net.trainParam.goal = 0.000001;
net = train(net, P, T);
X = b(1:40, 2)';
Y = sim(net, X)';
figure;
plot(P, T, '.');
hold on;
plot(X, Y, 'r');
这个代码第一次出现在我的文章 【MATLAB源码】机器视觉与图像识别技术(5)—BP神经网络和视觉标定这里,里面也有数据集,解释啥的都有了,所以大家可以去看看。
最后:总结
通过上面大介绍,大概BP网络的原理和构建步骤就是这样,我也是从基础跟大家讲起,算法比较简单易懂,如果有什么讲的不好的希望大佬们指正,谢谢!最后哈哈哈哈哈,还是希望,能给我点赞收藏关注一下,真的非常谢谢咯,最后后续看看还有什么可以讲解的,后续进行分享。别忘了点赞!!!!!!哈哈哈哈哈哈,下期见
系列文章目录
第一篇文章:【MATLAB源码】机器视觉与图像识别技术—视觉系统的构成(视频与图像格式转换代码及软件下载)
第二篇文章:【MATLAB源码】机器视觉与图像识别技术(2)—图像分割基础
第三篇文章:【MATLAB源码】机器视觉与图像识别技术(2)续—图像分割算法
第四篇文章:【MATLAB源码】机器视觉与图像识别技术(3)—数字形态学处理以及图像特征点提取
第五篇文章: 【MATLAB源码】机器视觉与图像识别技术(4)—模式识别与视觉计数
第六篇文章: 【MATLAB源码】机器视觉与图像识别技术(5)—BP神经网络和视觉标定
第七篇文章:【MATLAB源码】机器视觉与图像识别技术实战示例文档—鱼苗面积预测计数
第八篇文章:【MATLAB源码】机器视觉与图像识别技术(6)—帧差法和videoinput视频读取