BP后向传播算法

前言

昨天看到了一篇关于BP后向传播的论文,想着把这方面的知识彻底理解一下,本文将基于该论文和基本的BP算法。解释其基本概念和权值调整的运算过程。

一、BP神经网络的基本原理

BP(Back Propagation)网络是1986年由Rinehart和McClelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法(梯度下降法),通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)(如下图所示)。

上图中,绿色单元为输入单元(input unit),蓝色单元为隐藏层单元(hidden unit),红色单元为输出单元(output unit)。

二、BP神经元与前向传播算法简介

  • 神经元
    假设我们的训练集只有一个实例(x(1),y(1))(x(1),y(1)),我们的神经网络是一个三层的神经网络,即隐藏层只有1层。

    以中间层神经元SjS_j,(j=1,2)为例,它只模仿了生物神经元所具有的三个最基本也是最重要的功能:加权、求和与转移。其中x1、x2、x3x_1、x_2、x_3分别代表来自输入层(Input Layer)神经元1、2、3的输入;wj1、wj2、wj3w_{j1}、w_{j2}、w_{j3}则分别表示神经元1、2、3与第j个神经元的连接强度,即权值;wj0w_{j0}为阈值;f(⋅)f(·)为传递函数;yj为第j个神经元的输出。
    第1个神经元的净输入值 S1S_1为:

    Sj=∑i=13wjixi+wj0=WjX

    S_j = \sum_{i=1}^3 w_{ji} x_i+w_{j0} = W_jX
    其中,wj0w_{j0} 是偏置单元x0x_0对应的权值,x0x_0为1。
    用上图的S1S_1 为例,S1=w11x1+w12x2+w13x3+w10x0S_1 = w_{11}x_1+w_{12}x_2+w_{13}x_3+w_{10}x_0

净输入SjS_j通过传递函数(Transfer Function)f (·)后,便得到第j个神经元的输出yjy_j :

yj=f(Sj)=f(∑i=03wjixi)

y_j = f(S_j) = f(\sum_{i=0}^3 w_{ji} x_i)

式中f(·)是单调上升函数,而且必须是有界函数,因为细胞传递的信号不可能无限增加,必有一最大值。

  • 前向传播算法步骤

    a(1)=x

    a^{(1)} = x

    z(2)=θ(1)a(1)

    z^{(2)} = \theta^{(1)}a^{(1)}

    a(2)=f(θ(1)a(1))(加入bias unit)

    a^{(2)} =f( \theta^{(1)}a^{(1)}) (加入bias \ unit)

    z(3)=θ(2)a(2)

    z^{(3)} = \theta^{(2)}a^{(2)}

    a(3)=Fθ(x)=f(θ(2)a(2))(加入bias unit)

    a^{(3)} =F_{\theta}(x)=f( \theta^{(2)}a^{(2)}) (加入bias \ unit)
    a(3)a^{(3)} 为预测结果。

三、反向传播

设 BP网络的输入层有n个节点,隐层有q个节点,输出层有m个节点,输入层与隐层之间的权值为vkiv_{ki} ,隐层与输出层之间的权值为 wjkw_{jk},如下图所示。隐层的传递函数为f1(·),输出层的传递函数为f2(·)。其中i= 1,2,3,…, n;k = 1,2,3,…,q;j=1,2,3,…,m。

3.1 定义误差函数

输入P个学习样本,用x1,x2,...,xpx^{1}, x^{2},...,x^{p}来表示。第p个样本输入到网络后得到输出 ypjy^{p}_j(j=1,2,…m)。采用平方型误差函数,于是得到第p个样本的误差EpE_p:

Ep=12∑j=1m(tpj−ypj)2

E_p = \frac{1}{2}\sum_{j=1}^m (t^{p}_j - y^{p}_j)^2
式中: tpjt^{p}_j 为期望输出。
对于全部的P个样本,全局误差为:

E=12∑p=1P∑j=1m(tpj−ypj)2

E = \frac{1}{2}\sum_{p=1}^P\sum_{j=1}^m (t^{p}_j - y^{p}_j)^2

3.2 输出层权值的变化

