CNN最大的优势在特征提取方面。由于CNN的特征检测层通过训练数据进行学习,避免了显示的特征抽取,而是隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。
一句话总结CNN最大的特点就是局部感知 和 参数共享 。下面先介绍这两个概念。
1、局部感知野(也叫稀疏连接)。
这个概念受启发于生物学里面的视觉系统结构,视觉皮层的神经元就是局部接受信息的,我们只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。这种特征提取的过程类似自下而上的方法,一层层接收局部的输入,最后不断聚合。
在全连接网络中,以图片输入为例。假设input为1000x1000,接下来的隐藏层中的神经元个数为1000,如果是全连接,那么每个神经元都要和输入相连,所以该层需要的参数就是1000x(1000x1000)个。但是使用局部感知,假设每个隐藏中的神经元与图像中的10x10的局部图像相连,那么此时的权值参数数量变为1000x(10x10)个。
2、参数共享。
卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。
在上面的局部连接中,每个神经元都对应10x10=100个参数,一共1000个神经元,如果这1000个神经元的100个参数都是相等的,那么参数数目就变为100了。
怎么理解权值共享呢?我们可以这100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。
3、多核卷积
每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。为充分提取特征,可以添加多个卷积核。
对于上图中的概念需要了解清楚:
Filter size:这个指的是卷积核(或者称为滤波器)的大小;
一个卷积核就是一个滤波器filter,可以提取一种特征。
每层中的参数=卷积核的个数x卷积和的大小。
4、Down-pooling
为了减少输入特征的量级。
对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 892 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。
我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。
子抽样:每个卷基层跟着一个局部平均和子抽样的计算层,因此特征映射的分辨率降低。
5、多层卷积
在实际应用中,往往使用多层卷积,然后再使用全连接层进行训练,多层卷积的目的是一层卷积学到的特征往往是局部的,层数越高,学到的特征就越全局化。
完整网络结构
卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个 用来求局部平均与二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。
卷积层C1:
输入是32x32,C1层有6个特征图(也就是有6个卷积核),每个卷积核大小是5x5,所以特征图大小就是(32-5+1)^2=28x28;
参数数目:(5x5+1个bias)x6个卷积核
连接数目:(5x5+1)x(28x28)x6
采样层S2:
6个14x14的特征图,每个特征图中的每个单元与C1中的2x2邻域相连,不重叠。
S2层每个单元的4个输入相加,乘以一个训练参数w,再加一个偏置b,通过sigmoid函数计算;
参数:因为局部参数共享,(1+1)x6=12个
连接数:(2x2+1)x14x14x6
卷积层C3:
16个卷积核,每个特征图大小是10x10,卷积核大小是5x5;
每个特征图中的每个神经元与S2中的某几个层的多个5x5的邻域相连。比如,第0张特征图中的每个节点与S2中的第0、1、2张特征图总共3个5x5的节点相连。
【Question】这个是如何连接?是否有理论可循?
采样层S4:同S2对C1
卷积层C5,全连接:
120个神经元,可以看做120个特征图,每个特征图的大小是1x1;
每个单元与S4层的全部16个单元的5x5域相连;
连接数=可训练参数:(16x5x5+1)x120
F6层:
84(这个数字源自输出层的设计)个单元,与C5层全连接;
F6层计算输入向量和权重向量之间的点积,再加上一个偏置;
连接数=训练参数:(120+1)x84
输出层采用欧式径向基函数单元:
给定一个输入模式,损失函数应使得F6的配置模式的期望分类足够接近;
每类一个单元,每个单元连接84个输入;
【思考】CNN模型的最后加上若干层的LSTM,对于有时序特征的数据,是如何实现更好的特征提取的?
【参考】
http://www.jeyzhang.com/cnn-learning-notes-1.html
http://ibillxia.github.io/blog/2013/04/06/Convolutional-Neural-Networks/
http://dataunion.org/11692.html