深度解析卷积神经网络的实现细节
一、卷积神经网络概述
卷积神经网络是一种特殊的深层的神经网络模型,它的特殊性体现在两个方面,一方面它的神经元间的连接是非全连接的,这是由局部感知原理所启发的;另一方面权重是共享的(即相同的),即在利用一个滤波器提取图像的特征时使用的权重是同一个。它的非全连接和权值共享的网络结构使之更类似于生物神经网络,这降低了神经网络模型的复杂度,减少了权值的数量。
下面以单层神经网络为例来简述卷积神经网络的优势:
上面的左图为全连接网络。如果我们有一个像素为1000*1000的图像,隐藏层有1百万个神经元,按照全连接的要求每一个神经元对要跟1000*1000的输入像素点相连,所以最终连接线就有1000*1000*1000000=10^12,每条线上都有一个权值参数,所以全连接网络会有10^12个权值参数。
上面的左图为局部连接网络。隐藏层的每一个节点跟上一层节点相近位置的10x10窗口相连接,所以1000*1000个像素点可以分成(1000*1000/(10*10))=10^6个10*10窗口。所以隐藏层只需要10^6个神经元。每个神经元的权值个数为10*10=100个。所以权值连接个数变成了10^8个,比原来减少了四个量级,这就是局部连接的好处,大大降低了网络的复杂度。
其实这个网络还使用了权值共享的策略,就是上面每一个神经元对应连接的一个10*10窗口有100个有可能不相同的权值,权值共享的策略就是隐藏层的每一个神经元都使用这100个权值,也就是所谓的权值共享。所以使用一个滤波器对图像进行特征提取时,只需要使用100个权值参数,这使得权值参数有原来的10^8降低为100个参数!!有么有被震惊到!天呐。我都被震惊到了。这也就是权值共享的巨大优势。大大减少了参数的数量。此时即使用100个滤波器(核函数)来对图像进行特征提取,提取图像100个特征,那么总共需要的权重参数也仅仅只有100*100=10^4个而已。
二、卷积神经网络的结构
2.1、CNN结构概述
下面以车辆识别的卷积神经网络为例来对CNN网络的具体结构进行相关的介绍:
这个卷积神经网络主要包含以下几个层级结构:
(1) 数据输入层;
(2)卷积计算层;
(3)ReLU激励层;
(4)池化层;
(5)全连接层。
2.2、数据输入层
该层要做的处理主要是对原始图像数据进行预处理,其中包括:
(1)去均值:把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果;
(2)归一化:把所有的数据都归一化到同样的范围;
(3)PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化。
CNN一般只对训练集做“去均值”这一步。去均值和归一化的效果如下:
去相关与白化效果图如下:
2.3、卷积计算层
2.3.1、卷积操作
以下图为例,先介绍一下什么是卷积操作。
卷积操作就是将图像对应的窗口数据(跟滤波器尺寸大小一致)跟滤波矩阵(一组固定的权重,滤波器filter)做内积(对应元素相乘然后相加)。上图蓝色框圈中的就是数据窗口和滤波器。应该卷积后得到其卷积值为-8。计算的过程如图片右上角所示。
2.3.2、滤波器
在对图像进行卷积时需要利用到滤波器filter(由一组固定不变的权重构成),滤波器的作用就是提取图像不同的特征,它的作用非常重要。不同的滤波器filter经过卷积后往往会得到不同的输出数据,比如形状、轮廓、颜色深浅等。所以如果想提取图像的不同特征,则用不同的滤波器filter。以下图为例来说明滤波器的作用:
由上图可以发现,两种不同的滤波器提取得到的图像特征是不一样的。一个是轮廓,一个是颜色深浅。
2.3.3、图像上的卷积
以一张动态图为例来展示对图像进行卷积计算的过程,其中左边部分是输入数据,中间部分是两个不同的滤波器Filter w0和Filter w1,最右边则是卷积得到的两个不同的输出,窗口滑动的步长为2。
随着左边数据窗口的平移滑动,滤波器Filter w0和Filter w1依次对图像中不同的局部数据进行卷积计算。其中滑动的窗口说明了CNN中的局部感知机制,滤波器Filter w0和Filter w1中的权重是固定不变的,也就是滤波器在与局部窗口进行卷积时权值是一样的,没有变化。这也就是CNN中非常重要的权值共享机制。
具体图像的卷积是怎么实现的,下面以上图的一个静止状态为例来进行计算,其中左边部分的蓝色部分为实际数据,灰色部分是填充部分,这是为了方便卷积计算。
卷积计算的过程还是跟之前一样,先相乘然后相加,最后加上偏置。具体过程为:
(-1)* 0 + 0*0 + 1*0 +0*0 + 1*0 + 0*1+0*0 + (-1)*2 + (-1)*0+
0*0 +(-1)*0 + (-1)*0+(-1)*0 + 1*0 + (-1)*0+0*0 + (-1)*0 + 1*1+
0*0 + (-1)*0 + 1*0+0*0 + 0*1 + (-1)*0+0*0 + 1*0 + (-1)*1=-2
然后加上偏置b=1得到卷积的结果为(-2+1)=1。其它情况的卷积与此计算过程一致。最终可以得到图像卷积后的结果。
2.4、ReLU激励层
激励层的作用就是将卷积得到的结果进行非线性的映射。如下图所示:
CNN一般采用的激励函数为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下:
激励层的实践经验:
①不要使用sigmoid;
② 首先试ReLU函数,因为快,但要小心点;
③ 如果2失效,尝试使用Leaky ReLU或者Maxout;
④ 某些情况下tanh倒是有不错的结果,但是很少。
2.5、池化层(pooling层)
池化层是夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的作用就是压缩图像。
池化层常用有两种方法,一个是区域取平均,另一个是区域取最大,下面以区域取最大为例说明池化过程:
由上图可以看出,左上角2x2的矩阵中6最大,右上角2x2的矩阵中8最大,以此类推,所以得到上图右边部分的结果:6 8 3 4。
2.6、全连接层
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。跟传统的神经网络神经元的连接方式是一样的,如下图所示:
三、卷积神经网络的训练
在开始训练前,所有的权都应该用一些不同的小随机数进行初始化。“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而导致训练失败;“不同”用来保证网络可以正常地学习。实际上,如果用相同的数去初始化权矩阵,则网络无能力学习。
CNN网络的训练算法与传统的BP算法差不多。主要包括4步,这4步被分为两个阶段:
第一阶段,向前传播阶段:
(a)从样本集中取一个样本(X,Yp),将X输入网络;
(b)计算相应的实际输出Op。在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,得到最后的输出结果):
Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))
第二阶段,向后传播阶段
(a)算实际输出Op与相应的理想输出Yp的差距loss函数;
(b)按极小化误差的方法反向传播调整权矩阵,找到最小化损失函数的W和b, CNN中用的算法是SGD(随机梯度下降)。
四、卷积神经网络的优缺点和总结
4.1、优点
(1)共享卷积核,对高维数据处理无压力;
(2)无需手动选取特征,训练好权重,即得特征分类效果好。
4.2、缺点
(1)需要调参,需要大样本量,训练最好要GPU;
(2)物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)。
4.3、总结
卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。
卷积神经网络CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。