一、BP神经网络背景

BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络。

在人工神经网络的发展历史上,感知机(Multilayer Perceptron,MLP)网络曾对人工神经网络的发展发挥了极大的作用,但是,随着研究工作的深入,人们发现它还存在不足,例如无法处理非线性问题,从而限制了它的应用。增强网络的分类和识别能力、解决非线性问题的唯一途径是采用多层前馈网络,即在输入层和输出层之间加上隐含层。构成多层前馈感知器网络。

常见的神经网络所使用的是层级结构,每层神经元与下一神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络通常称为”多层前馈神经网络“(multi-layer feedforward neural networks)。其中输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出;换言之,输入层神经元仅是接受输入,不进行函数处理,隐层与输出层包含功能神经元。神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴涵在连接权与阈值中.

示例神经网络输入层包含4个神经元,隐层包含6个神经元,输出层包含4个盛神经元

从结构上讲,BP网络具有输入层、隐藏层和输出层;从本质上讲,BP算法就是以网络误差平方为目标函数、采用梯度下降法来计算目标函数的最小值。

BP神经网络的训练过程包含3个阶段,首先是信号的前向传播阶段,然后是误差的反向传播阶段,最后是权值和阈值的更新阶段,如此反复迭代,在大于最大迭代次数或者小于目标误差时停止迭代,所得到的就是训练好的BP神经网络模型

知识补充–感知机

感知机(Perception)是神经网络和 SVM(支持向量机)的基础,是一种二分类的线性分类模型。为了形象地说明一下感知机的工作机理,可以用神经网络中的感知机模型来描述一下,下图是维基百科中描述感知机的模型图。


图中, n维向量[a1,a2,…,an]的转置作为感知机的输入,[w1,w2,…,wn]的转置为输入分量连接到感知机的权重(weifht),b 为偏置(bias),f(.)为激活函数,t 为感知机的输出。t 的数学表示为:

另外,这里的 f(.) 用的是符号函数:可以看出,符号函数是非连续的,不光滑的,这只是激活函数的一种

二、BP神经网络原理

给定训练集:D={(x1,y1),(x2,y2),…,(xm,ym)},xi∈Rd,yi∈RlD=\{(x_1,y_1),(x_2,y_2),\ldots,(x_m,y_m)\},x_i\in\mathbb{R}^d,y_i\in\mathbb{R}^lD={(x1​,y1​),(x2​,y2​),…,(xm​,ym​)},xi​∈Rd,yi​∈Rl。即输入示例由d个属性描述,输出l维实值向量。在神经网络中,输入神经元与输出神经元的个数便由这两个值确定,即有d个输入神经元,l个输出神经元,而隐层的层数和所包含的神经元个数由实际问题确定,这里假设只有一层,包含q个隐层神经元。

接下来介绍两个概念,权值和阈值,上文曾说,神经网络训练出的东西,蕴藏在这两个值中,因此这两个概念极为重要。BP神经网络中不同层之间相互连接,信号在不同层之间的传递需要通过带权重的连接进行传递。阈值存在于隐层神经元和输出神经元之中,在本示例神经网络中,隐层神经元接收来自输入层的信号,隐层的每个神经元接收到的总输入值与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。输出层的神经元也是以同样方式产生神经元的输出。

为便于区分,输入层第i个神经元与隐层第h个神经元之间的连接权vihv_{ih}vih​,隐层第h个神经元与输出层第j个神经元之间的连接权为ωhj\omega_{hj}ωhj​。隐层第h个神经元的阈值使用γh\gamma_hγh​表示,输出层的第j个神经元的阈值使用θj\theta_jθj​表示。

记隐层第h个神经元接收到的输入为αh\alpha_hαh​,输出为bhb_hbh​。输出层第j个神经元接收到的输入为βj\beta_jβj​

本示例中隐层与输出层的激活函数都采用Sigmoid函数。

对训练样例(xk,yk)(x_k,y_k)(xk​,yk​) ,假定神经网络的输出为yk^=(y^1k,y^2k,…,y^lk)\hat{y_k}=(\hat{y}_1^k,\hat{y}_2^k,\ldots,\hat{y}_l^k)yk​^​=(y^​1k​,y^​2k​,…,y^​lk​) ,即:y^jk=f(βj−θj)\hat{y}_j^k=f(\beta_j-\theta_j)y^​jk​=f(βj​−θj​)。则网络在(xk,yk)(x_k,y_k)(xk​,yk​)上的均方误差为:Ek=12∑j=1l(y^jk−yjk)2E_k=\frac{1}{2}\sum_{j=1}^l(\hat{y}_j^k-y_j^k)^2Ek​=21​j=1∑l​(y^​jk​−yjk​)2