采用累计误差BP算法调整wjkw_{jk},使全局误差E变小,运用梯度下降法:

Δwjk=−α∂E∂wjk=−α∂∂wjk∑p=1PEp

\Delta w_{jk} = -\alpha \frac{\partial E}{\partial w_{jk}}=-\alpha \frac{\partial}{\partial w_{jk}} \sum_{p=1}^P E_p

式中: α\alpha—学习率
定义误差信号为:

δyj=−∂Ep∂Sj=−∂Ep∂yj∂yj∂Sj

\delta_{yj} = - \frac{\partial E_p}{\partial S_{j}}=-\frac{\partial E_p}{\partial y_{j}} \frac{\partial y_j}{\partial S_{j}}
SjS_{j} 为前向传播中的 z(3)z^{(3)} 的第j个元素。 yjy_j 为前向传播中 a(3)a^{(3)} 的第j个元素
其中第一项:

∂Ep∂yj=∂∂yj[12∑j=1m(tpj−ypj)2]=−(tpj−ypj)

\frac{\partial E_p}{\partial y_{j}} = \frac{\partial}{\partial y_{j}}[\frac{1}{2}\sum_{j=1}^m (t^{p}_j - y^{p}_j)^2]=- (t^{p}_j - y^{p}_j)
第二项:

∂yj∂Sj=f′2(Sj)

