为了更好地理解反向传播,先进一步地研究一下前向传播的过程:


这是一个含2个输入单元的神经网络结构(没有把偏置单元算进去),第二层有2个隐藏单元,再下一层也有2个,最后只有一个输出单元。


在进行前向传播时,我们的样本,比如(x^ (i),y^ (i)),把这个x^ (i)传到输入层中。

z(2)_1和 z(2) _2是输入单元的加权和。


然后将sigmoid逻辑函数,还有sigmoid激活函数应用到z值上,得到激活值a(2)_1和a(2)_2,以此类推,得到网络中最后的输出值a^(4)_1。


注意一下这里的计算过程,比如这个隐藏单元:

Θ是权值(参数)

所以计算z(3)_1的方法就是:

(权重乘以前面单元的值)

这就是前向传播。

事实上,后面我们会发现,反向传播的过程和前向传播非常相似,只是这两个算法计算的方向不一样而已。


为了更好地理解反向传播算法的过程,先看看其代价函数:


这个代价函数一般应用于只有一个输出单元的情况。
如果有不止一个输出单元,只需用k作为输出单元的下标,然后对它们进行求和即可。
(反向传播计算的就是代价函数的偏导数)

同一组样本中同时使用了前向传播和反向传播算法。
对于这组单独的样本(x^ (i),y^ (i)),在只有一个输出单元的情况下,y^ (i)就是一个实数。
忽略正则化,即λ=0。


观察括号中这个求和项:

会发现这项代价函数对应第i个训练样本,即代价函数对应的训练样本(x^ (i),y^ (i))是由这个式子给出的:

所以第i个样本的代价函数可以写成这个形式:

这个代价函数扮演了一个类似方差的角色。

可以把cost(i)近似地当成是神经网络输出值与实际值的方差:

就像逻辑回归中,实际中会偏向于选择比较复杂的、带对数形式的代价函数。
但为了方便理解,可以把这个代价函数看作是某种方差函数。

因此cost(i)表示了神经网络预测样本值的准确程度,也就是网络的输出值和实际观测值y(i)的接近程度。


现在再看看反向传播的过程:


一种直观的理解是,反向传播算法就是在计算这些δ^ (l)_j项,我们可以把它看作是我们在第l层中、第j个单元中得到的激活项的“误差”。

更正式地说,δ项实际上是代价函数cost(i)关于z^(l) _j的偏导数,也就是计算出的z项的加权和,或者说代价函数关于z项的偏导数:

具体来说,这个代价函数

是一个关于标签y和神经网络中h(x)的输出值的函数。

如果分析网络的内部,稍微把z^(l)_ j改一下,就会影响到神经网络的值h_θ^(x ^(i)) ,最终将改变代价函数的值。
(z是中间项)

δ项衡量的是,为了影响这些中间值,我们想要改变神经网络中的权重的程度,进而影响整个神经网络的输出h(x),并影响所有的代价函数。


让我们继续深入下去了解反向传播的过程:

对于输出层而言,如果我们设

当我们对训练样本i做前向传播和反向传播的时候,这是一个误差值,也就是y的实际值与预测值的差,这样我们就可以算出δ(4)_1的值:

然后对这些值进行反向传播,最后可以计算出前一层的这些δ项:

然后继续进行传播,最后计算出

反向传播的计算过程和前向传播非常地相似,只是方向反了过来。


如何计算出δ的值?

例如要计算δ(2)_2,与前向传播相似,先标出一对权重:

然后再来看δ(2) _2是怎么计算的,我们要做的是用δ(3) _1和对应的权重相乘,再加上δ(3) _2乘以对应权重:

实际上就等于后一层中δ项的加权和(由对应边的强度来进行加权)。

再举一个例子:

顺带一提,这些δ值都只关于隐藏单元,并不包括偏置单元,这取决于你对反向传播的定义以及你实现算法的方式。


当然也可以用其他方式来计算包含偏置单元的δ值,偏置单位的输出总是“+1”,并且它们一直都是这样,我们无法改变它:

我经常使用的方法是,最后会计算出它们的值,但我会丢掉它们,不使用这些值。因为它们最后并不会影响偏导数的计算。


至此,我们对反向传播的过程有了一个更加直观的理解。
这是一个非常有效的学习算法。
(虽然这是一种很难进行可视化的、很难理解它到底做了什么的算法,其内部原理以及过程都很难展现出来。)