权值的更新:BP神经网络基于梯度下降策略,以目标的负梯度方向对参数进行调整。

给定学习率η\etaη,(学习率η∈(0,1)\eta\in(0,1)η∈(0,1)由训练者自己给出,学习率控制着每一轮迭代的更新步长,若太大则容易振荡,若太小则收敛速度过慢。目前没有合适的办法计算最准确的学习率)。
输出层的梯度:gj=y^jk(1−y^jk)(yjk−y^jk)g_j=\hat{y}_j^k(1-\hat{y}_j^k)(y_j^k-\hat{y}_j^k)gj​=y^​jk​(1−y^​jk​)(yjk​−y^​jk​)

隐层的梯度:eh=bh(1−bh)∑j=1lωhjgje_h=b_h(1-b_h)\sum_{j=1}^l\omega_{hj}g_jeh​=bh​(1−bh​)∑j=1l​ωhj​gj​

更新公式:Δωhj=ηgjbh\Delta\omega_{hj}=\eta g_jb_hΔωhj​=ηgj​bh​
Δθj=−ηgj\Delta\theta_j=-\eta g_jΔθj​=−ηgj​
Δvih=ηehxi\Delta v_{ih}=\eta e_hx_iΔvih​=ηeh​xi​
Δγh=−ηeh\Delta\gamma_h=-\eta e_hΔγh​=−ηeh​

单词迭代代码

import numpy as np#输入
x=np.array([[1,0,1]]).T
#目的结果
y=np.array([[1]]).T
#初始权值和阈值
w1=np.array([[0.2,-0.3],[0.4,0.1],[-0.5,0.2]])
w2=np.array([[-0.3,-0.2]])
b=np.array([[-0.4,0.2,0.1]]).T#参数
net_max_time=2000  #最大迭代次数
net_goal=0.00001  #目标误差
net_lr=0.9       #学习率
def sigmoid(num1,num2):return 1/(1+np.exp(num2-num1))m1,n1=np.shape(w1)
m2,n2=np.shape(w2)
m3,n3=np.shape(b)#正向传播
v=[]
for i in range(n1):v.append(sigmoid(w1[:,i].dot(x),b[i]))  #输入层至隐含层
v.append(sigmoid(w2.dot(v),b[-1]))  #隐含层至输出层#反向计算梯度
gra=[]
gra.append(v[-1]*(1-v[-1])*(y-v[-1]))  #输出层至隐含层
for j in range(n2)[::-1]:gra.append(v[j]*(1-v[j])*gra[0]*w2[0][j])
gra.reverse()  #矩阵反转#更新权值
for i in range(m2):for j in range(n2):w2[i][j]=w2[i][j]+net_lr*v[j]*gra[-1]
for i in range(m1):for j in range(n1):w1[i][j]=w1[i][j]+net_lr*x[i]*gra[j]
#更新阈值
b[-1]=b[-1]-net_lr*gra[-1]
for i in range(m3-1):b[i][0]=b[i][0]-net_lr*gra[i]print("更新权值后的w(输入层至隐层):\n",w1)
print("更新权值后的w(隐层至输出层):\n",w2.T)
print("更新阈值后的b:\n",b)

三、参考

1、https://juejin.im/post/5e06d21ff265da33e056a181
2、《机器学习》
3、百度百科

