误差逆传播算法(error BackPropagation,BP)是神经网络中常用的传播算法。BP算法不仅可以应用于多层前馈神经网络,还可以应用于其他类型的神经网络,如训练递归神经网络。通常所说的“BP网络”一般是指用BP算法训练的多层前馈神经网络。


给定训练集 $ D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),..., (x_{m},y_{m})\right \},x_{i}\in \mathbb{R}^{d},y_{i}\in \mathbb{R}^{l} $ ,即输入由 $ d $ 个属性描述,输出 $ l $ 维实值向量。为便于讨论,给出有 $ d $ 个神经元、  $ l $ 个输出神经元、  $ q $ 个隐层神经元的多层前馈网络结构,其中输出层第 $ j $ 个神经元的阈值用 $ \theta _{j} $ 表示,隐层第 $ h $ 个神经元的阈值用 $ \gamma _{h} $ 表示。输入层第 $ i $ 个神经元与隐层第 $ h $ 个神经元之间的连接权重为 $ v_{ih} $ ,隐层第 $ h $ 个神经元与输出层第 $ j $ 个神经元之间的连接权重为 $ w_{ih} $ 。

记隐层第 $ h $ 个神经元接收到的输入为

$$
\begin{align}
\alpha _{h}=\sum_{i=1}^{d}v_{ih}x_{i}\nonumber
\end{align}
$$

输出层第 $ j $ 个神经元接收到的出入为

$$
\begin{align}
\beta _{j}=\sum_{h=1}^{q}w_{hj}b_{h}\nonumber
\end{align}
$$

其中 $ b_{h} $ 为隐层第 $ h $ 个神经元的输出。假设隐层和输出层的激活函数为Sigmoid函数。

对训练集 $ (x_{k}, y_{k}) $ ,假定神经网络的输出为

$$
\begin{align}
\hat y_{k}=\left (\hat y_{1}^{k}, \hat y_{2}^{k}, ..., \hat y_{l}^{k}  \right )\nonumber
\end{align}
$$

$$
\begin{align}
\hat y_{l}^{k}=f\left ( \beta _{j}-\theta _{j} \right ) 
\end{align}
$$

则网络在 $ (x_{k}, y_{k}) $ 上的均方误差为

$$
\begin{align}
E_{k}=\frac{1}{2}\sum_{j=1}^{l}\left ( \hat y_{j}^{k}-  y_{j}^{k} \right )^{2} 
\end{align}
$$


网络中需要更新的参数个数为 $ \left ( d+l+1 \right )q+l $ 个:输入层到隐层的 $ d\times q $ 个权值、隐层到输出层的 $ q\times l $ 个权值、 $ q $ 个隐层神经元的阈值, $ l $ 个输出层神经元的阈值。BP是一个迭代学习算法,在迭代的每一轮中,采用广义的感知机学习规则对参数进行更新估计。对任意参数 $ v $ 的跟新估计为

$$
\begin{align}
v\leftarrow v+\Delta v\nonumber
\end{align}
$$

BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,对式子(2)的 $ E_{k} $ ,给定学习率 $ \eta $ ,有

$$
\begin{align}
\Delta w_{hj}=-\eta \frac{\partial E_{k}}{\partial w_{hj}}
\end{align}
$$

注意到, $ w_{hj} $ 先影响到第 $ j $ 个输出层神经元的输入值 $ \beta _{j} $ ,再影响到其输出值 $ \hat y_{j}^{k} $ ,然后影响到 $ E_{k} $ ,有

$$
\begin{align}
\frac{\partial E_{k}}{\partial w_{hj}}=\frac{\partial E_{k}}{\partial \hat y_{j}^{k}}\cdot \frac{\partial \hat y_{j}^{k}}{\partial \beta _{j}}\cdot \frac{\partial \beta _{j}}{\partial w_{hj}}
\end{align}
$$

根据 $ \beta _{j} $ 定义,显然有:

$$
\begin{align}
b_{h}= \frac{\partial \beta _{j}}{\partial w_{hj}}{\partial w_{hj}}
\end{align}
$$

Sigmoid函数的导数为:

$$
\begin{align}
{f}'\left ( x \right )=f\left ( x \right )\left ( 1-f\left ( x \right ) \right )
\end{align}
$$

于是根据式子(1)和(2)有

$$
\begin{align}
g_{j} \nonumber
&=-\frac{\partial E_{k}}{\partial \hat y_{j}^{k}}\cdot \frac{\partial \hat y_{j}^{k}}{\partial \beta _{j}}\nonumber\\
&=-\left ( \hat y_{j}^{k}- y_{j}^{k}\right ){f}'\left ( \beta _{j}-\theta _{j} \right )\nonumber\\
&=\hat y_{j}^{k}\left ( 1- \hat y_{j}^{k}\right )\left ( y_{j}^{k} -\hat y_{j}^{k}\right )
\end{align}
$$

将式子 (5)、(7)带入式子(4),再带入式子(3)得到BP算法中关于 $ w_{hj} $ 的跟新公式:

$$
\begin{align}
\Delta w_{hj}=\eta g_{j}b_{h}
\end{align}
$$

类似地可以得到:

$$
\begin{align}
\theta _{j}=-\eta g_{j}
\end{align}
$$

$$
\begin{align}
v _{ih}=-\eta e_{h}x_{i}
\end{align}
$$

$$
\begin{align}
\gamma _{h}=-\eta e_{h}
\end{align}
$$

其中式子(10)、(11)中的 $ e_{h} $ 为,

$$
\begin{align}
e_{h}\nonumber
&=-\frac{\partial E_{k}}{\partial b_{h}}\cdot \frac{\partial b_{h}}{\partial \alpha _{h}}\nonumber\\
&=-\sum_{j=1}^{l}\frac{\partial E_{k}}{\partial \beta _{j}}\cdot \frac{\partial \beta _{j}}{\partial b_{h}}{f}'\left ( \alpha _{h}-\gamma _{h} \right )\nonumber\\
&=\sum_{j=1}^{l}w_{hj}g_{j}{f}'\left ( \alpha _{h}-\gamma _{h} \right )\nonumber\\
&=b_{h}\left ( 1- b_{h}\right )\sum_{j=1}^{l}w_{hj}g_{j}
\end{align}
$$


对于每一个训练样本,BP算法执行的步骤为:先将输入样本提供给输入层神经元,然后逐层将信号前传,指导产生输出层的结果;然后计算出输出层的误差,再将误差逆向传播到隐层神经元,最后根据隐层神经元的误差来对连接权重和阈值(偏量)进行调整。该过程为循环进行,直到满足某一过程为止。

转载于:https://www.cnblogs.com/zhangchao162/p/11536289.html

