BP神经网络理解及其MATLAB实现

这篇具有很好参考价值的文章主要介绍了BP神经网络理解及其MATLAB实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 概念

BP(Back Propagation)网络是一种按误差逆传播算法训练的多层前馈网络,是应用最广泛的神经网络模型之一。BP能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。出自百度百科
特点是根据误差的反向反馈改善信号传播。类似于最小二乘法的一种思想。

2 算法

2.1 算法流程

BP网络由输入层、隐藏层、输出层组成。
输入层用于信息输入,读入数据。
隐藏层用于处理数据,可以设置层数。
输出层用于信息输出,即目标结果。
BP神经网络理解及其MATLAB实现
v,w分别是输入层到隐藏层,隐藏层到输出层的权重。
第一阶段进行信号正向传播,即输入层—>隐含层—>输出层;第二阶段进行误差反向传播,即输出层—>隐含层—>输入层。依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置

2.2 神经元

神经网络其实就是几层神经元,每层神经元里有几个神经元点。

每一层神经元内部都不互相连接。每个神经元都接受来自上一层所有神经元的输入信号,每个信号都通过一个带有权重的连接(神经线)传递,神经元把这些信号按照权重加起来得到一个总输入值,然后将总输入值与神经元的阈值进行对比(模拟阈值电位),然后通过一个“激活函数”处理得到最终的输出(模拟细胞的激活),这个输出又会作为之后神经元的输入一层一层传递下去。

为方便写代码,可以设置每层神经元或者神经细胞数目一致。
BP神经网络理解及其MATLAB实现

2.3 激活函数

激活函数旨在在模型中引入非线性。若无激活函数(即激活函数是f(x)=x),那么无论神经网络有多少层,最终都是一个线性映射,则网络的逼近能力有限,线性映射无法解决线性不可分问题。因此引入非线性函数作为激励函数。
BP网络常用的激活函数有:

  1. Sigmoid(logistic).也叫S型生长曲线。可以把输入从负无穷大到正无穷大的信号变换成0~1之间输出。
    f ( x ) = 1 1 + e − x f(x)=\dfrac{1}{1+e^{-x}} f(x)=1+ex1BP神经网络理解及其MATLAB实现
    此函数具有很好的性质: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x)=f(x)(1-f(x)) f(x)=f(x)(1f(x))
  2. Tanh.解决Sigmoid函数中心不为0的缺点,但依旧有梯度易消失的缺点。
    f ( x ) = e x − e − x e x + e − x f(x)=\dfrac{e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+exexexBP神经网络理解及其MATLAB实现
  3. relu.通用激活函数,针对Sigmoid函数和tanh函数的缺点进行改进的,目前在大多数情况下使用。
    f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)BP神经网络理解及其MATLAB实现

3 工作过程

分为正向传播过程和反向传播过程。具体工作流程为:
BP神经网络理解及其MATLAB实现

3.1 正向传播过程

信息从输入层进入到网络,依次经过每层运算,得到最终输出层结果的过程。

计算过程主要涉及到矩阵乘法,用每一层的数值乘以对应的权重+偏置变量(激活函数)。
从输入层到隐藏层: α h = ∑ i = 1 d v i h x i \alpha_h=\sum\limits_{i=1}^dv_{ih}x_i αh=i=1dvihxi经过隐藏层的激活函数为: b h = f ( α h − γ h ) b_h=f(\alpha_h-\gamma_h) bh=f(αhγh)其中, v i h v_{ih} vih是输入层的第 i i i 个神经元和隐藏层第 h h h 个神经元之间的权重, γ h \gamma_h γh 是隐藏层第 h h h 个神经元的阈值。

从隐藏层到输出层: β j = ∑ h = 1 q w h j b h + θ j \beta_j=\sum\limits_{h=1}^qw_{hj}b_h+\theta_j βj=h=1qwhjbh+θj经过输出层的激活函数为: y k = f ( β j − θ j ) y_k=f(\beta_j-\theta_j) yk=f(βjθj)其中, w h j w_{hj} whj是隐藏层的第 h h h 个神经元和输出层第 j j j 个神经元之间的权重, θ j \theta_j θj 是输出层第 j j j 个神经元的阈值。

因为参数是随机的,第一次计算结果跟真实误差很大,需根据误差去调整参数,直到误差最小,这时需要模型的反向传播。

3.2 反向传播过程

基本思想:通过计算输出层与期望值之间的误差来调整网络参数,目标使误差减小。

