kinghighbury 2019-06-30
卷积神经网络已经断断续续的学了大半年了,却发现自己还是一头雾水,连基本的概念都没搞清楚。这两天在网上查了一些资料,看了一些教程。将卷积神经网络的基本概念和原理理了一下,并整理出来,以供大家参考。注:本文中有些结论是本人对卷积神经网络的理解和总结,如有不正,还请各位大虾指正!
卷积神经网络是(Convolutional Neural Networks,CNN)是一类包含卷积计算且有深度结构的前馈型神经网络,是深度学习的代表算法之一。卷积神经网络是模仿生物神经网络的行为特征,他从信息处理的角度对人脑神经元网络进行抽象,建立某种简单数学模型,按不同的连接方式组成不同的网络。
卷积神经网络的构成:
数据输入/input-> 卷积层(卷积/CONV->激励/RELU->池化/POOL ... n)->全连接/fullconnection->softmax/分类/归一化->输出
数据输入时,需要对原始数据图像进行预处理,包括以下3各步骤:
1.去均值;即将样本的均值转化为0.
2.归一化;即将样本在各个维度上进行归一化处理
3.PCA/白化; PCA(principal components analysis),是一种降维和去除相关性的方法,它通过方差来评价特征的价值,认为方差大的特征包含信息多,应予以保留。白化是将PCA去相关性之后将每一特征的方差归一化到1
在学习卷积层之前,先来了解一下卷积层相关的一些概念。
感受野(Receptive Field):
卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小。通俗点讲就是特征图上一个点对应输入图上的区域。
卷积核:
卷积核就是图像处理时,给定输入图像,在输出图像中每一个像素时输入图像中一个小区域中像素的加权平均,其中权值由一个函数定义,这个函数称为卷积核,也就是下面说到的filter、滤波器
卷积深度:
卷积层卷积的次数
卷积核大小:
卷积核/滤波器做卷积时每次采样的感受野的大小。卷积核大小可以指定为小于输入图像尺寸的任意值,卷积核越大,可提取的输入特征越复杂。
步长/stride:
定义了卷积核相邻两次扫过特征图时位置的距离,卷积步长为1时,卷积核会逐个扫过特征图的元素,步长为n时会在下一次扫描跳过n-1个像素。
填充/padding:
对图像做卷积时,nn的图像每次卷积之后会生成(n-f+1)(n-f+1)特征,随着卷积层数的增多,最终的卷积结果会一直缩小下去,最后变成0。这是因为在做卷积的时候边缘像素使用的次数相对其它像素较少,导致卷积后边缘特征的不断弱化。为了解决这个问题,我们可以在图片边缘进行加0填充。称为zero-padding。这样padding操作就可以保证卷积前后宽高不变化。填充可以分为以下四种:
1.有效填充(valid padding):即完全不使用填充,卷积核只允许访问特征图中包含完整感受野的位置。输出的所有像素都是输入中相同数量像素的函数。使用有效填充的卷积被称为“窄卷积(narrow convolution)”,窄卷积输出的特征图尺寸为(L-f+1)/s。
2.相同填充/半填充(same/half padding):只进行足够的填充来保持输出和输入的特征图尺寸相同。相同填充下特征图的尺寸不会缩减但输入像素中靠近边界的部分相比于中间部分对于特征图的影响更小,即存在边界像素的欠表达。使用相同填充的卷积被称为“等长卷积(equal-width convolution)”。
3.全填充(full padding):进行足够多的填充使得每个像素在每个方向上被访问的次数相同。步长为1时,全填充输出的特征图尺寸为L+f-1,大于输入值。使用全填充的卷积被称为“宽卷积(wide convolution)”
4.任意填充(arbitrary padding):介于有效填充和全填充之间,人为设定的填充,较少使用。
卷积层参数包括卷积核大小、步长和填充,三者共同决定了卷积层输出特征图的尺寸,是卷积神经网络重要的超参数(注:超参数是在开始学习过程之前设置值的参数)。
1. 卷积的数学概念:
卷积/convolution是通过两个函数f和g生成第三个函数的一种数学方法,表征函数f与g经过翻转和和平移后重叠部分的面积,因此,卷积也就是具备了翻转和平移不变性。
2.卷积的作用
通过指定大小的卷积核/滤波器(感受野大小通常为奇数1,3,5,7,...), 按一定步长对逐个扫描图像做卷积,用来提取图像特征。
3.卷积操作
做卷积时,使用卷积核ffNC的矩阵,NC为输入图像的channel数,按固定步长s扫描输入图像进行卷积操作。如下图所示,卷积核/滤波器将矩阵中的数据与扫描区域对应的数据相乘,并累加得到的结果作为卷积输出结果(栗子中输入图像和滤波器channel为1)。扫描完整个输入图像之后可以得到该图像的卷积矩阵RW*RH。
RW=[(NW+2p-f)/s + 1];
RH=[(NH+2p-f)/s + 1];
对一幅图像进行特征提取的结果:
从上图可知,同样的图片,使用不同的卷积核,不同的卷积核/滤波器,会导致提取的特征点不一样。
1.池化的原理和作用
在图像中,相邻位置的图像像素具有很大的相关性。图像在卷积之后图像/特征的尺寸变化不大,由于图像的相关性,导致卷积之后提取的图像特征会有很大的相关性而导致产生很多冗余的特征。而池化则能够对特征图像进行压缩,一方面可以简化网络复杂度,另一方面可以保留图像的主要特征。
2.池化主要有两种类型:
最大池化
池化时取区域像素的最大值作为该区域的池化结果,是目前比较通用的池化方法。
平均池化
池化时取区域像素的平均值作为该区域的池化结果,目前使用不多。
3.池化的过程
池化时,使用滤波器对输入图像进行扫描,在扫描区域内取最大值(如果是平均池化则取区域内的平均值)作为池化的结果,这样不仅能压缩特征图像的大小,还能保留图像的主要特征。滤波器使用给定的跨度对输入图像/特征进行扫描,并输出结果区域内的最大值作/平均值作为池化结果。如下图所示:
假设输入图像的宽是NW,高是NH,滤波器尺寸是ff,步长是s,池化输出结果是RWRH。填充为P。那么
RW=[(NW-2p-f)/s+1];
RH=[(NH-2p-f)/s+1];
如上图所示,池化后图像的特征数减少,可以有效的降低网络的复杂度,同时保留图像的主特征。有些类似于图像的缩放,但有所不同的是,图像缩放时所有的图像特征都有有损失,但是最大池化会优先保留图像的主特征(最大值),从而到达更好的特征提取效果。
激励函数在神经网络的作用通俗上讲就是将多个线性输入转换为非线性的关系。不使用激励函数的话,神经网络每层都只做线性变换,多层输入叠加后还是线性变化。因为线性模型的表达力不够,激励函数可以引入非线性因素。
常见的激励函数:
1.sigmoid
如上图所示,sigmoid函数将一个实数压缩至0-1之间。当x非常大时,该函数无限接近1,当x为非常大的负数时,该函数无限接近0。sigmoid函数很好地解释了神经元受到刺激后是否会激活和向后传递的场景(0,没有被激活,1,被完全激活),故在早期的神经网络中用得比较多。但是sigmoid函数容易出现梯度弥散(靠近输出层的梯度大,参数更新快,靠近输入层的梯度小,参数更新慢)或者梯度饱和(靠近输出层的梯度小,参数更新慢,几乎不再变化)。
2.tanh
如上图所示,tanh(tanh(x)=sinh(x)/cosh(x))函数将输入值压缩至-1到1之间。tanh函数在特征相差明显时会有很好的效果,在循环过程中会不断扩大特征效果。该函数与sigmoid类似,也存在着梯度弥散或梯度饱和的缺点,它们的区别是,tanh函数是0均值的,因此在实际应用中会比sigmoid更好。
3.ReLU
ReLU(Rectified Linear Unit),线性整流函数,又叫修正线性单元。该函数被认为有一定的生物学原理,并且由于在实践中通常有着比其他常用激活函数更好的效果,而被如今的深度神经网络广泛使用于诸如图像识别等计算机视觉人工智能领域。对于进入神经元的输入x,使用线性整流激活函数的神经元会输出max(0, wTx+b)。ReLU的缺点是比较脆弱,当一个非常大的梯度经过ReLU神经元时,更新参数后,这个神经元再也不会被激活,导致所有流过这个神经元的梯度都将变成0,造成ReLu神经元的死亡。故在训练中学习率不宜设置得太高。
4. LReLU
LReLU(Leaky ReLU),带泄漏线性整流函数,是为了尝试解决ReLU死亡问题而产生的一个变种。如上图所示,其中ai是一个很小的常数,i表示不同通道对于不同的ai。ReLU中,当x<0时,函数值为0,而Leaky ReLU则是给出了一个很小的负数梯度值。这样保留了一些负轴的值,使得负轴的信息不会全部丢失。
5.ELU
emsp; ELU(The exponential Linear unit),指数线性单元。如上图所示,ELU融合了sigmoid和RELU,左侧具有软饱和性,让ELU对输入变化或噪音更鲁棒。右侧无饱和性,能够缓解ELU梯队消失。
6.Maxout
Maxout时ReLU的一个泛化版本,如上图所示,当w1、b1设置为0时,便转换为ReLU公式。因此Maxout继承了ReLU的优点,有没有“一不小心就死掉”的担忧。该函数相当于在网络中加入一个激活函数层,该函数层与其它激活函数的不同之处在于,该函数层增加了k个&神经元,并输出k个神经元中最大的激活值。常见的隐含层输出:
hi(x)=sigmoid(xTW…i+bi)
而Maxout网络中输出
hi(x)=max(Zi1,Zi2,..., Zik);
其中Zij=XTWij + bij,其中j取值范围为[1,k]
因此,Maxout是一个可学习的分段线性函数。实验证明,Maxout可以拟合任何凸函数,是一个通用的函数你拟合器。如下图所示:
;优点:
1)、拟合能力非常强,可以拟合任意凸函数
2)、具有ReLU的所有优点,线性,不饱和性。
3)、不会导致神经元死亡
缺点:
每个神经元有两组(W,b)参数,那么参数量就增加一倍,这就导致了整体参数的数量和运算量激增。
全连接(Full Connection)层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来。它在整个卷积神经网络中起到分类器的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。全连接的核心操作就是矩阵向量乘积
y=Wx
本质就是由一个特征空间线性变换到另一个特征空间。如下图所示:
在CNN网络中,经过多个卷积层和池化层后,连接着1个或1个以上的全连接层。全连接层的每个神经元与其前一层的所有神经元进行全连接。全连接层可以整合卷积层或者池化层中具有类别区分的局部信息。为了提升CNN网络性能,全连接层每个神经元激励函数一般采用ReLU函数,最后一层全连接层的输出值被传递给一个输出,可以采用softmax逻辑回归(softmax regression)进行分类,该层可以称为softmax层。对于一个具体的分类任务,选择一个合适的损失函数是十分重要的,CNN网络中几种常用的损失函数并分析了它们各自的特点。