反向传播:整体描述
出处: Michael Nielsen的《Neural Network and Deep Learning》,点击末尾“阅读原文”即可查看英文原文。
本节译者:哈工大SCIR硕士生 徐梓翔
声明:如需转载请联系wechat_editors@ir.hit.edu.cn,未经授权不得转载。
使用神经网络识别手写数字
反向传播算法是如何工作的
热身:一个基于矩阵的快速计算神经网络输出的方法
关于损失函数的两个假设
Hadamard积
反向传播背后的四个基本等式
四个基本等式的证明(选读)
反向传播算法
反向传播算法代码
为什么说反向传播算法很高效
反向传播:整体描述
改进神经网络的学习方法
神经网络能够计算任意函数的视觉证明
为什么深度神经网络的训练是困难的
深度学习
正如我之前所阐述的,反向传播涉及了两个谜题。第一个谜题是,这个算法究竟在做什么?我们之前的描述是将错误量从输出层反向传播。但是,我们是否能够更加深入,对这些矩阵、向量的乘法背后作出更加符合直觉的解释?第二个谜题是,人们一开始是如何发现反向传播算法的?按照算法流程一步步走下来,或者证明算法的正确性,这是一回事。但这并不代表你能够理解问题的本质从而能够从头发现这个算法。是否有一条合理的思维路线使你能够发现反向传播算法?在本节中,我会对这两个谜题作出解释。
为了更好地构建的反向传播算法在做什么的直觉,让我们假设我们对网络中的某个权重
这个改变量会导致与其相关的神经元的输出激活值的改变:
以此类推,会引起下一层的所有激活值的改变:
这些改变会继续引起再下一层的改变、下下层…依次类推,直到最后一层,然后引起代价函数的改变:
代价函数的改变量
这表明了计算
让我们尝试来写一下计算过程。改变量
激活值改变量
它产生的改变量是:
将等式(48)带入其中,得到:
当然,改变量
这样,我们使用了一系列
其中,我们对每条路径中所有出现的神经元都进行求和。与等式(47)进行比较,我们得到:
等式(53)看上去很复杂。不过,它在直觉上很容易理解。我们计算出了
目前为止我所阐述的是一种启发式的观点,当你困惑于神经网络中的权重时,可以通过这种观点来思考。下面我会给你一些简要的思路使你可以更进一步的完善这个观点。首先,你可以显式地计算出等式53中的每一项的偏导表达式。这很容易做到,只需要一点计算量就行。做完之后,你可以尝试将所有的求和通过矩阵的形式来表示。这个过程会有一点无聊,并且需要一些毅力,但是不会特别的困难。随后,你可以尝试尽可能的将表达式简化,最终你会发现你得到了反向传播算法!所以,你可以将反向传播算法看作是一种对所有路径上的所有变化率进行求和的方法。或者用另外一种方式来说,反向传播算法是一种很聪明的方法,当小扰动沿着网络传播、到达输出并影响代价的过程中,它能够记录其对相应权重(和偏置)的影响量。
我的解释到此为止了。这可能有点复杂,并且需要仔细思考所有的细节。如果你乐于接受挑战,你可能会很享受这个过程。如果不是,我希望我的这些想法能够给你一些关于反向传播在做什么的启发。
那关于其它的谜题呢——反向传播最初是如何被发现的?实际上,如果你一路看下来我的阐述,你能够找到关于反向传播算法的一种证明。不幸的是,完整的证明实际上比我在本章的描述更长更复杂。那这个相对更简单(但更玄虚)的证明是如何发现的呢?当你把试图把完整的证明中的所有细节写出来时,你会发现有一些很显然能够被简化的形式。你做完这些简化,会得到一个简短一些的证明。然后你又会发现一些可以简化的内容。当你重复几次这个过程之后,你会得到本章中的这个简短的证明,但是它有点晦涩,因为其中所有复杂的结构都被简化掉了!我希望你能够相信我,完整的证明与本章中简短的证明没有什么本质区别。我只是对证明过程做了很多简化的工作。
“哈工大SCIR”公众号
编辑部:郭江,李家琦,徐俊,李忠阳,俞霖霖
本期编辑:徐俊
长按下图并点击 “识别图中二维码”,即可关注哈尔滨工业大学社会计算与信息检索研究中心微信公共号:”哈工大SCIR” 。点击左下角“阅读原文”,即可查看原文。