卷积神经网络(Convolutional Neural Networks,CNN)是一种前馈神经网络。卷积神经网络是受生物学上感受野(Receptive Field)的机制而提出的。感受野主要是指听觉系统、本体感觉系统和视觉系统中神经元的一些性质。比如在视觉神经系统中,一个神经元的感受野是指视网膜上的特定区域,只有这个区域内的刺激才能够激活该神经元。
卷积神经网络有三个结构上的特性:局部连接,权重共享以及空间或时间上的次采样。详细介绍请见卷积神经网络
本文主要介绍卷积层(Convolution Layer)的前向传播和后向传播。
1.二维卷积运算
二维图像卷积2.前向传播
假设数据矩阵D如下3*3大小,是单通道的,我们首先需要补0将它扩充到(3+2*(floor(3/2)))* (3+2*(floor(3/2))) = 5*5大小的矩阵操作如下:
补0操作接下需要将D_pad_zero与卷积核kernel做卷积运算,kernel size =3,pad = 1,stride =1,则可得出输出(3+2*1-3)/1+1 = 3;下图只是给出了一个卷积核,一个卷积核生成一个特征图(feature map),而在实际应用中,为了增强卷积层的表示能力,会使用很多个卷积核从而得到多个特征图。
卷积从上图不同颜色框框给出,从数据矩阵中依次提取出和卷积核一样大小的块数据,这里其实就是开篇所说的局部连接。为了提高该操作运算效率,需要进行im2col操作,即把这些不同颜色框框内的数据向量化,总共有3*3个向量,最后得到9*9这样的数据矩阵,具体操作如下
im2col接下来就是矩阵相乘操作,具体操作如下:
矩阵相乘上述矩阵相乘结果如下,最好还需要col2im,把向量转换成矩阵形式。
col2im上述整个过程只是使用一个卷积核,实际应用中,卷积核有很多,只要把这些卷积核按行排列,再做kernel*D_im2col操作,会一次得出所有的feature map。
3.反向传播
假设第l层输入数据大小为5*5,通道为3,卷积核有64个,每个大小为3*3*3,卷积操作为pad=1,stride=1,经过im2col输入数据为27*25(记作X),其中每个列向量为3*3*3的输入小块。权值矩阵W大小为64*27,偏置向量b为1*64,则可得该卷积层输出:
Q = f(z) = f(w*x+b)
其中f(*)为激活函数,以下以sigmoid函数为例,其导数为sigmoid*(1-sigmoid);
由以上公式可得,该卷积层输出Q大小为64*25。
假设由该卷积层上一层反向传播到该层输出矩阵delta,则该矩阵大小和Q大小一致,为64*25,根据链式求导法则;
损失函数对该层权值W求偏导 损失函数对该层偏置b求偏导 损失函数对该层的前一层求偏导 损失函数对该层求偏导,大小为64*25 Q对Z求偏导,大小为64*25 Z对b求偏导,大小为64维向量 Z对W求偏导,大小为25*27 Z对X求偏导,大小为27*64
网友评论