深入理解卷积神经网络

很多初次接触到卷积神经网络的同学都会对卷积这个概念感到疑惑,即使是那些已经知道传统神经网络工作原理的同学。究其原因无非有两点,一是卷积这个概念在其他领域都有,一时半会无法理解;二是从传统神经网络的一维输入变为现在的多维输入,思想上一时难以转换。今天我们就来彻底揭开卷积神经网络的神秘面纱。首先给出结论:卷积神经网络和传统神经网络并没有本质区别,卷积本质上是一个线性分类器,或者叫做线性特征提取器。之所以在图像识别中应用卷积,究其本质是由于图像内在的特质决定的。想要说清楚上面这个结论,我们需要追本溯源,从线性分类器说起。

1.线性分类器

现在假设我们需要评估一辆车的好坏,对于一辆车来说,属性x1和x2是主要因素,记a为x1的权重,b为x2的权重,y为某辆车的评分。那么我们可以得到对于一辆车来说,简单的线性模型如下:

则:

那么

我们可以简单的认为,当y>0的时候判断为好车,y<=0的时候判断为不好的车。当然线性分类器建立在线性可分的基础上,即能够找到明显的边界把不同的两个类区分开来。仔细观察上式,我们可以得出这样一个结论:线性分类器中,权值向量和特征向量做点积运算得到的值可以用于分类。

下面考虑这样一个例子,银行掌握了大量的用户数据,现在需要对用户进行建模,判断哪些用户是高风险用户。显而易见的是,用户数据涉及的属性众多,有很多都是无关数据,我们进行建模的第一步就是在大量原始特征中寻找最重要的几个特征,并针对这些特征做线性分类或者其他分类,这种筛选特征的过程在图像卷积运算中也得以体现:首先选定卷积核,卷积核在图像上进行卷积,输出特征图。特征图中即包含了某一种特征。为什么这么做呢?下面的内容进行了详细的解释。

2.图像识别中的卷积以及为什么要用卷积

很多文章可能都只是告诉你如何做卷积运算,却没有说明背后的思想,今天我们就彻底的说明白为什么要使用卷积。使用卷积最重要的原因在于图像的特征具有局部性,即图像的某个特征是由局部的像素决定的,距离较远的像素对该特征贡献很小甚至没有贡献。考虑下面这张图片(272 * 272)

“卫龙”这两个字的体现出来的所有特征都是由组成这两个字的像素和周边的像素决定的,与图片下方的竹席没有任何关联。同样的,那朵紫花的特征也仅仅是由组成紫花的像素和周边的像素决定,和组成“卫龙”二字的像素毫无关系。我们知道,在传统的机器学习中,讲究的是特征的提取和选择,比如建立一个用户信用模型,我们需要从用户所有的信息中提取有用的特征来构成最后的特征向量,其他无关的特征都应该被抛弃。

现在图像已经告诉你,我这副图像组成某个特征的像素就那么几十个,你还需要去把其他几千个像素都去连接起来吗?很显然是不需要了,所以我们说某个卷积核与图像连接的部分尺寸很小,没有别的原因,就是因为不需要那么多无关的像素。那么现在既然知道了特征的局部性,我们就需要考虑如何提取局部特征。由线性分类器得到启发,我们可以使用一个线性的特征提取器去提取局部特征(我们总是喜欢从最简单的模型开始,如果最简单的模型就能解决问题,何乐而不为呢?这也是奥卡姆剃刀原则告诉我们的(奥卡姆剃刀原则))。回到刚才建立用户模型的例子,为什么我们需要选取特征,那是因为绝大部分特征对于用户画像的贡献很小。我们在认为筛选特征的过程就可以看作是一个卷积核在所有用户属性上进行卷积。

那么问题来了,现在假设我们有一个卷积核(一个卷积核本质上就是一个神经元),那么这个卷积核对应于图像上也是3 * 3的一个区域,卷积核的神经元与9个像素相连接,那么一共有9个权值(如果采用和图像一致的表示方法,这9个权值可以表示成3 * 3的权值矩阵)。每个像素的像素值与对应的权值相乘,最后求和,得到一个加权和(看见了没,这种加权求和的形式在多层感知机里到处都是,所以卷积和多层感知机没有本质区别),最后把加权和送入激活函数进行激活操作,这样我们就完成了这一个3 * 3的图像局部区域的特征提取。

