CNN 全连接层与卷积层
卷积和全连接关系
卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。
因为用到了所有的局部特征,所以叫全连接
什么是全连接层
全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽。
在 CNN 中,全连接常出现在最后几层,用于对前面设计的特征做加权和。比如 mnist,前面的卷积和池化相当于做特征工程,后面的全连接相当于做特征加权。(卷积相当于全连接的有意弱化,按照局部视野的启发,把局部之外的弱影响直接抹为零影响;还做了一点强制,不同的局部所使用的参数居然一致。弱化使参数变少,节省计算量,又专攻局部不贪多求全;强制进一步减少参数。少即是多) 在 RNN 中,全连接用来把 embedding 空间拉到隐层空间,把隐层空间转回 label 空间等
例如经过卷积,relu后得到3x3x5的输出。
那它是怎么样把3x3x5的输出,转换成1x4096的形式?
很简单,可以理解为在中间做了一个卷积
从上图我们可以看出,我们用一个3x3x5的filter 去卷积激活函数的输出,得到的结果就是一个fully connected layer 的一个神经元的输出,这个输出就是一个值。因为我们有4096个神经元。我们实际就是用4096个3x3x5的卷积层去卷积激活函数的输出。
全连接与卷积的联系
全连接神经网络随着隐藏层和隐藏节点的增加,参数的增加量是十分巨大的。正是因为这些大量的参数,使得神经网络模型有着极强的学习能力,但是也造成了计算的困难。卷积神经网络的发明很好是解决了这一问题。为了很好的了解卷积的概念,我们可以先从生物学的角度进行理解。
当我们欣赏一幅图片的时候,大概有两种欣赏方式。其一是纵观全局,这便相当与全连接神经网络方式;其二是关注局部,然后保证观察角度不变,进行上下左右平移,来观察整张图片,这便相当于卷积神经网络。
每个圆圈可理解为隐藏层的结点,连线的角度可以抽象成权值W,连线所在图片中的对应点的像素值为X,加上偏置即为WX+b模型。当以全连接层方式观察时,每变换一个结点,相当于变换一个观察角度,所有的连线角度都会改变,造成了所有的W都不一样,所以全连接层的参数会很多。反观卷积层方式,当选定一个核(后面解释,即图中彩色长方形区域)大小时,变换每个结点时,通过核的上下左右移动来遍历整张图片,在此过程中,连线的角度不变,即权值的大小不变,由次可以解释卷积方式参数大量下降的原理。卷积的核函数
g(x,y)即为核,每个小方格上都有一个标量代表权重w。f(x,y)为输入,每个小方格上都有一个标量代表该图片在该点上的像素值。卷积的定义是两个变量在某个范围内相乘后求和是结果。对应图中就是让核与输入两个平面平行对应,每个对应点进行相乘后求和,得到的值作为输出。
因为核是一个矩阵,其存在大小,所有经过卷积操作后的输出维度总是略小于输入维度。例如上图所示,一个3×3的单通道输入,经过一个3×3大小的核映射,得到的输出维度为1×1。
很多情况下,我们希望得到是输出与输入的大小格式保持一致,此时需要在输入的四周填充一圈空白,使核遍历图片后得到的映射输出大小不变。填充的空白大小与核的大小成正相关。步幅的作用是用来降维的,如图:当步幅为1时,将一个5×5的输入填充成7×7,再经过一个3×3的核映射,其输出维度不变。若此时将步幅调整为2,则只能得到一个3×3是输出维度。如下图所示:
通道
一般来说,我们会将一个图片抽象为思维[数量,长,宽,色彩]。例如对于一张3232像素的彩色照片来讲,我们一般将其抽象为向量[1,32,32,3]。
除此之外,为了保证模型的学习能力,我们一般会从多个观察角度对图片进行观察,即取不同的核,如下图,我们对一张32×32像素的彩色照片去四个核B进行映射(四个不同的观察角度),得到的输出格式是一个向量[1,30,30,4]
输入[1,32,32,3]:代表数量为1,大小为3232,色彩通道为3。
核[4,3,5,5]:代表4个不同的核,每个核映射出来的特征分布有3个分别对应3个不同的色彩通道,核的大小为55。
输出[1,30,30,4]:一般来说我们将3个色彩通道的像素值相加,即将3降维为1,输出大小为30*30,因为这里没有扩充边界,所以输出维度略小于输入维度。通道4解释为因为有4个核所以对应4个不同输出。
这里要明确格式中通道1和通道4的概念,1是色彩通道,不管输入是色彩通道为几维,我们最终都会将它相加成一维;4是核数量通道,建立模型时建立几个核,即有几个输出数量。
池化与采样
池化的主要用途是用来进行特征的降维,压缩数据和减少参数。在一定程度上可以减轻过拟合现象,同时提高模型的容错性。比如以(3,3)作为一个池化单位,其含义就是每次将33=9个特征值根据池化算法合并成一个特征值。采样方式分为上采样和下采样。常用的下采样池化算法有Average pooling和Max pooling。如图,当步长为2时,可以将一个44的特征分布(feature map)下采样为22的特征分布。
上采用比较简单易理解,可以起到将信息等比放大的作用,放大的倍数与池化的大小有关。
卷积神经网络的意义
卷积神经网络在图片识别上意义重大,它的意义远不止减少参数量这一点。实际上,对图片进行卷积操作就是把卷积模板(核)与原图片做点积操作。点积的数学解释可以解释为:两个向量之间的相似度。推广到这里,可以说成核与原图的相似度,卷积的结果越小,说明图片中某位置和核的相似度越小,反之亦然。如何把核作为特征算子或者特征向量,那么卷积的过程就是通过移动核在原图中的对应位置,不断去寻找是否有一部分是符合我这个特征向量的,这在图片识别中意义重大。
对图片是识别实际上就是对底层特征的不断提取。打个比方,我们判断一张图片是否为车子,它的底层特征为像素。假设我们的卷积模型设置了10个核,它们的特征可能代表[颜色,形状,轱辘,车窗,方向盘,人…]等待,通过核在原图上进行匹配进而综合判断该图片是否为车子。
实际上,深度卷积神经网络就是去求解这千千万万个核的这么一种网络。这些核不是凭借我们的经验随便定义的,而是通过不断的学习更新得来的,深度卷积神经网络就是不断地去学习,最终求得这些核。而神经网络的不易解释性就在于此,随着模型的复杂,抽象出的核千千万万,我们难以去解释每个核的具体含义,也难以介绍每个中间层和中间结点的含义
卷积神经网络总结
总的来说,卷积神经网络层级结构可大致分为五个结构,分别为输入层,卷积层,激励层,池化层和全连接层。
输入层:与传统的神经网络模型一样,模型的输入需要进行预处理操作,常见的预处理操作有:去均值,归一化,PCA/SVD降维等。
卷积层:生物角度解释其作用就是----局部感知:人的大脑在识别图片的过程中,并不是一下子识别一整张图片的,而是对图片中的每个局部特征进行有顺序的局部识别,不断提取底层信息抽象出高层特征,然后更高层次对局部进行综合操作,从而得到全局信息。
激励层,本质就是激活函数,设置一个阈值,对卷积层的输出结果做一个非线性映射。如果不适用激活函数,每一层的输入就是上一次的线性结果,容易得出,无论多少神经网络层,输出都是输入的线性组合,即最原始的感知机模型,不可处理非线性问题。
池化层:用途是特征的降维,压缩数据和减少参数。在一定程度上可以减少过拟合现象,同时提高模型的容错性。
输出层(全连接层),经过前面的网络层对数据的处理,模型会学到一个高质量的特征图片全连接层。其实在全连接层之前,如果神经元数目过多,学习能力过强,又可能出现过拟合现象。因此,在全连接层中一般使用Dropout操作来随机删除神经网络中部分神经元之间的链接,以此来降低全连接层的复杂度。当数据来到全连接层时,可以理解为一个简单的多分类网络(如BP神经网络),通过softmax函数得到最终预测输出,整个模型训练完成。
softmax函数
做过多分类任务的同学一定都知道softmax函数。softmax函数,又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。下图展示了softmax的计算方法:
下面为大家解释一下为什么softmax是这种形式。
首先,我们知道概率有两个性质:1)预测的概率为非负数;2)各种预测结果概率之和等于1。
softmax就是将在负无穷到正无穷上的预测结果按照这两步转换为概率的。
下图为y=exp(x)的图像,我们可以知道指数函数的值域取值范围是零到正无穷。softmax第一步就是将模型的预测结果转化到指数函数上,这样保证了概率的非负性。
为了确保各个预测结果的概率之和等于1。我们只需要将转换后的结果进行归一化处理。方法就是将转化后的结果除以所有转化后结果之和,可以理解为转化后结果占总数的百分比。这样就得到近似的概率。
下面为大家举一个例子,假如模型对一个三分类问题的预测结果为-3、1.5、2.7。我们要用softmax将模型结果转为概率。步骤如下:
1)将预测结果转化为非负数
y1 = exp(x1) = exp(-3) = 0.05
y2 = exp(x2) = exp(1.5) = 4.48
y3 = exp(x3) = exp(2.7) = 14.88
2)各种预测结果概率之和等于1
z1 = y1/(y1+y2+y3) = 0.05/(0.05+4.48+14.88) = 0.0026
z2 = y2/(y1+y2+y3) = 4.48/(0.05+4.48+14.88) = 0.2308
z3 = y3/(y1+y2+y3) = 14.88/(0.05+4.48+14.88) = 0.7666
总结一下softmax如何将多分类输出转换为概率,可以分为两步:
1)分子:通过指数函数,将实数输出映射到零到正无穷。
2)分母:将所有结果相加,进行归一化。