\frac{\partial y_j}{\partial S_{j}} = f^{'}_2(S_j)
是输出层传递函数的偏微分。
于是:

δyj=−(tpj−ypj)f′2(Sj)

\delta_{yj} =- (t^{p}_j - y^{p}_j)f^{'}_2(S_j)
由chain rule易得:

∂Ep∂wjk=∂Ep∂Sj∂Sj∂wjk=−δyjzk

\frac{\partial E_p}{\partial w_{jk}} = \frac{\partial E_p}{\partial S_{j}} \frac{\partial S_j}{\partial w_{jk}} = -\delta_{yj}z_k
于是 输出层各神经元的权值调整公式为:

Δwjk=∑p=1Pα(tpj−ypj)f′2(Sj)zk

\Delta w_{jk} = \sum_{p=1}^P \alpha(t^{p}_j - y^{p}_j)f^{'}_2(S_j)z_k

3.3 隐藏层权值的变化

Δvki=−α∂E∂vki=−α∂∂vki∑p=1PEp=∑p=1P(−α∂Ep∂vki)

\Delta v_{ki} = -\alpha \frac{\partial E}{\partial v_{ki}}=-\alpha \frac{\partial}{\partial v_{ki}} \sum_{p=1}^P E_p =\sum_{p=1}^P (-\alpha\frac{\partial E_p}{\partial v_{ki}})
定义误差信号为:

δzk=−∂Ep∂Sk=−∂Ep∂zk∂zk∂Sk

\delta_{zk} = - \frac{\partial E_p}{\partial S_{k}}=-\frac{\partial E_p}{\partial z_{k}} \frac{\partial z_k}{\partial S_{k}}

SkS_{k} 为前向传播中的z(2)z^{(2)} 的第k个元素。zkz_k 为前向传播中a(2)a^{(2)} 的第k个元素。
其中第一项:

∂Ep∂zk=∂∂zk[12∑j=1m(tpj−ypj)2]=−∑j=1m(tpj−ypj)∂yj∂zk

\frac{\partial E_p}{\partial z_{k}} = \frac{\partial}{\partial z_{k}}[\frac{1}{2}\sum_{j=1}^m (t^{p}_j - y^{p}_j)^2]=-\sum_{j=1}^m (t^{p}_j - y^{p}_j)\frac{\partial y_{j}}{\partial z_{k}}
依chain rule有:

∂yj∂zk=∂yj∂Sj∂Sj∂zk=f′2(Sj)wjk

\frac{\partial y_{j}}{\partial z_{k}} = \frac{\partial y_{j}}{\partial S_{j}}\frac{\partial S_{j}}{\partial z_{k}} = f^{'}_2(S_j)w_{jk}
第二项:

∂zk∂Sk=f′1(Sk)

\frac{\partial z_{k}}{\partial S_{k}} = f^{'}_1(S_k)
是隐层传递函数的偏微分。
于是 δzk\delta_{zk} 容易求得。
又由chain rule得:

∂Ep∂vki=∂Ep∂Sk∂Sk∂vki=−δzkxi

\frac{\partial E_{p}}{\partial v_{ki}} = \frac{\partial E_{p}}{\partial S_{k}} \frac{\partial S_{k}}{\partial v_{ki}} = -\delta_{zk}x_i
从而得到 隐层各神经元的权值调整公式为:

Δvki=∂Ep∂vki=∑p=1P∑j=1mα(tpj−ypj)f′2(Sj)wjkf′1(Sk)xi

\Delta v_{ki}=\frac{\partial E_{p}}{\partial v_{ki}} = \sum_{p=1}^P\sum_{j=1}^m \alpha(t^{p}_j - y^{p}_j)f^{'}_2(S_j)w_{jk}f^{'}_1(S_k)x_i

四、BP算法的改进

BP算法理论具有依据可靠、推导过程严谨、精度较高、通用性较好等优点,但标准BP算法存在以下缺点:收敛速度缓慢;容易陷入局部极小值;难以确定隐层数和隐层节点个数。在实际应用中,BP算法很难胜任,因此出现了很多改进算法。
1) 利用动量法改进BP算法
标准BP算法实质上是一种简单的最速下降静态寻优方法,在修正W(K)时,只按照第K步的负梯度方向进行修正,而没有考虑到以前积累的经验,即以前时刻的梯度方向,从而常常使学习过程发生振荡,收敛缓慢。动量法权值调整算法的具体做法是:将上一次权值调整量的一部分迭加到按本次误差计算所得的权值调整量上,作为本次的实际权值调整量,即:

ΔW(n)=−α∇E(n)+βΔW(n−1)

\Delta W(n) = -\alpha \nabla E(n) + \beta \Delta W(n-1)
其中: β\beta为动量系数,通常大于0小于0.9; α\alpha—学习率,范围在0.001~10之间。这种方法所加的动量因子实际上相当于 阻尼项,它减小了学习过程中的振荡趋势,从而改善了收敛性。动量法降低了网络对于误差曲面局部细节的敏感性,有效的抑制了网络陷入局部极小。
2) 自适应调整学习速率
标准BP算法收敛速度缓慢的一个重要原因是学习率选择不当,学习率选得太小,收敛太慢;学习率选得太大,则有可能修正过头,导致振荡甚至发散。

调整的基本指导思想是:在学习收敛的情况下,增大α\alpha,以缩短学习时间;当α\alpha偏大致使不能收敛时,要及时减小它的值,直到收敛为止。
3) 动量-自适应学习速率调整算法
采用动量法时,BP算法可以找到更优的解;采用自适应学习速率法时,BP算法可以缩短训练时间。将以上两种方法结合起来,就得到动量-自适应学习速率调整算法。
4) L-M学习规则
L-M(Levenberg-Marquardt)算法比前述几种使用梯度下降法的BP算法要快得多,但对于复杂问题,这种方法需要相当大的存储空间。L-M(Levenberg-Marquardt)优化方法的权值调整率选为:

Δw=(JTJ+μl)−1JTe

\Delta w = (J^TJ+μl)^{-1}J^Te
其中:e—误差向量;J—网络误差对权值导数的雅可比(Jacobian)矩阵;μ—标量,当 μ很大时上式接近于梯度法,当 μ很小时上式变成了Gauss-Newton法,在这种方法中,μ也是自适应调整的。
ps:
虽然牛顿法效果好,但是由于所使用的海森矩阵所需要的运算量太大,实际上用的还是比较少的。

机器学习基础——BP算法相关推荐

  1. 机器学习基础-经典算法总结

    机器学习基础-经典算法 逻辑回归 逻辑回归的原理,问题的假设 为什么逻辑回归也可称为对数几率回归 推导逻辑回归损失函数 逻辑回归损失函数求导 逻辑回归为什么使用交叉熵作为损失函数 LR是不是凸优化问题 ...

  2. Python 实现 周志华 《机器学习》 BP算法

    习题5.5: 试编程实现标准BP算法和累积BP算法,在西瓜数据集3.0上分别用这两个算法训练一个单隐层网络,并进行比较 算法的主要思想来自周志华<机器学习>上讲BP算法的部分,实现了书上介 ...

  3. Python 实现 周志华 《机器学习》 BP算法(高级版)

    习题5.5: 试编程实现标准BP算法和累积BP算法,在西瓜数据集3.0上分别用这两个算法训练一个单隐层网络,并进行比较 算法的主要思想来自周志华<机器学习>上讲BP算法的部分,实现了书上介 ...

  4. 太赞了!机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)

    Datawhale 作者:尹晓丹,Datawhale优秀学习者 寄语:首先,简单介绍了生成模型和判别模型,对条件概率.先验概率和后验概率进行了总结:其次,对朴素贝叶斯的原理及公式推导做了详细解读:再次 ...

  5. 【机器学习基础】算法工程师必备的机器学习--EM

    『运筹OR帷幄』原创 作者:华校专 作者信息: 华校专,曾任阿里巴巴资深算法工程师.智易科技首席算法研究员,现任腾讯高级研究员,<Python 大战机器学习>的作者. 编者按: 算法工程师 ...

  6. 【机器学习入门】机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)...

    Datawhale 作者:尹晓丹,Datawhale优秀学习者 寄语:首先,简单介绍了生成模型和判别模型,对条件概率.先验概率和后验概率进行了总结:其次,对朴素贝叶斯的原理及公式推导做了详细解读:再次 ...

  7. 最小错误率贝叶斯决策的基本思想_太赞了!机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)...

    Datawhale 作者:尹晓丹,Datawhale优秀学习者 寄语:首先,简单介绍了生成模型和判别模型,对条件概率.先验概率和后验概率进行了总结:其次,对朴素贝叶斯的原理及公式推导做了详细解读:再次 ...

  8. em算法怎么对应原有分类_机器学习基础-EM算法

    EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断等等.本文就对 ...

  9. 机器学习基础 EM算法

    文章目录 一.初识EM算法 二.EM算法介绍 1. 极大似然估计 1.1 问题描述 1.2 用数学知识解决现实问题 1.3 最大似然函数估计值的求解步骤 2. EM算法实例描述 3. EM算法流程 三 ...

