《神经网络和深度学习》系列文章十八:反向传播:整体描述

出处:Michael Nielsen的“神经网络与深度学习”,本节译者:哈工大SCIR硕士生徐梓翔。


目录

如图1所示,使用神经网络识别手写数字

2,反向传播算法是如何工作的

  • 热身:一个基于矩阵的快速计算神经网络输出的方法
  • 关于损失函数的两个假设
  • 阿达玛积
  • 反向传播背后的四个基本等式
  • 四个基本等式的证明(选读)
  • 反向传播算法
  • 什么时候反向传播算法高效
  • 反向传播:整体描述

3,改进神经网络的学习方法

4,神经网络能够计算任意函数的视觉证明

5,为什么深度神经网络的训练是困难的

6,深度学习

正如我之前所阐述的,反向传播涉及了两个谜题。第一个谜题是,这个算法究竟在做什么?我们之前的描述是将错误量从输出层反向传播。但是,我们是否能够更加深入,对这些矩阵,向量的乘法背后作出更加符合直觉的解释?第二个谜题是,人们一开始是如何发现反向传播算法的?按照算法流程一步步走下来,或者证明算法的正确性,这是一回事。但这并不代表你能够理解问题的本质从而能够从头发现这个算法。是否有一条合理的思维路线使你能够发现反向传播算法?在本节中,我会对这两个谜题作出解释。


为了更好地构建的反向传播算法在做什么的直觉,让我们假设我们对网络中的某个权重做出了一个小的改变量


改变这个会量与其导致相关的神经元型态的输出激活值的改变:


以此类推,会引起下一层的所有激活值的改变


这些改变会继续引起再下一层的改变,下下层......依次类推,直到最后一层,然后引起代价函数的改变:


的代价函数改变量与最初权重的改变量的英文有关的,关系是下面这个等式


(47)


这表明了计算的一种可能方法是,计算上的一个小改变量经过正向传播,对引起了多大的改变量。如果我们能够通过小心翼翼的计算做到这点,那我们就可以计算出


让我们尝试来写一下计算过程。改变量层的第个神经元型态型态的激活值带来了的改变量。它的大小是


(48)


激活值改变量会引起下一层(第层)的所有激活值都改变我们先关注其中的一个结点


它产生的改变量是:


(49)


将等式(48)带入其中,得到:

(50)


当然,改变量会继续造成下一层的激活值的改变。实际上,我们可以想象一条从的路径,其中每一个结点的激活值的改变都会引起下一层的激活值的改变,最终引起输出层的代价的改变。如果这条路径是,那么最终的改变量是


(51)


这样,我们使用了一系列的形式的项,对应了路径上的每一个结点,包括最终项。这就计算出了在神经网络的这条路径上,最初的改变量引起了多大的改变。当然,由的改变量影响代价改变的路径选择的英文很多最最的,我们现在只考虑了其中的一条路径。为了计算名单名单最终总共的改变量,很显然我们应该对所有可能的路径对其带来改变的量进行求和:


(52)


其中,我们对每条路径中所有出现的神经元都进行求和与等式(47)进行比较,我们得到:


(53)


等式(53)看上去很复杂。不过,它在直觉上很容易理解。我们计算出了相对于网络中的一个权重的变化速率。这个等式告诉我们的是,每一条连接两个神经元的边都可以对应一个变化速率,这个变化速率的大小是后一个神经元对前一个神经元的偏导。连接第一个权重和第一个神经元的边对应的变化速率是。一条路径对应。的变化速率恰好是路径上的变化速率的连乘总变化速率。是从起始权重到最终代价上的所有可能的路径的变化速率的总和用图片来说明这个过程,对于一条路径来说:


目前为止我所阐述的是一种启发式的观点,当你困惑于神经网络中的权重时,通过可以观点这种思考来我下面会给你一些简要的思路使你可以更进一步的这个完善观点。首先,你可以显式地计算出等式53中的每一项的偏导表达式。这很容易做到,只需要一一点一计算量就行做完之后,你可以尝试将所有的求和通过矩阵的形式来表示。这个过程会有一点无聊,并且需要一些毅力,但是不会特别的困难。随后,你可以尝试尽可能的将表达式简化,你名单最终会发现你得到了反向传播算法!所以,你可以将反向传播算法看作是一种对所有路径上的所有变化率进行求和的方法。或者用另外一种方式来说,反向传播算法是一种很聪明的方法,当小扰动沿着网络传播,到达输出并影响代价的过程中,它能够记录其对相应权重(和偏置)的影响量。


我的解释到此为止了。这可能有点复杂,并且需要仔细思考所有的细节。如果你乐于接受挑战,你可能会很享受这个过程。如果不是,我希望我的这些想法能够给你一些关于反向传播在做什么的启发。


那关于其它的谜题呢? - 反向传播最初是如何被发现的实际上,如果你一路看下来我的阐述,你能够找到关于反向传播算法的一种证明不幸的是,完整的证明实际上比我在本章的描述更长更复杂。那这个相对更简单(但更玄虚)的证明是如何发现的呢?当你把试图把完整的证明中的所有细节写出来时,你会发现有一些很显然能够被简化的形式。你做完这些简化,会得到一个简短一些的证明。然后你又会发现一些可以简化的内容。当你重复几次这个过程之后,你会得到本章中的这个简短的证明,但是它有点晦涩,因为其中所有复杂的结构都被简化掉了!我希望你能够相信我,完整的证明与本章中简短的证明没有什么本质区别。我只是对证明过程做了很多简化的工作。


本文来源于哈工大SCIR

原文链接点击即可跳转

哈尔滨工业大学社会计算与信息检索研究中心

工程理论反向传播微积分神经网络优化算法