赞
踩
对于一个算法或者模型的理解可以分为直观理解,算法理解和数学证明三个层次。直观的理解能够启发思维,算法层面的理解能够消除歧义,数学证明能够提供更一般化的问题描述,为潜在的问题提供分析工具。本文试图从这三个层面对神经网络中的反向传播算法做简单的总结,文中大量的图片和公式来源于《神经网络与深度学习》一书第二章1,后续不在 一一引用。
反向传播算法是神经网络的一种权重更新算法,最早提出于20世纪70年代,直到论文 2 的出现才逐渐受到重视,后续成为神经网络学习的主流算法之一。在给出具体的数学描述之前,这里首先给出神经网络模型中所使用的数学符号的含义。
我们使用
与此相似,我们使用
使用
为了方便进行矩阵化的描述,我们使用
一个
代价函数度量模型输出与真实值的拟合程度。反向传播算法解决的基本问题就是通过不断更新权重来最小化代价函数。一个典型的二次的代价函数可以表示为:
假设一:代价函数可以表示为单个样本代价函数的平均,即代价函数可以写作:
做出这个假设是因为我们后面讨论的梯度算法计算的是
假设二:代价函数依赖于神经网络最后一层的输出值,也就是说
反向传播算法解决的基本问题就是通过不断更新权重来最小化代价函数,一个自然的想法是通过梯度下降的方法来实现。牵涉到计算
首先我们定义第
反向传播算法利用四个等式来最终确定最终的偏导数,在具体介绍算法之前,我们首先引入符号
等式一:输出层的误差公式
首先,
等式三:给定
等式四:给定
同样,根据
BP1计算最后一层的输入误差,然后可以利用BP2迭代的计算每一层的输入误差
从公式的角度,我们对学习过程可以获得以下理解:
反向传播算法的思路来源是什么?设想反向传播算法出现以前,利用梯度下降法寻找最优参数是一个非常自然的思路,那么面临的问题同样是计算
假设,我们想计算
而且有:
这里再提一下新理论的发展过程,一个理论的创新是非常复杂的,不断演化的过程。比如我们这里看到的反向传播的理论非常的简单明了,但这背后可能包含了很多非常复杂的演进过程。一个新的理论的发展过程往往是这样的:最开始只是一个非常粗略的想法加上非常复杂但甚至包含错误的证明,然后等引起关注之后,会有更多的人参与进来,随之更简洁更有效的证明方法,才会被提出和改进,经过这样反复的迭代最后才形成我们看到的结果。举个简单例子,对于式(5)中误差的定义,如果我们最开始将其定义为:
本文介绍了反向传播的原理与算法,同时给出了一个可以说是直观理解也可以说是算法的思想来源的说明。反向传播在深度学习,神经网络学习中具有非常普遍的应用。当然,目前同深度学习遭受到的质疑一样,反向传播也遭受了一些质疑3。但不管怎么说,掌握反向传播算法的原理才能更好的改进它。博客4 包含了从第一行代码开始写神经网络的教程,感兴趣的同学可以以其为案例尝试编程实现一下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。