BP(BackPropagation)神经网络算法详解相关推荐

  1. 神经网络算法详解 04:反馈神经网络(Hopfield、BAM、BM、RBM)

    本文介绍了反馈神经网络,包括Hopfield网络,离散Hopfield网络(DHNN),连续Hopfield网络(CHNN),双向联想记忆网络(BAM),玻尔兹曼机(BM),受限玻尔兹曼机(RBM). ...

  2. 神经网络算法详解 01:人工神经网络基础

    本文介绍了人工智能的发展历史,基本概念,应用领域:神经元模型,神经元的学习规则以及神经网络工作原理.本系列文章来自阿里云大学人工智能学习路线中的<神经网络概览及神经网络算法详解>课程. 系 ...

  3. python神经网络算法pdf_Python与机器学习实战 决策树、集成学习、支持向量机与神经网络算法详解及编程实现.pdf...

    作 者 :何宇健 出版发行 : 北京:电子工业出版社 , 2017.06 ISBN号 :978-7-121-31720-0 页 数 : 315 原书定价 : 69.00 主题词 : 软件工具-程序设计 ...

  4. 卷积神经网络算法详解

    不得不喷一下CSDN,不支持图片复制粘贴就算了,我把文章从WORD转PDF再转JPG发还得一张张的选

  5. 深度学习 --- BP算法详解(流程图、BP主要功能、BP算法的局限性)

    上一节我们详细推倒了BP算法的来龙去脉,请把原理一定要搞懂,不懂的请好好理解BP算法详解,我们下面就直接把上一节推导出的权值调整公式拿过来,然后给出程序流程图,该流程图是严格按照上一节的权值更新过程写 ...

  6. 神经网络的函数表达式,神经网络公式详解pdf

    1.神经网络的准确率是怎么计算的? 其实神经网络的准确率的标准是自己定义的. 我把你的例子赋予某种意义讲解: 1,期望输出[1 0 0 1],每个元素代表一个属性是否存在.像着4个元素分别表示:是否肺 ...

  7. 梯度下降(Gradient descent)算法详解

    梯度下降(Gradient descent)算法详解 说起梯度下降算法,其实并不是很难,它的重要作用就是求函数的极值.梯度下降就是求一个函数的最小值,对应的梯度上升就是求函数最大值.为什么这样说呢?兔 ...

  8. Matlab人脸检测算法详解

    这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...

  9. DL之BP:神经网络算法简介之BP算法简介(链式法则/计算图解释)、案例应用之详细攻略

    DL之BP:神经网络算法简介之BP算法简介(链式法则/计算图解释).案例应用之详细攻略 相关文章:DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类 ...

  10. SoftPool算法详解

    Refining activation downsampling with SoftPool-论文链接-代码链接 目录 1.需求解读 2.SoftPool算法简介 3.SoftPool算法详解 3.1 ...

最新文章

  1. python绘制饼图-Python使用Plotly绘图工具,绘制饼图
  2. 粒子滤波 演示与opencv代码
  3. 今天刚刚开通了写播客的功能,以后记录工作学习的点点滴滴
  4. 《剑指offer》-- 斐波那契数列、跳台阶问题 、变态跳台阶问题、矩阵覆盖
  5. 思科bfd静态路由切换_思科路由器与华为路由器静态路由关联双向BFD配置
  6. 将Fri May 04 17:25:34 CST 2012形式的日期字符串转换成java.util.Date对象的方法
  7. cgi备份还原和ghost有什么区别_手动GHOST还原重装系统详细教程
  8. php mvc多态实例,asp.net mvc-多态模型绑定
  9. 添加Zabbix Agent客户端,并解决报错。
  10. 趣学 C 语言(六)—— 结构和联合
  11. PHP生成UTF-8编码的CSV文件用Excel打开乱码的解决办法
  12. 共享计算机管理员权限设置,有共享文件夹。怎么从局域网取得管理员权限
  13. Python Flask微信公众号开发
  14. 移动web页面前端开发总结
  15. 什么是埋点?我们为什么需要埋点?(原作者:知乎 原志Growing)
  16. 云计算实验(二)Hadoop 练习
  17. windows下pyqt4
  18. Python中文gbk编码输出报错
  19. 基于python和深度学习(语音识别、NLP)实现本地离线智能语音控制终端(带聊天功能和家居控制功能)
  20. 电脑超时空保卫者——光华反病毒软件(转)

热门文章

  1. DH 算法迪菲-赫尔曼算法QUIC协议和HTTP3.0
  2. c语言延时函数(c语言延时函数delay用法)
  3. 《遥感原理与应用》孙家抦版知识点总结(含简答题)——第三章
  4. 干货分享——安卓USB通信
  5. Unity2017安装
  6. 用calibre自制图文并茂且支持kindle的mobi电子书
  7. 《视觉SLAM十四讲》笔记摘抄
  8. c语言同构数循环,C语言求同构数.pdf
  9. 笔记本能安装联想智能云教室吗_挑战Jupyter Notebook:云协作、云硬件,上云的Notebook编程环境...
  10. xp激活30天到期_我的XP系统还剩30天激活怎么办