卷积神经网络的构成
人们通过引入神经网络的误差方向传播算法,得到了卷积神经网络,同神经认知机一样,也是基于人类视皮层中感受野的结构的模型。卷积神经网络由输入层、卷积层、池化层、全连接层和输出层组成。
其中,卷积层、池化层和全连接层的层数不是固定的,通过增加层数可以得到深层次的网络,不过同时要注意因网络层的加深而引起的过拟合、训练时间过长等问题。
卷积层
卷积层的功能是对输入数据进行卷积操作得到特征图。这里,输入数据可以是输入层输入的原始图像或前一层计算得到的特征图;卷积操作可以看成是输入数据对应位置元素与卷积核的内积运算;实际上,完成内积运算后还要经过激活函数才能得到特征图中在该位置对应的特征值,过程如下图所示:
为了方便展示,上图中输入数据大小为6x6,卷积核大小为3x3,激活函数为恒等函数。卷积核滑动步长为1,所以6x6的输入得到4x4的特征图。
内积运算过程为:5x4+3x(-1)+1x(-1)+2x(-1)+5x3+2x(-1)+1x(-1)+2x(-1)+6x3=42,然后经过恒等激活函数得特征值为42。不过实际应用过程中通常每个卷积核都有一个偏置,那么激活函数的输入就变成内积结果与偏置的和。
当卷积层的输入为三通道的彩色图像时,每个卷积核都应该是三维的3xMxM,M为卷积核大小,整个过程变为每个卷积核的各维度卷积核分别与输入数据进行内积运算,然后将各维度内积结果加起来,再加上这个卷积核的偏置,最后通过激活函数得到激活值,注意:无论每个卷积核有几层,每个卷积核只对应一个偏置。
池化层
池化层的作用是减小卷积层产生的特征图的尺寸,分为最大池化、平均池化和Lp池化,其中最常用的为最大池化。最大池化是将2x2区域内的最大值取出作为这一区域的特征值,以最大池化为例,过程如下图所示:
最后的全连接层与输出层的结构和多层感知器一样,只不过输入变成了上一层池化层的输出,误差反向传播过程也与多层感知器一样,本文不做赘述,因此本文池化层直接与输出层相连。
推导前的准备
本文使用的卷积神经网络结构图如下所示:
上图及下文可能出现的符号说明如下:
符号 | 含义 |
网络输入值 | |
第个卷积核的第行列的权重 | |
第个卷积核的偏置 | |
卷积层第个子层的第行的输出 | |
卷积层第个子层的第行的输入 | |
池化层第个的子层第行的输出 | |
池化层第个的子层第行的输入 | |
输出层第个神经单元的输出 | |
输出层第个神经单元的输入 | |
从池化层第个子层的行列指向输出层第个神经单元的权重 | |
第个神经单元的期望输出值 |
这里,输入图像是6x6的单通道图像,卷积核采用3x3大小,步长为1,池化层使用的是最大池化,激活函数为恒等函数,输出层的误差计算函数为最小二乘误差函数,此处。
开始推导
之前神经网络参数的确定使用的是梯度下降法,同样的,本文卷积神经网络参数的确定也使用基本的梯度下降法,那么推导的关键就变成了计算各参数的偏导,这里以计算卷积核的权重的偏导数为例,其余参数计算过程类似。
首先,写出整体的偏导计算公式,如下:
其中,等16个偏导的计算过程类似,这里以为例:
接下来,对公式中各部分进行求解:
其中
接下来,将各部分的具体求导结果代入式(2)中,然后同式(2)计算式(1)中其余的15个偏导数,最后将所有的具体计算结果代入式(1)得到最终结果。计算结果中对卷积层和输出层激活函数的求导可根据实际应用时网络采用激活函数的情况进行计算。