参考资料:吴恩达机器学习系列课程

【神经网络】{7} ——理解反向传播相关推荐

  1. 干货|神经网络及理解反向传播

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一.人工神经网络简述 下面开始说神经网络.注意,当我们说N层神经网 ...

  2. 吴恩达机器学习笔记 —— 10 神经网络参数的反向传播算法

    http://www.cnblogs.com/xing901022/p/9350271.html 本篇讲述了神经网络的误差反向传播以及训练一个神经网络模型的流程 更多内容参考 机器学习&深度学 ...

  3. 机器学习:一步步教你理解反向传播方法

    机器学习:一步步教你理解反向传播方法 时间 2016-09-13 00:35:59  Yong Yuan's blog 原文  http://yongyuan.name/blog/back-propa ...

  4. 3.10 直观理解反向传播-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.9 神经网络的梯度下降法 回到目录 3.11 随机初始化 直观理解反向传播 (Backpropagation Intuition (Optional)) 这个视频主要是推 ...

  5. 【深度学习】神经网络基础:反向传播算法

    作者:Simona Ivanova AI/ML  专家 就职于 Science 杂志   导读 反向传播(Backpropagation,简称 BP)是目前用来训练人工神经网络(Artificial ...

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

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

  7. 你真的理解反向传播吗?面试必备

    王小新 编译自 Medium 量子位 出品 | 公众号 QbitAI 当前,训练机器学习模型的唯一方式是反向传播算法. 深度学习框架越来越容易上手,训练一个模型也只需简单几行代码.但是,在机器学习面试 ...

  8. 神经网络正向与反向传播

    一.神经网络的前向传播原理 在全连接神经网络中,每一层的每个神经元都会与前一层的所有神经元或者输入数据相连,例如图中的 f1(e)f _1 ( e )f1​(e)就与x1x_1x1​ 和 x2x_2x ...

  9. 基于DL的计算机视觉(5)--理解反向传播

    1. 引言 其实一开始要讲这部分内容,我是拒绝的,原因是我觉得有一种写高数课总结的感觉.而一般直观上理解反向传播算法就是求导的一个链式法则而已.但是偏偏理解这部分和其中的细节对于神经网络的设计和调整优 ...

最新文章

  1. http文件服务器和ftp文件服务器,http和ftp文件服务器
  2. Tableau 2020.3 发布!新增 写入外部数据库 与 预测建模 等功能,进一步增强扩展分析
  3. 【OpenCV3】cv::convertScaleAbs()使用详解
  4. 网易云信集成视频教程(三):如何通过SDK实现自定义消息?
  5. Go 定时器内部实现原理剖析
  6. 数据结构与算法分析c++第四版_数据结构与算法 - 时空复杂度分析
  7. 本地调试微信程序ngrok
  8. IB客座主编(三):西门子(中国)有限公司工业业务领域楼宇科技集团杜明轩(Christophe de Maistre)先生...
  9. php 获取远程大文件上传,PHP 获取远程文件大小的3种解决方法
  10. Android Studio(10)---使用 Layout Editor 构建 UI
  11. Apache的多处理模块MPM
  12. SSM框架-实现Mybatis分页功能-foreknow_cms
  13. 一些编程习惯和问题记录--不定期更新
  14. 修改初始Manager QuerySets,重写Manager.get_query_set()函数之后,发现并没有按照我们指定的方法执行。...
  15. layui开发使用文档(镜像网址)
  16. 每天学一点 mysql
  17. 数据可视化 d3操作汇总(一):d3以及直方图绘制简介
  18. mysql报错(Not unique table/alias)
  19. 我以前的痛苦,你也拥有吗?
  20. Java在线打开编辑PPT文档

热门文章

  1. Ai数据大汇总—在这里没有找不到的数据
  2. 西文图书管理系统(C++、线程、网络socket、MYSQL)
  3. 3. Python 面向对象编程
  4. 方正阿帕比的笔经-C#基础概念
  5. MCU接口液晶触摸屏模组设计
  6. 做为一名程序员需要的了解清楚的六项
  7. 将excel表格导入数据库
  8. Linux编译遇到各种错误解决方法,例如 /lib/modules/3.10.0-(xxx).el7.x86_64/build: No such file or directory. Stop.
  9. “反科学言论”下,电子烟的真相是什么?
  10. 基于AM335x裸机开发例程使用手册