深度学习的数学-卷积神经网络的误差反向传播

排版可能更好一点的永久原文链接:深度学习的数学-卷积神经网络的误差反向传播

前言

本篇博客主要记录反向传播法在卷积神经网络中的应用,如何像全连接的隐藏层那样,通过输出层的神经单元误差反向推算出所有层的神经单元误差,最终得到梯度。

正文

博主在看完卷积神经网络的正向运作流程后,其实是有一点懵圈的,于是我冷静了一天再继续看卷积神经网络的反向传递;正向运作流程中的 『池化』、『特征映射』应该怎么样用式子表示?经过了池化(最大/平均/L2)的神经单元输入,又怎样体现在神经单元误差的计算上?可以带着这些问题继续往下看。

卷积神经网络中的关系式

在进行推算之前,首先确定好每个层神经单元之间的关系式
深度学习的数学-卷积神经网络的误差反向传播

卷积层

卷积层中每个神经单元的输入可以理解为过滤器的加权输出,卷积层神经单元的输出套上**函数就可以了。
所以关系式是下面这个样子的:
深度学习的数学-卷积神经网络的误差反向传播

池化层

池化层的输入等于输出,如果是最大池化,则使用Max求一定范围内的极值就可以了(当前例子是将 4 * 4 的卷积最大池化为 2 * 2 的池化层)
深度学习的数学-卷积神经网络的误差反向传播

输出层

而输出层和池化层的神经单元是全连接的,所以就是熟悉的 权重 * 池化输出求和 公式
深度学习的数学-卷积神经网络的误差反向传播

平方误差(损失函数)

平方误差依旧由 正解 - 输出神经单元的输出,做平方和
深度学习的数学-卷积神经网络的误差反向传播

梯度下降法

梯度下降如果有些忘了的话,链接在此:深度学习的数学-梯度下降
梯度就可以看作是代价函数的导数整体下降速度最快的分量,每个变量只需要顺着梯度做减法,即可以最快速度达到整体极值点的位置
深度学习的数学-卷积神经网络的误差反向传播

各个神经单元的的权重、偏置都是变量,为方便理解书中也把每个变量代表的含义标了一下,如下图所示:
深度学习的数学-卷积神经网络的误差反向传播

卷积层和输出层的神经单元误差(重点)

在全连接隐藏层反向递推的过程中,有一个神经单元误差的概念,忘了的可以看一下之前记录的博客:深度学习的数学-神经单元误差和反向传播

简单来说就是损失函数对神经单元的综合输入求偏导数,这个偏导数衡量这个神经单元与理想状态(理想是达到0)的差距

而卷积神经网络中,有卷积层和输出层两种类型的神经元,分别定义如下

PS:池化层输入等于输出是没有额外变量的,过滤器的偏置和权重都体现在了卷积层的综合输入 z 上

深度学习的数学-卷积神经网络的误差反向传播

这两个神经单元误差影响整体平方误差画一个图就像下面这样:
深度学习的数学-卷积神经网络的误差反向传播

输出层的神经单元误差计算

在看神经单元误差对权重偏置的影响之前,先看一下怎么计算输出层的神经单元误差,其定义如下:
深度学习的数学-卷积神经网络的误差反向传播

由平方误差的定义式可以知道 C 对 anoa_n^o 的偏导数

PS:乘 1/2 就是为了不让偏导数前面带常数 2

深度学习的数学-卷积神经网络的误差反向传播
深度学习的数学-卷积神经网络的误差反向传播
带入式子即可得到输出层的神经单元误差公式
深度学习的数学-卷积神经网络的误差反向传播

输出层的神经单元与其权重偏置的关系

与之前一样,还是从输出层开始,建议看的时候结合这个式子看,很容易就看出来了
深度学习的数学-卷积神经网络的误差反向传播
同样根据单变量复合函数求偏导数的链式法则,把 z1oz_1^o 看作 wijOkw_{i-j}^{Ok} 的函数,再根据输出层神经单元误差的定义,得到如下式子

深度学习的数学-卷积神经网络的误差反向传播

相同的思路,对输出层神经单元的偏置求偏导数,能得到如下结果

深度学习的数学-卷积神经网络的误差反向传播

卷积层的神经单元误差与其权重偏置的关系

还是先看下上方贴出来的式子如下
深度学习的数学-卷积神经网络的误差反向传播

如果但看上面看不太明白,还可以按照书中的思路,先把式子都列出来找找规律
深度学习的数学-卷积神经网络的误差反向传播

里边的每一个 w 的偏导数一目了然
深度学习的数学-卷积神经网络的误差反向传播

再找规律整理一下就能得到式子

深度学习的数学-卷积神经网络的误差反向传播

再看一下上面的定义式,根据单变量复合函数的偏导数公式,很容易也能得出下面的结论
深度学习的数学-卷积神经网络的误差反向传播
深度学习的数学-卷积神经网络的误差反向传播

反向递推关系式(重点)

为了减少偏导数的计算,再一次来到了紧张刺激的反向递归关系烧脑环节,书中依旧是以 6 * 6 手写识别的神经网络为例,便于理解推导过程

三个输出神经单元的情况下,有三条路径可以影响到平方误差,把平方误差对 zijFkz_{ij}^{Fk} 的偏导数转向对输出层的三个 ziOz_i^O 求偏导数,即可得到如下式子
深度学习的数学-卷积神经网络的误差反向传播

提取同类项可得:
深度学习的数学-卷积神经网络的误差反向传播

然后把括号中的非神经单元误差的导数,根据关系式求出来(回想z = 权重 * 输出的那个式子,所以 z 对 a 求导结果自然是权重)
深度学习的数学-卷积神经网络的误差反向传播
深度学习的数学-卷积神经网络的误差反向传播

然后计算 aijPka_{ij}^{Pk}zijPkz_{ij}^{Pk} 的导数
最大池化层,输入等于输出,等于卷积层对应神经单元的最大值;两者相等(**函数 a = x),所以导数为1
深度学习的数学-卷积神经网络的误差反向传播
深度学习的数学-卷积神经网络的误差反向传播

接着计算 zijPkz_{ij}^{Pk}aijFka_{ij}^{Fk} 的导数,最大时这两个数相等(**函数 a = x),否则为0(可以理解为**函数 a = 0 * x)
深度学习的数学-卷积神经网络的误差反向传播

最后那个 zijFkz_{ij}^{Fk}aijFka_{ij}^{Fk} 的导数就是**函数的导数,带入即可得到如下式子:
深度学习的数学-卷积神经网络的误差反向传播
推广一下,就可以通过下一层的神经单元误差反推上一层的神经单元误差
深度学习的数学-卷积神经网络的误差反向传播

最后只需要根据神经单元误差与权重和偏置的关系,即可算出梯度,再使用梯度下降法,逼近全局最低点即可

总结

首先根据卷积神经网络的概念引入了卷积神经网络中各层的数学关系式,并通过关系式求出了输出的神经单元误差及其各层的神经单元误差与权重和偏置的关系,最后用全连接神经网络类似的推导方法,推导出了反向递推关系式。