来源: SigAI
作者: AI学习与实践平台
在机器视觉和其他很多问题上,卷积神经网络取得了当前最好的效果,它的成功促使我们思考一个问题,卷积神经网络为什么会这么有效?在本文中,SIGAI将为大家分析卷积神经网络背后的奥秘。
在各种深度神经网络结构中,卷积神经网络是应用最广泛的一种,它由LeCun在1989年提出[1]。卷积神经网络在早期被成功应用于手写字符图像识别[1][2][3]。2012年更深层次的AlexNet网络[4]取得成功,此后卷积神经网络蓬勃发展,被广泛用于各个领域,在很多问题上都取得了当前最好的性能。
卷积神经网络通过卷积和池化操作自动学习图像在各个层次上的特征,这符合我们理解图像的常识。人在认知图像时是分层抽象的,首先理解的是颜色和亮度,然后是边缘、角点、直线等局部细节特征,接下来是纹理、几何形状等更复杂的信息和结构,最后形成整个物体的概念。
视觉神经科学(Visual Neuroscience)对于视觉机理的研究验证了这一结论,动物大脑的视觉皮层具有分层结构。眼睛将看到的景象成像在视网膜上,视网膜把光学信号转换成电信号,传递到大脑的视觉皮层(Visual cortex),视觉皮层是大脑中负责处理视觉信号的部分。1959年,David和Wiesel进行了一次实验[5],他们在猫的大脑初级视觉皮层内插入电极,在猫的眼前展示各种形状、空间位置、角度的光带,然后测量猫大脑神经元放出的电信号。实验发现,当光带处于某一位置和角度时,电信号最为强烈;不同的神经元对各种空间位置和方向偏好不同。这一成果后来让他们获得了诺贝尔奖。
目前已经证明,视觉皮层具有层次结构。从视网膜传来的信号首先到达初级视觉皮层(primary visual cortex),即V1皮层。V1皮层简单神经元对一些细节、特定方向的图像信号敏感。V1皮层处理之后,将信号传导到V2皮层。V2皮层将边缘和轮廓信息表示成简单形状,然后由V4皮层中的神经元进行处理,它颜色信息敏感。复杂物体最终在IT皮层(inferior temporal cortex)被表示出来。
卷积神经网络可以看成是上面这种机制的简单模仿。它由多个卷积层构成,每个卷积层包含多个卷积核,用这些卷积核从左向右、从上往下依次扫描整个图像,得到称为特征图(feature map)的输出数据。网络前面的卷积层捕捉图像局部、细节信息,有小的感受野,即输出图像的每个像素只利用输入图像很小的一个范围。后面的卷积层感受野逐层加大,用于捕获图像更复杂,更抽象的信息。经过多个卷积层的运算,最后得到图像在各个不同尺度的抽象表示。
一维信号的卷积是数字信号处理里的一种经典手段,在图像处理领域,卷积也是一种常用的运算。它被用于图像去噪、增强、边缘检测等问题,还可以提取图像的特征。卷积运算用一个称为卷积核的矩阵自上而下、自左向右在图像上滑动,将卷积核矩阵的各个元素与它在图像上覆盖的对应位置的元素相乘,然后求和,得到输出像素值。以Sobel边缘检测算子为例,它的卷积核矩阵为:
假设输入图像的矩阵为以(x,y)为中心的3x3子图像为:
在该点处的卷积结果按照如下方式计算:
即以(x,y)为中心的的子图像与卷积核的对应元素相乘,然后相加。通过核卷积作用于输入图像的所有位置,我们可以得到图像的边缘图。边缘图在边缘位置有更大的值,在非边缘处的值接近于0。下图为Sobel算子对图像卷积的结果,左图为输入图像,右图为卷积后的结果:
Sobel算子卷积结果
从上图可以看到,通过卷积将图像的边缘信息凸显出来了。除了Sobel算子之外,常用的还有Roberts 、Prewitt算子等,它们实现卷积的方法相同 ,但有不同的卷积核矩阵。如果我们使用其他不同的核,也可以抽取更一般的图像特征。在图像处理中,这些卷积核矩阵的数值是人工设计的。通过某种方法,我们可以通过机器学习的手段来自动生成这些卷积核,从而描述各种不同类型的特征,卷积神经网络就是通过这种自动学习的手段来得到各种有用的卷积核。
卷积层是卷积神经网络的核心。下面通过一个实际的例子来理解卷积运算。如果被卷积图像为:
卷积核为:
首先用图像第一个位置处的子图像,即左上角的子图像和卷积核对应元素相乘,然后相加,在这里子图像为:
卷积结果为:
接下来在待卷积图像上向右滑动一列,将第二个位置处的子图像:
与卷积核卷积,结果为154。接下来,再向右滑动一位,将第三个位置处的子图像与卷积核进行卷积,结果为166。处理完第一行之后,向下滑动一行,然后重复上面的过程。以此类推,最后得到卷积结果图像为:
经过卷积运算之后,图像尺寸变小了。我们也可以先对图像进行扩充(padding),例如在周边补0,然后用尺寸扩大后的图像进行卷积,保证卷积结果图像和原图像尺寸相同。另外,在从上到下,从左到右滑动过程中,水平和垂直方向滑动的步长都是1,我们也可以采用其他步长。
卷积运算显然是一个线性操作,而神经网络要拟合的是非线性的函数,因此和全连接网络类似,我们需要加上激活函数,常用的有sigmoid函数,tanh函数,ReLU函数等。关于激活函数的解释,为什么需要激活函数,什么样的函数可以用来做激活函数,SIGAI会在后续的文章中讲述,请关注我们的公众号。
前面我们讲述的是单通道图像的卷积,输入是二维数组。实际应用时我们遇到的经常是多通道图像,如RGB彩色图像有三个通道,另外由于每一层可以有多个卷积核,产生的输出也是多通道的特征图像,此时对应的卷积核也是多通道的。具体做法是用卷积核的各个通道分别对输入图像的各个通道进行卷积,然后把对应位置处的像素值按照各个通道累加。
由于每一层允许有多个卷积核,卷积操作后输出多张特征图像,因此第L个卷积层的卷积核通道数必须和输入特征图像的通道数相同,即等于第L-1个卷积层的卷积核的个数。
下图是一个简单的例子:
在上图中卷积层的输入图像是3通道的(图中第1列)。对应的,卷积核也是3通道的。在进行卷积操作时,分别用每个通道的卷积核对对应通道的图像进行卷积,然后将同一个位置处的各个通道值累加,得到一个单通道图像。在上图中,有4个卷积核,每个卷积核产生一个单通道的输出图像,4个卷积核共产生4个通道的输出图像。
通过卷积操作,我们完成了对输入向图像的降维和特征抽取,但特征图像的维数还是很高。维数高不仅计算耗时,而且容易导致过拟合。为此引入了下采样技术,也称为pooling即池化操作。
池化的做法是对图像的某一个区域用一个值代替,如最大值或平均值。如果采用最大值,叫做max池化;如果采用均值,叫做均值池化。除了降低图像尺寸之外,下采样带来的另外一个好处是平移、旋转不变性,因为输出值由图像的一片区域计算得到,对于平移和旋转并不敏感。
下面通过一个实际例子来理解下采样运算。输入图像为:
在这里进行无重叠的2x2max池化,结果图像为:
结果图像中第一个元素11是原图左上角2x2子图像:
元素的最大值11。第二个元素9为第二个2x2子图像:
元素的最大值9,其他的以此类推。如果是采用的均值下采样,结果为:
池化层的具体实现是在进行卷积操作之后对得到的特征图像进行分块,图像被划分成的不相交块,计算这些块内的最大值或平均值,得到池化后的图像。
均值池化和max池化都可以完成下采样操作,前者是线性函数,而后者是非线性函数,一般情况下max池化有更好的效果。
典型的卷积神经网络由卷积层、池化层、全连接层构成。在这里以LeNet5网络来说明,下图是这个网络的结构:
网络的输入为的灰度图像,由3个卷积层,2个池化层,1个全连接层组成。前面两个卷积层后面都有一个池化层。输出层有10个神经元,表示0-9这10个数字。
机器视觉是深度学习技术最先取得突破的领域,也是应用最广泛的领域。在AlexNet出现之后,卷积神经网络很快被用于机器视觉里的各种任务,包括通用目标检测、行人检测、人脸检测、人脸识别、图像语义分割、边缘检测、目标跟踪、视频分类等各种问题,都取得了成功。
自然语言处理领域大多数的问题都是时间序列问题,这是循环神经网络擅长处理的问题。但对于有些问题,使用卷积网络也能进行建模并且得到了很好的结果,典型的是文本分类和机器翻译。
除此之外,卷积神经网络在语音识别、计算机图形学等其他方向也有应用。
卷积网络设计的初衷是通过卷积层和池化层逐级提取图像在各个不同抽象层次的特征,我们会有这样的疑问:现实结果真的是这样的吗?
先看图像卷积之后的结果。下面是一张卡车的图像:
用AlexNet网络处理之后,第一个卷积层的输出结果(我们把各个卷积核的结果依次排开了)是这样的:
可以看到这里抽取了一些边缘信息。第二个卷积层的输出结果是这样的:
它抽取了更大区域的特征。后面几个卷积层的结果是这样的:
卷积层3-5的结果在上图中依次排开。然后我们看全连接层,下图自上向下是3个全连接层的输出结果:
我们再来看卷积核的可视化结果。第一个卷积层的卷积核图像如下图所示:
可以看到,这些卷积核确实是在提取边缘,方向等信息。再看第2个卷积层的卷积核:
看上去很杂乱,没有反应太多信息。有没有更好的办法?答案是肯定的,目前出现了一些文章解决卷积层可视化的问题。在这里,我们介绍一种典型的方法,通过反卷积运算将卷积核的效果可视化出来。
文献[6]设计了一种用反卷积操作可视化卷积层的方案。具体做法是,将卷积网络学习到的特征图像左乘得到这些特征图像的卷积核的转置矩阵,将图片特征从特征图像空间投影到像素空间,以发现是哪些像素激活了特定的特征图像,达到分析理解卷积网络的目的。这这操作称为反卷积,也叫转置卷积。
对于卷积层,在反卷积运算时使用正向传播时的卷积核的转置矩阵对特征图像进行卷积,将特征图像还原到原始的像素图像空间得到重构的图像。通过反卷积操作得到卷积核的可视化图像如下图所示:
上图表明,前面的层提取的特征比较简单,是一些颜色、边缘特征。越往后的卷积层提取的特征越复杂,是一些复杂的几何形状。这符合我们对卷积神经网络的设计初衷,即通过多层卷积完成对图像的逐层特征提取和抽象。
另外一种分析卷积网络机理的方法是根据卷积结果图像直接重构出原始输入图像,如果根据卷积结果可以重构出原始输入图像,则说明卷积网络很大程度上保留了图像的信息。文献[7]设计了一种方法,通过卷积网络提取出来的特征反向表示图像来观察卷积网络的表达能力。在这里,反向表示是指由卷积网络编码后的向量近似重构原始输入图像。具体做法是给定卷积网络编码后的向量,寻找一张图像,这种图像通过卷积网络编码之后的向量与给定向量最匹配,这通过求解一个最优化问题实现。下图是根据卷积输出结果重构出来的图像:
其中,上面一行是原始图像,下面一行是重构后的图像。从这个结果可以看出,卷积神经网络确实提取出了图像的有用信息。
对卷积神经网络的理论解释和分析来自两个方面。第一个方面是从数学角度的分析,对网络的表示能力、映射特性的数学分析;第二个方面是卷积网络和动物视觉系统关系的研究,分析二者的关系有助于理解、设计更好的方法,同时也促进了神经科学的进步。
神经网络代表了人工智能中的连接主义思想,它是一种仿生的方法,被看做是对动物大脑神经系统的模拟。在实现时,它又和大脑的结构不同。从数学上看,多层神经网络本质上是一个复合函数。
既然神经网络在本质上是一个复杂的复合函数,这会让我们思考一个问题:这个函数的建模能力有多强?即它能模拟什么样的目标函数?已经证明,只要激活函数选择得当,神经元个数足够多,使用3层即包含一个隐含层的神经网络就可以实现对任何一个从输入向量到输出向量的连续映射函数的逼近[8][9][10],这个结论称为万能逼近(universal approximation)定理。
文献[10]对使用sigmoid激活函数时的情况进行了证明。文献[8]指出,万能逼近特性并不取决于神经网络具体的激活函数,而是由神经网络的结构保证的。
万能逼近定理的直观解释是可以构造出上面这样的函数,逼近定义在单位立方体空间中的任何一个连续函数到任意指定的精度。这一结论和多项式逼近类似,后者利用多项式函数来逼近任何连续函数到任何精度。这个定理的意义在于,从理论上保证了神经网络的拟合能力。
但是这只是一个理论结果,具体实现时,神经网络需要多少层,每层要多少个神经元?这些问题只能通过实验和经验来确定,以保证效果。另外一个问题是训练样本,要拟合出一个复杂的函数需要大量的训练样本,而且面临过拟合的问题。这些工程实现的细节也至关重要,卷积网络在1989年就已经出现了,为什么直到2012年才取得成功?答案有这么几点:
1.训练样本数量的限制。早期的训练样本非常少,没有大规模采集,不足以训练出一个复杂的卷积网络。
2.计算能力的限制。1990年代的计算机能力太弱,没有GPU这样的高性能计算技术,要训练一个复杂的神经网络不现实。
3.算法本身的问题。神经网络长期以来存在梯度消失的问题,由于反向传播时每一层都要乘上激活函数的导数值,如果这个导数的绝对值小于1,次数多了之后梯度很快趋近于0,使得前面的层无法得到更新。
AlexNet网络的规模尤其是层数比之前的网络更深,使用了ReLU作为激活函数,抛弃了sigmoid和tanh函数,一定程度上缓解了梯度消失问题。加上Dropout机制,还减轻了过拟合问题。这些技术上的改进,加上ImageNet这样的大样本集,以及GPU的计算能力,保证了它的成功。后面的研究表明,加大网络的层数、参数数量,能够明显的增加网络的精度。对于这些问题,SIGAI会在后面的专题文章中详细介绍,感兴趣的读者可以关注我们的公众号。
卷积神经网络本质上权重共享的全连接神经网络,因此万能逼近定理对它是适用的。但卷积网络的卷积层,池化层又具有其特性。文献[11]从数学的角度对深层卷积网络进行了解释。在这里,作者将卷积网络看做是用一组级联的线性加权滤波器和非线性函数对数据进行散射。通过对这一组函数的压缩(contraction)和分离(separation)特性进行分析从而解释深度卷积网络的建模能力。另外,还解释了深度神经网络的迁移特性。卷积神经网络的卷积操作分为两步,第一步是线性变换,第二步是激活函数变换。前者可以看成是将数据线性投影到更低维的空间;后者是对数据的压缩非线性变换。作者对这几种变换的分离和压缩特性分别进行了分析。
卷积网络与人脑视觉系统的关系对于卷积网络的解释和设计有重要的意义,这分为两个方面的问题。第一个问题是深度卷积神经网络是否能够取得和人脑视觉系统相似的性能,这涉及到二者能力的对比。第二个问题是二者在结构上是否具有一致性,这是从系统结构上分析二者的关系。
从更深层来看,这个问题也是人工智能无法回避的一个问题。很多人都会有一个疑问:我们是否要理解了大脑的工作机理才能实现出和它相当的人工智能?对这个问题的答案有两种观点。第一种观点认为,我们要先弄清楚大脑的原理,才能研制出和他功能相当的人工智能。第二种观点认为,即使我们没有弄清大脑的工作原理,也能研制出和它能力相当的人工智能。一个例子就是飞机的发明过程,长期以来,人们都想通过仿照鸟的飞行方式来制造飞机,即煽动翅膀,结果均以失败告终。而螺旋桨的使用,使得我们采用另外一种方法,也能让飞机飞起来,后面出现的喷气发动机甚至让我们突破了音速,远比鸟强大。事实上,大脑可能不是实现和它具有同等功能的智能的唯一方案。
文献[12]对第一个问题进行了分析。他们验证了深度神经网络可以取得和灵长类动物视觉IT皮层相同的性能。人脑的视觉神经系统在物体样例变化,几何变换,背景变化的情况下仍然可以达到很高的识别性能,这主要归功于下颞叶皮层inferior temporal cortex,简称IT皮层的表示能力。通过深度卷积神经网络训练的模型,在物体识别问题上同样达到了很高的性能。对两者的精确比较存在很多困难。
作者用扩展的核分析技术对深度神经网络和IT皮层进行了比较。这种技术将模型的泛化误差作为表示复杂度的函数。分析结果表明,深度神经网络在视觉目标识别任务上的的性能可以得到大脑IT皮层的表示能力。
文献[13]也分析了深层神经网络与视觉神经之间的对应关系。他们利用目标驱动的深度学习模型来理解大脑的感觉皮层。具体的思路是用目标驱动的分层卷积神经网络(goal-driven hierarchical convolutional neural networks,简称HCNNs)对高视觉皮层区中单个单元和群体的输出响应进行建模。这种手段建立起了深层神经网络和大脑感知皮层的对应关系,能够帮助我们理解视觉皮层的机理。从另一角度看,也找到了深度神经网络在神经科学上的对应点。下图是神经网络与视觉皮层的结构和功能对比:
目前对深度神经网络工作机理、理论的研究还不完善,脑科学的研究也还处于比较低级的阶段。相信在未来通过人类不断的努力,能够更清楚的理解大脑的工作机理,也能够设计出功能更强大的神经网络。
来源:AI学习与实践平台
原文链接:https://zhuanlan.zhihu.com/p/36160648
- 加入人工智能学院系统学习 -
点击“ 阅读原文 ”进入学习