【机器学习】误差逆传播算法(反向传播算法)相关推荐

  1. 【机器学习】详解 BackPropagation 反向传播算法!

    首先介绍一下链式法则 假如我们要求z对x1的偏导数,那么势必得先求z对t1的偏导数,这就是链式法则,一环扣一环 BackPropagation(BP)正是基于链式法则的,接下来用简单的前向传播网络为例 ...

  2. 机器学习之五:神经网络、反向传播算法推导

    一.逻辑回归的局限 在逻辑回归一节中,使用逻辑回归的多分类,实现了识别20*20的图片上的数字. 但所使用的是一个一阶的模型,并没有使用多项式,为什么? 可以设想一下,在原有400个特征的数据样本中, ...

  3. 机器学习(深度学习)中的反向传播算法与梯度下降

    这是自己在CSDN的第一篇博客,目的是为了给自己学习过的知识做一个总结,方便后续温习,避免每次都重复搜索相关文章. 一.反向传播算法 定义:反向传播(Backpropagation,缩写为BP)是&q ...

  4. 入门机器学习(八)--神经网络参数的反向传播算法

    1. 代价函数(Cost Function) 假设我们拥有一个如下图所示的神经网络,一共有四层,分别是一层输入层,两层隐藏层,一层输出层.下面定义几个变量的意义: m:训练样本的个数,共有m个样本 L ...

  5. 吴恩达机器学习 7.神经网络参数的反向传播算法

    1.神经网络算法的代价函数 标记方法 神经网络的训练样本有m个 每个包含一组输入x和一组输出信号y L表示神经网络层数 SIS_ISI​表示每层的神经元个数 SlS_lSl​表示输出层的神经元个数 S ...

  6. Educoder 机器学习 神经网络 第三关:反向传播算法

    任务描述 相关知识 数据集介绍 神经网络是如何训练 前向传播 交叉熵 反向传播 sklearn中的神经网络 编程要求 测试说明 任务描述 本关任务:用sklearn构建神经网络模型,并通过鸢尾花数据集 ...

  7. 100天搞定机器学习|day37 无公式理解反向传播算法之精髓

     100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...

  8. 神经网络和反向传播算法——反向传播算法本质上是随机梯度下降,链式求导法则而来的...

    原文:https://www.zybuluo.com/hanbingtao/note/476663 写得非常好,适合入门! 神经元 神经元和感知器本质上是一样的,只不过我们说感知器的时候,它的激活函数 ...

  9. PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——深度学习的基础算法——反向传播算法简介

    反向传播算法 Back Propagation Algorithms 在一个链接上的权重的变化会使得下一个神经元获得的值就有相应的变化,这个变化量会随着网络的前向传播影响到下一层的每一个神经元,以此类 ...

  10. 反向传播算法公式推导,神经网络的推导

    如何理解神经网络里面的反向传播算法 反向传播算法(Backpropagation)是目前用来训练人工神经网络(ArtificialNeuralNetwork,ANN)的最常用且最有效的算法. 其主要思 ...

最新文章

  1. 小分子溶液当硬盘!布朗大学逆天研究:用代谢分子存储照片,准确率达99%
  2. Activiti工作流之流程变量
  3. Python当中的a += a 与 a = a + a 的区别,可变类型与不可变类型的数据类型,引用传参...
  4. gerrit的使用和配置
  5. QT的QCalendarWidget类的使用
  6. 修改eclipse皮肤
  7. 测试奶粉真假的软件,体绝假货!最详尽的奶粉真假辨别方法都在这里!
  8. python 画蝴蝶_python画蝴蝶曲线图的实例
  9. 如何授权您的Mac播放AppleMusic?
  10. python-appium520-2初步使用
  11. php根据关键字搜索,javascript、php关键字搜索函数的使用方法
  12. 计算机等级考试二级c++2013 南开题库 答案光碟,全国计算机等级考试二级C++上机题库试卷一2013年.pdf...
  13. 与你一起学习Microsoft Visio——基础篇
  14. mysql 数据库管理认证_走进mysql数据库认证证书
  15. 宇视EZview/智U手机客户端输入了正确的账号、密码,为什么却提示“该用户名未注册”
  16. 【场景化解决方案】ERP系统与钉钉实现数据互通
  17. 电子元件知识汇总3-厂商
  18. 代码中出现的奇怪问题原因
  19. 面试问题记录 三 (JavaWeb、JavaEE)
  20. WPF MVVM设计模式下 相同Xaml绑定不同ViewModel问题

热门文章

  1. 真爱一个人,何妨赌一生
  2. 阿里程序员,工作6年,真实薪资曝光
  3. 菜菜的sklearn-01决策树完整版
  4. 国内云服务商如何排名?国内云主机服务器哪家好?
  5. iGoogle创新设计大赛
  6. mysql navicat视图_navicat怎么创建视图
  7. 用matlab仿真自由落体,基于Matlab的小球自由落体仿真实现
  8. 中国正式发放5G牌照,预计中国移动推进最快
  9. 安装office相关组件出现错误1310
  10. 华为防火墙IPSec虚拟环境配置