当然现在我们只是说明了卷积操作中的第一步,接下来是第二步。现在图片中“卫龙”二字只出现了一次,并且位置固定。那么出现多次,每次出现的位置不固定怎么办呢?很简单啊,我们刚刚使用了一个3 * 3的卷积核提取了3 * 3区域的特征,我们现在把这个卷积核在图像上遍历一遍不就行了么?在遍历的每一步,这个卷积核就去探测当前3 * 3区域,看看这个区域是否有“卫龙”,刚才说到最后有一个激活的动作,那么在探测的当前区域就会输出一个激活值。等到整个图像遍历完成之后,我们会得到一个激活值组成的矩阵,这就是通常所说的特征图(feature map)。这就是卷积的全部过程。

在遍历的时候有几个参数需要设置,一个很显然的就是当前连接的尺寸,即一次探测所探测的区域大小(通常有3 * 3,5* 5  ,  7 * 7等)。另一个就是步长stride,步长就是某个卷积核每次滑动的时候跨过的像素个数(如果从0号像素开始,如果下次探测从1号像素开始,步长就为1,从2开始步长就为2,以此类推),很显然的,步长越小,卷积核探测的次数越多,提取的特征显然精度更高,步长太大可能会损失一些信息。

现在我们考虑权值共享的问题,权值共享,即某个卷积核在图像上进行卷积的时候,与每个区域进行连接的时候,权值都是不变的,目的就是为了检测同一个特征。试想一下有一个能够检测边缘信息的卷积核,我们有理由相信,这个卷积核在其他区域使用相同的权值也能检测到边缘。那么问题来了,图像中不止边缘这一个特征,我们要怎么检测其他特征呢?很简单,多设置几个卷积核呗(这些卷积核聚集在卷积层里(layer))!每个卷积核负责检测一类特征。刚才我们说到一个卷积核卷积会输出一副特征图,那么n个卷积核就会输出n个特征图。

最后一个问题,如果图像上两个相距较远的像素共同决定了一种特征怎么办呢?或者说某个特征所涉及的区域有20 * 20,而我们的卷积核只有 3 * 3的大小,很显然3 * 3的卷积核不能很好的检测到20 * 20区域的全部特征。这个问题不用担心,我们只需要多设置几个卷积层就可以解决这个问题,考虑下面这幅图

在conv1层,每个神经元与2个输入进行连接,在conv2,每个神经元也与conv1层的2个输出相连接。现在考虑g2,g2与h2和h3相连接,而h2与x2和x4相连接,h3与x3和x4相连接。那么对于g2来说,通过h2和h3的中介作用,g2间接的与x2,x3,x4相连接。通过这个例子想要说明的是,虽然卷积核连接的区域较小,但是通过设置多个卷积层,高层的神经元可以间接的和输入的大片区域产生联系。这样就解决了上面提到的浅层卷积核无法覆盖所有特征像素的问题。

3.从线性特征提取到非线性特征提取

使用卷积的时候都有一个默认的前提,即图像的特征是线性可分的,如果不是线性可分的,那么就需要设置更多的卷积层和更多的卷积核来覆盖尽可能多的特征。现在问题来了,有没有什么可以提取非线性特征的提取器呢?回顾一下在学习传统神经网络的时候,我们都是从感知机模型出发,用感知机解决线性可分的情况,然后引入XOR问题(XOR不是线性可分的问题),为了解决XOR,我们需要设计多层的感知机,并且引入非线性的激活函数来解决线性不可分的情况。联想到此,是否可以提出这样的假设:使用多层的感知机模型(MLP)来提取图像中非线性可分的的特征呢?显然是可行的,具体可以参考论文Network in Network ,在这篇论文里作者提出用一个多层感知机来代替卷积核进行特征提取,形成一个网络中嵌套小型多层感知器网络的结构,并且这篇文章也是直接的影响到了GoogLeNet架构中Inception结构的设计,GoogLeNet可以参见GoogLeNet

4.推广与总结

上面说到,图像的某个特征具有局部性,为了探测图像中在所有位置的某个特征,我们使用了卷积。一个最前沿的例子就是Google在2016年推出的AlphaGo,在AlphaGo的实现中就用到了卷积神经网络。我们思考一下一副棋局有什么特征,从局部来说,黑白棋子交缠在一起,死活,围地大小等特征只要通过分析该局部即可。因此,假如我们训练了一个可以提取死活特征的卷积核,这个卷积核在输入的棋局图像上滑动一遍即可得到所有局部的死活信息。另外两个例子就是自然语言处理(NLP)和语音识别,对于文本数据和音频数据来说,特征同样具有局部性,因此也可以使用卷积来提取局部的特征。

综上所述,图像识别任务使用卷积是由于特定数据拥有的特定特质,脱离了这种特质盲目的使用卷积去处理其他问题不见得有多么好的效果。同时卷积神经网络也并没有任何神秘之处,训练方法仍然是传统的BP反向传播。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值