从反向传播的4个基本方程这部分内容开始,《Neural Networks and Deep Learning》一书基本上是满屏的数学公式了,然而,得益于作者强大的、深入浅出的表述能力,理解起来并不会让人感觉那么难。
本文将描述反向传播的4个基本方程中的第一个——输出层误差的方程:
就算完全看不懂这个公式的含义,也千万不要被吓到,毕竟它才如此之短。
本文将解释一下这个公式的含义。但我必须得说,如果没有上下文的话,再怎么看解释也是没用的,毕竟这些符号是什么意思都是作者定义的,所以,必须结合原书来理解。
其中:
(1) 代表神经网络的第 L 层、第 j 个神经元产生的误差。
(2)C 代表代价函数(cost function),a 代表神经网络的输出激活(activation)值,由于每一个神经元都有一个输出激活值,所以 a 是一个向量。把 a 看成一个变量, 就表示用代价函数对输出激活值求导。
(3) 是作者书中所说的“向量化函数”,其实就是激活函数,因为作者在书的前面章节中已经定义过 ,所以输出激活值就是把带权输入再应用一个 ,这就是激活函数。
(4)z 代表的是带权输入,即 ,把 z 看作变量,所以 表示的就是激活函数对带权输入求导。数学公式已经忘得差不多的话,一定要注意这里不是表示两个式子相乘,而是一个表示求导的式子。
文章来源:http://www.codelast.com/
现在先看(1):为了理解这句话,要从此书前面部分的『关于代价函数的两个假设』一节说起。“两个假设”中的其中一个就是,神经网络的代价(cost)可以写成神经网络输出的激活值的函数:
这里的 是一个向量,因为神经网络的某一层,会有N个神经元,每一个神经元都有一个输出激活值,例如 , ,等等。
知道了这一点,再来看看这句话里所说的误差是什么?在机器学习中,我们的目的是最小化代价函数(cost function),而根据高等数学的导数知识:
一个函数在某一点的导数描述了这个函数在这一点附近的变化率。
因此,如果用代价函数对输出激活值 求导,就可以刻划出输出激活值的改变,会对cost造成多大的影响:
顺水推舟,作者就定义了一个“误差”的概念,用来表示神经元的输出变化,会对cost造成多大的影响——影响大,误差就大;影响小,误差就小。
但是这里有一个概念上的替换需要注意:作者实际上并没有把误差定义成代价函数对输出激活值 的导数 ,而是代价函数对带权输入 的导数
我第一眼看到这个定义的时候,觉得把误差定义成代价函数对输出激活值的导数更自然——作者已经在书里解释了为什么要这样做:结果是差不多的,但是数学推导会变得更复杂,所以就把误差定义成了一个看起来“不那么自然”的东西。
文章来源:http://www.codelast.com/
总结一下:
已知 , ,并且我们希望用 C 对 z 的导数 来表示神经元的输出对 cost 造成的影响,所以根据复合函数的求导法则,就可以得到反向传播的第一个基本方程了。
但有一点奇怪的是,为什么要定义这个“误差”呢?定义它是为了能找到计算 以及 的方法——计算这两个值就是反向传播的目的。
文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤
转载需注明出处:codelast.com
感谢关注我的微信公众号(微信扫一扫):