误差其实就是真实值与神经网络训练结果的差的平方和(也可选其它计算方式)。如下最小二乘法计算误差: E = 1 2 ∑ k = 1 l ( y k − y k ′ ) 2 E=\dfrac{1}{2}\sum\limits_{k=1}^l(y_k-y_k')^2 E=21k=1l(ykyk)2其中 y k y_k yk为训练的值, y k ′ y_k' yk为实际值。

通过调整 d q + q + q l + l dq+q+ql+l dq+q+ql+l 个权重的大小(基于矩阵的链式求导法则),使损失函数不断变小的方法有:

  • 梯度下降法:几何意义讲,函数总沿梯度方向变化最快。
  • sgd:在梯度下降法基础上,sgd对单个训练样本进行参数更新,加快收敛速率。
  • adam:在梯度下降法基础上,通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率,加快收敛速率。
  • lbfgs:sgd,Adam等都是在一阶法(梯度下降法)的基础上进行改进,加快收敛速率。而lbfgs在二阶泰勒展开式进行局部近似平均损失的基础上进行改进,以降低了迭代过程中的存储量,加快收敛速率。

其中最常用的是梯度下降法:对每一个需调整的参数求偏导,若偏导>0,则按偏导相反方向变化;若偏导<0,则按此方向变化。此处设定一个学习速率 η \eta η,学习速率不能太快或太慢。太快可能会导致越过最优解或结果在最优值附近徘徊而不收敛;太慢可能会收敛缓慢降低算法效率(具体需根据感觉调节,一般选值为0.01−0.8)。调节原则是反向层层调节。

首先隐层到输出层的权值调整值为: △ w h j = − ∣ η ∣ ∂ E ∂ w h j , w h j = △ w h j + w h j \triangle w_{hj}=-|\eta| \dfrac{\partial E}{\partial w_{hj}},w_{hj}=\triangle w_{hj}+w_{hj} whj=ηwhjE,whj=whj+whj △ θ j = − ∣ η ∣ ∂ E ∂ θ j , θ j = △ θ j + θ j \triangle \theta_{j}=-|\eta| \dfrac{\partial E}{\partial \theta_{j}},\theta_{j}=\triangle \theta_{j}+\theta_{j} θj=ηθjE,θj=θj+θj输入层到隐层也类似。

通过不断使用所有数据记录进行训练,可得到一个分类模型。迭代的终止条件可以是:

  • 设置最大迭代次数,比如使用数据集迭代100次后停止训练;
  • 计算训练集在网络上的预测准确率,达到一定门限值后停止训练。

3.3 工作评价

超参数:学习率,隐含层层数,每个隐含层的神经元个数,激活函数,损失函数(代价函数)等。超参数很难确定,因为很难知道什么样的超参数会让模型表现更好。
(普通)参数:权重矩阵和偏置系数在确定了超参数之后可由模型算出,称之为普通参数或参数。

可通过以下量化指标来衡量BP神经网络的预测效果:

  • MSE(均方误差):预测值与实际值之差平方的期望值。取值越小,模型准确度越高。
  • RMSE(均方根误差):MSE的平方根,取值越小,模型准确度越高。
  • MAE(平均绝对误差):绝对误差的平均值,能反映预测值误差的实际情况。取值越小,模型准确度越高。
  • MAPE(平均绝对百分比误差):是MAE的变形,取值越小,模型准确度越高。
  • R²: 将预测值跟只使用均值的情况下相比,结果越靠近 1 模型准确度越高。

4 MATLAB 实现BP神经网络

给出一个 算例代码:

clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
format short        % 数据类型

tic                 % 运算开始计时

% 构建网络
nntwarn off % 跳过浅层神经网络过时警告
P = [1,1,7,4,0,6,3,0,8,7;
    1,3,6,7,9,6,1,0,0,4];
T = [1,8,2,8,0,3,7,8,2,4];
%  创建一个新的前向神经网络  
net=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm');
%  当前输入层权值和阈值 
inputWeights=net.IW{1,1} ;
inputbias=net.b{1} ;
%  当前网络层权值和阈值
layerWeights=net.LW{2,1} ;
layerbias=net.b{2} ;
%  设置训练参数
net.trainParam.show = 50; 
net.trainParam.lr = 0.05; 
net.trainParam.mc = 0.9; 
net.trainParam.epochs = 10000; 
net.trainParam.goal = 1e-3; 
net.trainParam.showWindow = 0 ; % =0不显示网络训练对话框,=1 则显示。
%  调用 TRAINGDM 算法训练 BP 网络
[net,tr]=train(net,P,T); 
%BP 网络进行仿真
A = sim(net,P); 
%  计算仿真误差  
E = T - A;   % 误差
MSE=mse(E)   % 均方差

x=[1,3,6,7,9,6,1,0,0,4;
    1,8,2,4,5,7,8,9,0,1];
sim(net,x)'   % 预测结果

toc  % 结束运算计时

训练对话框及网络图:
BP神经网络理解及其MATLAB实现
BP神经网络理解及其MATLAB实现
文章参考:
https://zhuanlan.zhihu.com/p/485348369
https://blog.csdn.net/fanxin_i/article/details/80212906文章来源地址https://www.toymoban.com/news/detail-460698.html

到了这里,关于BP神经网络理解及其MATLAB实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (转载)BP 神经网络的数据分类(matlab实现)

     本博客的完整代码获取: MATLAB神经网络43个案例分析 - MATLAB Simulink Books         BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播。在前向传递中,输入信号从输人层经隐含层逐层处理,直至输出层。每一层的神经元状态只影响下一层神经

    2024年02月16日
    浏览(40)
  • BP神经网络的MATLAB实现(含源代码)

    BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络模型之一 具体数学推导以及原理在本文不做详细介绍,本文将使用MATLAB进行BP神经网络的应用与实践 BP神经网络是一

    2024年02月04日
    浏览(43)
  • 基于遗传算法的BP神经网络优化算法(matlab实现)

            BP网络是一类多层的前馈神经网络。它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法。BP算法是Rumelhart等人在1986年提出来的。由于它的结构简单,可调整的参数多,训练算法也多,而且可操作性好,BP神经网

    2024年01月16日
    浏览(58)
  • 15.1 BP神经网络实现图像压缩——了解神经网络在图像处理方面的应用(matlab程序)

    1. 简述        BP神经网络现在来说是一种比较成熟的网络模型了,因为神经网络对于数字图像处理的先天优势,特别是在图像压缩方面更具有先天的优势,因此,我这一段时间在研究神经网络的时候同时研究了一下关于BP网络实现图像压缩的原理和过程,并且是在MATLAB上进行了仿真

    2024年02月12日
    浏览(41)
  • 【SSA-BP预测】基于麻雀算法优化BP神经网络回归预测研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 麻雀算

    2024年02月08日
    浏览(61)
  • 使用BP神经网络和Elman Net预测航班价格(Matlab代码实现)

     👨‍🎓 个人主页: 研学社的博客     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果

    2023年04月21日
    浏览(37)
  • 时序预测 | Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测

    预测效果 基本介绍 1.Matlab实现SOM-BP自组织映射结合BP神经网络时间序列预测(完整源码和数据); 2.数据集为excel,单列时间序列数据集,运行主程序main.m即可,其余为函数文件,无需运行; 3.优化参数为神经网络的权值和偏置,命令窗口输出RMSE、MAPE、MAE、R2等评价指标; 4

    2024年04月12日
    浏览(37)
  • 回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测

    效果一览 基本介绍 1.Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测; 2.数据集为excel,输入7个特征,输出1个变量,运行主程序main.m即可,其余为函数文件,无需运行; 3.优化参数为神经网络的权值和偏置,命令窗口输出RMSE、MAPE、MAE、R2等评价指标; 4.运行环

    2024年02月05日
    浏览(53)
  • 数学建模:BP神经网络模型及其优化

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 设 x 1 , x 2 , . . . , x i x_1,x_2,...,x_i x 1 ​ , x 2 ​ , ... , x i ​ 为输入变量, y y y 为输出变量, u j u_j u j ​ 为隐藏层神经元 的输出, f 为 激活函数 的映射关系。 设 v i j v_{ij} v ij ​ 为第 i i i 个输入变量与第 j j j 个隐藏层神经

    2024年02月11日
    浏览(55)
  • 回归预测 | MATLAB实现基于BP-Adaboost的BP神经网络结合AdaBoost多输入单输出回归预测

    预测效果 基本介绍 1.MATLAB实现基于BP-Adaboost的BP神经网络结合AdaBoost多输入单输出回归预测; 2.运行环境为Matlab2018b; 3.输入多个特征,输出单个变量,多变量回归预测; 4.data为数据集,excel数据,前7列输入,最后1列输出,主程序运行即可,所有文件放在一个文件夹; 5.命令窗

    2024年02月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包