最新文章

  1. HDU 5112 A Curious Matt 水题
  2. mysql 关键字的优先级_mySQL之关键字的执行优先级讲解
  3. 单片机GPIO软件模拟I2C通讯程序
  4. 学习Kotlin(八)其他技术
  5. Cortex-M3-建立堆栈
  6. python模拟键盘输入视频_python教程-模拟鼠标和键盘输入
  7. RSA算法原理简介,非对称加密,公开密钥算法(易懂篇)
  8. MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解
  9. 从零基础入门Tensorflow2.0 ----九、44.5 keras转换成具体函数
  10. 十三种Java开发工具
  11. 分享《模拟专升本考试排名》
  12. factory(工厂) 模式简单示例
  13. 什么是APS系统?导入APS要注意什么?值得反复观看
  14. iphone mysql壁纸,壁纸图片动态
  15. 程序员赚外快到底有哪些途径?干货篇
  16. AutoSAR实验视频讲解:相关资料下载
  17. PostgreSQL的MVCC
  18. apollo服务器集成java_Apollo Server 集成性能监控
  19. Java打印输出:bt磁力天堂
  20. centos7 编译安装ffmpeg + x264 + acc + yasm

热门文章

  1. “度秘”落地手机百度之后,搜索还会如何改变?
  2. 蚂蚁森林-为TA浇水-新版
  3. 新年集福字——自动生成福字
  4. 环网柜、用户变、变电所、开关站等的区别和联系
  5. 设计模式从入门到精通,最全面全方位讲解(精选)
  6. vtkImageView2三视图(横断面,冠状面,矢状面)
  7. 锁定计算机还有网络吗,锁定计算机的快捷键是什么?
  8. 【笔记】思科路由器常用配置命令
  9. 小白 也能听懂Hadoop到底是什么!
  10. 熟悉markdown语音