一、大致介绍
BP算法的学习过程是由正向传播和反向传播组成的。在正向传播的过程中,输入的信息从输入层到隐含层处理 最后传向输出层,而且每一个神经元能影响到下一层神经元的状态。当在输出层得不到期望的输出时,则转向反向传播,将误差信号按照连接通路反向计算,使用梯度下降法来调整每一层神经元的权值w,以此来减小误差。
二、逼近网络的结构


神经元结构:

三、计算开始(核心运算就是求导)
第一部分:前向传播
隐含层神经元的输入即为所有输入信号的加权和
xj=∑iwijxix_j=\sum_{i}{w_{ij}x_i} xj​=i∑​wij​xi​
而隐含层的输出xj′x_j^{'}xj′​采用函数来激发xjx_jxj​:
xj′=f(xj)=11+e−xjx_j^{'}=f(x_j)=\frac{1}{1+e^{-x_j}} xj′​=f(xj​)=1+e−xj​1​
求导:
∂xj′∂xj=e−xj(1+e−xj)2=xj′(1−xj′)\frac{\partial{x_j^{'}}}{\partial{x_j}}=\frac{e^{-x_j}}{(1+e^{-x_j})^2}=x_j^{'}(1-x_j^{'}) ∂xj​∂xj′​​=(1+e−xj​)2e−xj​​=xj′​(1−xj′​)
则很容易就得到输出层神经元的输出为隐含层输出加权和:
yn(k)=∑jwj2xj′y_n(k)=\sum_{j}{w_{j2}x_j^{'}} yn​(k)=j∑​wj2​xj′​
误差为:
e(k)=y(k)−yn(k);e(k)=y(k)-y_n(k); e(k)=y(k)−yn​(k);
准则函数设为误差平方和的一半:
E=e(k)22E=\frac{e(k)^2}{2} E=2e(k)2​
只有正向传播还不可以,我们还需要反向传播来调整他们之间权值w
第二部分:反向传播
反向传播使用δ\deltaδ学习算法
输出层和隐含层之间的连接权值wj2w_{j2}wj2​学习过程(其他同理):
Δwj2=−η.∂E∂wj2=η.e(k).∂yn∂wj2=η.e(k).xj′\Delta w_{j2}=-\eta .\frac{\partial{E}}{\partial{w_{j2}}}=\eta.e(k).\frac{\partial{y_n}}{\partial{w_{j2}}}=\eta. e(k) .x_j^{'}Δwj2​=−η.∂wj2​∂E​=η.e(k).∂wj2​∂yn​​=η.e(k).xj′​
因此修正后的k+1时刻的wjkw_{jk}wjk​可以表示为:
wjk(k+1)=wjk(k)+Δwj2w_{jk}(k+1)=w_{jk}(k)+\Delta w_{j2} wjk​(k+1)=wjk​(k)+Δwj2​
隐含层与输入层之间连接权值wijw_{ij}wij​的学习过程为:
Δwij=−η.∂E∂wij=η.e(k).∂yn∂wij=η.e(k).xj′=wj2.xj′.(1−xj′).xi\Delta w_{ij}=-\eta .\frac{\partial{E}}{\partial{w_{ij}}}=\eta.e(k).\frac{\partial{y_n}}{\partial{w_{ij}}}=\eta. e(k) .x_j^{'}=w_{j2}.x_j^{'}.(1-x_j^{'}).x_iΔwij​=−η.∂wij​∂E​=η.e(k).∂wij​∂yn​​=η.e(k).xj′​=wj2​.xj′​.(1−xj′​).xi​
因此修正后的k+1时刻的wijw_{ij}wij​可以表示为:
wij(k+1)=wjk(k)+Δwijw_{ij}(k+1)=w_{jk}(k)+\Delta w_{ij} wij​(k+1)=wjk​(k)+Δwij​
为了避免在学习过程中发生振荡现象,导致收敛速度变慢,我们需要引入动量因子α\alphaα,把上次权值对本次权值变化的影响考虑进去,即:
wj2(k+1)=wj2(k)+Δwj2+α(wj2(k)−wj2(k−1))wij(k+1)=wij(k)+Δwij+α(wij(k)−wij(k−1))w_{j2}(k+1)=w_{j2}(k)+\Delta w_{j2}+\alpha (w_{j2}(k)-w_{j2}(k-1))\\ w_{ij}(k+1)=w_{ij}(k)+\Delta w_{ij}+\alpha (w_{ij}(k)-w_{ij}(k-1)) wj2​(k+1)=wj2​(k)+Δwj2​+α(wj2​(k)−wj2​(k−1))wij​(k+1)=wij​(k)+Δwij​+α(wij​(k)−wij​(k−1))
η为学习速率∈[0,1],α为动量因子∈[0,1]\eta为学习速率\in[0,1],\alpha为动量因子\in[0,1]η为学习速率∈[0,1],α为动量因子∈[0,1]
jacobian信息:对象输出对输入的敏感度∂y(k)∂u(k)\frac{\partial{y(k)}}{\partial{u(k)}}∂u(k)∂y(k)​,其值可以被神经网络辨识:
将BP网络的第一个输入称为u(k),可得:
∂y(k)∂u(k)≈∂yn(k)∂u(k)=∂yn(k)∂xj′.∂xj′∂xj.∂xj∂u(k)=∑jwj2xj′(1−xj′)w1j\frac{\partial{y(k)}}{\partial{u(k)}}\approx \frac{\partial{y_n(k)}}{\partial{u(k)}}=\frac{\partial{y_n(k)}}{\partial{x_j^{'}}}.\frac{\partial{x_j^{'}}}{\partial{x_j}}.\frac{\partial{x_j}}{\partial{u(k)}}=\sum_{j}{w_{j2}x_j^{'}(1-x_j^{'})w_{1j}} ∂u(k)∂y(k)​≈∂u(k)∂yn​(k)​=∂xj′​∂yn​(k)​.∂xj​∂xj′​​.∂u(k)∂xj​​=j∑​wj2​xj′​(1−xj′​)w1j​
至此,原理部分讲完了。
三、实例
对象 u(k)=sin(πt)2u(k)={sin(\pi t)}^{2}u(k)=sin(πt)2,权值w1,w2分别取,η=0.9,α=0.5\eta=0.9,\alpha =0.5η=0.9,α=0.5 取1000个点。
逼近曲线:

error:

code:

%%本脚本用于系统辨识  BP网络逼近函数
%2019-4-17  王萌
close all
clear all
clc
xite=0.9; %学习速率
alfa=0.5; %动量因子
%初始化权重 %%三个神经元 神经元个数提高,准确度也会提高
w2=rands(3,1);
w2_1=w2;
w2_2=w2_1;
w1=rands(2,3);
w1_1=w1;
w1_2=w1;
%初始化输入
dw1=0*w1;
x=[0 0]';
%初始化输出
I=[0,0,0]';
Iout=[0,0,0]';
FI=[0,0,0];
ts=0.01;%间隔
for k=1:1000  %
time(k)=k*ts;u(k)=sin(pi*k*ts)^2;   %%被逼近的函数 输入y(k)=u(k);             %输入for j=1:size(w1,2)I(j)=x'*w1(:,j);   %激活函数Iout(j)=1/(1+exp(-I(j)));endyn(k)=w2'*Iout; %神经网络的输出 6 维 e(k)=y(k)-yn(k); %误差计算w2=w2_1+(xite*e(k)*Iout)+alfa*(w2_1-w2_2);%学习算法 隐含层与输出层%%for j=1:size(w1,2)FI(j)=exp(-I(j))/(1+exp(-I(j)))^2; %激活函数的导数end%%增量计算for i=1:size(w1,1)for j=1:size(w1,2)dw1(i,j)=e(k)*xite*FI(j)*w2(j)*x(i);  %隐含层与输入层endendw1=w1_1+dw1+alfa*(w1_1-w1_2);  %学习算法 隐含层与输入层%%下面计算jacobian信息yu=0;for j=1:size(w1,2)yu=yu+w2(j)*w1(1,j)*FI(j);  enddyu(k)=yu;x(1)=u(k);x(2)=y(k);w1_2=w1_1;w1_1=w1;w2_2=w2_1;w2_1=w2;
end
figure(1)
plot(time,y,'r',time,yn,'b');
xlabel('times');ylabel('y and yn');
figure(2)
plot(time,y-yn,'r');
xlabel('times');ylabel('error');
figure(3)
plot(time,dyu);
xlabel('times');ylabel('dyu');

使用BP网络逼近函数-matlab相关推荐

  1. 双隐藏层BP网络的matlab仿真,求遗传算法优化含有两个隐含层的BP神经网络的matlab程序...

    怎样用遗传算法优化含有两个隐含层的BP神经网络的matlab程序啊,这个代码是错的,可不知道错在哪,求高手帮忙解答,非常感谢! FieldD=[repmat(PRECI,1,N);repmat([-0 ...

  2. 【遗传优化BP网络】基于自适应遗传算法的BP神经网络的股票预测MATLAB仿真

    1.软件版本 MATLAB2021a 2.本算法理论知识 通过MATLAB对BP神经网络,基于遗传优化的BP神经网络,基于改进遗传优化的BP神经网络以及基于改进遗传优化的组合BP神经网络等多种算法的股 ...

  3. BP神经网络逼近函数项目(含matlab代码)

    BP神经网络逼近函数 本文讲述的是使用BP神经网络对一个函数的逼近模拟,理论部分可参考博客:https://blog.csdn.net/weixin_42493873/article/details/ ...

  4. 【啃书】《智能优化算法及其MATLAB实例》例9.3运用BP网络预测数据

    文章目录 问题描述 仿真过程 matlab源码 问题描述 仿真过程 matlab源码 %20201104lu注:该代码在matlab2019b成功运行,运行会提醒该代码使用的函数老旧 %%%%%%%% ...

  5. matlab nctool使用,感知器和BP网络设计及应用技术总结.doc

    学号: 1001314197 人工神经网络实验报告 实验一 感知器和BP网络设计及应用 实验1 感知器和BP网络设计及应用 题目一 初步认识Matlab人工神经网络工具箱 实验目的 初步了解人工神经网 ...

  6. matlab bp归一化,bp网络样本归一化处理

    我贴出来吧 归一化化定义:我是这样认为的,归一化化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内.首先归一化是为了后面数据处理的方便,其次是保正程序运行时收敛加快. 在ma ...

  7. matlab搭建BP网络

    matlab中使用BP网络 前一段时间在看神经网络,学习了一点皮毛,在这里和大家分享一下. 首先说明,BP并不能称之为神经网络的一种,更确切的说是一种BP算法.因为在其他的神经网络(例如LSTM,DB ...

  8. Matlab的神经网络(一)BP网络

    最近刚开始学习神经网络,感觉一开始接触浅浅的理解是没问题的,但是深层次理解还是需要不断地实践.BP是一种前馈的运行,但是可以将误差反馈回去:根据梯度下降法来不断的调整权值(容易陷入局部最小值),直到最 ...

  9. MATLAB实现基于BP网络的个人信贷信用评估

    问题背景 神经网络建模 本实例采用一种简单的个人客户信贷信用评估方法,对所有客户做二分类,只区分好和差两种情况.数据采用德国信用数据库.德国信用数据库由Hans Hofmann教授整理,包含1000份 ...

最新文章

  1. oracle中取最新的前几条记录(rownum)
  2. mac python3.8怎样安装scrapy_Python爬虫与mac下Scrapy配置
  3. js中计时器setTimeout、setInterval、requestAnimationFrame区别
  4. 8个直播底层支撑的创业机会,你都抓住了吗?
  5. Javascript闭包——懂不懂由你,反正我是懂了
  6. 酱茄企业官网多端开源小程序源码 v1.0.0
  7. python实现单张图像拼接与批量图片拼接
  8. Linux 后台开发常用命令目录(更新 ing)
  9. java滚动条调整数值_急..JAVA 在画布上画拖动滚动条可扩大缩小的长方形
  10. java实现一个录像大师
  11. ROS机器人语音模块
  12. 挖掘数百万参与的IMVU用户
  13. win环境安装October CMS
  14. 三极管的工作原理(详细、通俗易懂、图文并茂)
  15. 特殊符号“.”对命令识别的影响:bam样本名报错 和 转换gene id时‘ENSEMBL’ keys无法识别
  16. 《linux多线程服务端编程》---- C++基础前奏
  17. 静态监听 lsnrctl reload
  18. 雷达感应智能窗帘,雷达感应模组方案,家居智能化交互体验
  19. 天堂2mysql_天堂2单机版 L2J-som-rotm 安装全过程及常用工具 一步到位
  20. week8—多线程下载多个网页文件

热门文章

  1. VCS和Verdi的安装解决问题记录
  2. 微信小程序、uniapp、H5——发送、显示emoji表情
  3. 网络篇 思科设备的登陆方式07
  4. php 正方,用php的CURL模拟登录正方教务系统
  5. 浏览器和服务器之间的通信
  6. unity3D 下雨效果实现
  7. 楼天城楼教主的acm心路历程 ---- 抄自网上
  8. 微信小程序踩坑–卸载所有页面(含tabBar)跳转到指定页面
  9. 1.3 博弈结构和博弈的分类
  10. WPP和iHeartMedia推出“聆听项目”