购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 什么是卷积神经网络

上文简单回顾了MLP神经网络的基础知识,那么为什么还要发明卷积神经网络?MLP网络不是已经可以拟合一切函数了吗?诚然,无论任务多么复杂,只要增加MLP网络的神经元,增加网络结构的深度,最后总能成功地拟合训练数据。但若输入数据是图片,那数据量就太大了。例如,一幅640×480的RGB图片,整平(Flatten)之后变成了一个一维向量,维度高达921600(640×480×3)。如果使用MLP模型,将会产生巨型矩阵的乘法运算,计算效率很低。此外,因为图片数据是二维数据,强行把二维的图片整平成一维向量会破坏图片的二维位置特征,反而增加了神经网络的训练难度。

1.2.1 什么是卷积运算

假设神经网络的任务是要识别出图片中的直线,将图片用图1-6所示左侧二维矩阵的形式来表达,图中高亮的两条标识为1的直线容易识别出来。如果把二维的图片整平成右侧的一维向量,直线上的像素会零散地分布在向量的各个位置,再要去识别出直线,就很困难。这是因为直线是基于相邻像素在二维空间的几何连续性形成的,而整平之后,这种连续性就被破坏了,识别难度将大大增加。

· 图1-6 整平操作

为了保持二维输入的几何连续性,卷积神经网络选择使用二维的卷积核(Kernel)作为权重。前文说到的MLP网络,每一个输入都会和不同的权重值相乘,故MLP的网络层也被称之为全连接层(Fully Connected Layer)。而卷积神经网络的卷积核是重复使用的,卷积的计算过程如图1-7所示。

· 图1-7 卷积运算

图1-7中深色的3×3矩阵就是卷积核,浅色的5×5矩阵则是输入图像。卷积核与其覆盖的图像区域求点积,便得到了卷积核中心所在像素的输出特征。现在来计算图中深色卷积核所在的位置的卷积:可以看到卷积核第一行没有和任何像素重叠,这种情况总是发生在图像的边缘。一般的做法是将露出来的卷积核权重值与0相乘,所以这种做法也称零填充(Zero Padding),很容易计算出图中卷积核位置的特征是2。同一个卷积核一行一行地扫描过每一个像素并计算出特征,最终就能得到一个特征图(Feature Map)。读者可以自行计算一下作为练习,看看结果是不是和右边的输出特征图一致。

读者可能注意到了,整个计算过程中从头到尾都在重复使用同一个卷积核,这就是卷积运算的 “权值共享” 特性。卷积的运算效率很高,例如,这幅5×5的输入图像,整平之后输入到一个全连接层进行点积运算,需要25个权重值,进行25×25次乘法运算,最后得到一个特征;而使用卷积运算,只需要9个权重值,进行9×25次乘法运算,最终能得到一个和原图分辨率一致的特征图。

1.2.2 通道(Channel)和三维卷积

卷积神经网络特别适合处理图像数据,这是因为卷积运算使用二维卷积核对图像进行扫描,让二维空间的几何连续性得以保留。读者可以观察到,图1-7中的3×3的卷积核包含了一条竖线,再观察输出特征图,会发现里面数值最大的特征也形成了一条竖线,正对应了原图中的竖线,这就是卷积核的作用:模式识别(Pattern Recognition)。卷积核保存了一种模式,输入图像经过卷积运算后,能把这种模式识别出来。例如,使用保存竖线模式的卷积核进行运算,输出的特征就是竖线特征图。不难想到,使用横线模式的卷积核就会输出横线特征图,使用斜线模式的卷积核就会输出斜线特征图。

既然一个卷积核可以识别一种模式,想要尽可能识别更多的模式,就需要很多卷积核。每一个卷积核都能输出一张特征图,一般称这张特征图是一个通道(Channel)。为了统一概念,输入图片也被认为是由通道组成的,如图1-6中所示的输入就是单通道输入(Single Channel Input)。若输入一张彩色图片,就是一个多通道输入(Multi-Channel Input),准确地说,是一个三通道输入。输入、输出可以有更高的维度,这种高维度的数据,一般称之为张量(Tensor)。例如,一张640×480分辨率的彩色图片就是一个维度为3×640×480的张量。

前文提到的二维卷积运算的输入是单通道张量,如果输入有多通道张量,是不是要把同一个卷积核在所有的通道上都做一遍卷积呢?这当然是可以的,这种卷积计算的方法称为深度卷积(Depth-Wise Convolution)。一般将一个三维张量的三个维度称为长、宽和深。通道的数目决定了张量的深度,对张量每一个深度的二维矩阵做卷积,称为深度卷积。

深度卷积的缺点是忽略了不同通道之间信息的相关性。例如,一幅彩色图片,RGB三个基本色组成了输入的三个通道,如果要识别蓝天所在的部分,除了考虑蓝色通道的值,同时还要考虑红色和绿色通道的值,只有三个通道的值同时纳入考虑,才能正确地识别出蓝天。为了学习通道之间的关联性,卷积神经网络一般会使用三维卷积核对张量进行卷积运算,卷积的计算方式和二维卷积类似。如图1-8所示,输入是一个深度为3的张量,如果选择3×3作为卷积核的尺寸(Kernel Size),那么这个卷积核就是一个维度为3×3×3的三维张量。同理,如果输入张量有10个通道,或者说深度为10,卷积核就是一个维度为10×3×3的张量。

· 图1-8 卷积运算三维视图

图1-8中一个三维卷积核对整个输入张量进行一次卷积运算后,只能得到特征图的一个通道。想要获得多通道的输出特征,就得使用多个三维卷积核,如图1-8所示,每一个卷积核都能输出一个特征图,于是得到了一个多通道的输出张量。四个三维卷积核放在一起,其实就组成了一个四维张量,该四维张量就是这个卷积层的权重,或者说是整个卷积层的卷积核。假设输入张量深度为10,输出特征图有20个通道,卷积核尺寸为3,那么这个卷积层的权重就是一个20×3×3×10的四维张量。

每一层卷积层输出的通道数目代表这一层可以识别的模式有多少种,显然,输出通道越多,可以识别的模式也就越多,能解决的问题就越复杂。

1.2.3 为什么需要深度网络

前文提到,卷积核的作用是识别输入数据中的模式,使用的卷积核越多,输出的特征图就越多,能识别的模式也越多。出于效率考虑,卷积核的尺寸一般都不大,常用的卷积核的尺寸是3、5和7,再大的就很罕见了。这也意味着卷积核能识别的模式不会特别复杂,像直线、斜线、圆圈等模式都能被很好地表达,但行人、车辆、交通标志之类复杂的模式就很难用一个3×3大小的卷积核表达了。这个时候,就需要进行抽象。卷积神经网络就是通过增加深度来对模式进行抽象的。这里的深度,是指卷积层的层数(Layers),而不是指前文提到的特征图通道数。如图1-9所示,每一个卷积层都可以对多通道输入进行卷积操作,得到多通道输出张量,每一层的输出张量又可以作为下一层的输入,如此把一个又一个的卷积层叠起来,就构建出了一个很多层的深度神经网络。

第一层负责识别输入图片中的底层特征(Low-level Features),如图片中的直线、斜线、边缘线等几何特征。第二层则负责识别第一层识别出来的特征的更高级特征,依此类推。每一个卷积层都在对输入的特征进行进一步理解,并将其理解的结果输入到下一层。这个不断深入理解的过程,就是抽象的过程。靠近输入端的抽象程度浅,靠近输出端的抽象程度深。

· 图1-9 连接多个卷积层组成深度神经网络

2009年,斯坦福大学的研究人员发表了一篇论文 [2] ,他们通过对各个卷积层输出的特征图进行概率推理,重建出了各个卷积层对输入图像的理解。图1-10就是论文中发表的图片,作者构建了一个三层的卷积神经网络来识别人脸的特征,从图中可以看出,神经网络的第一层只能理解边缘线、圆形等几何结构,第二层就能看到人的眼睛、鼻子、耳朵,到了第三层就能看出整个人脸来了。

· 图1-10 卷积神经网络的特征提取能力

深度神经网络通过对问题进行抽象,简化了每一个网络层的任务,从而让训练变得更为简单高效。但神经网络并不是越深越好,对于相对简单,或者数据量少的问题,过深的网络反而会导致过拟合。所以在实践中,只能通过不断地试验来确定最合适的深度。比较常用的方法是直接使用论文里采用的深度。

1.2.4 什么是批次(Batch)

卷积神经网络是针对图片数据发明的。图片数据非常大,一幅640×480的低清晰度RGB图片就能占据将近1MB的内存空间,而常用的自动驾驶数据集数据量都超过了100GB。如果使用梯度下降法,每更新一次都需要把整个数据集输入到模型中计算梯度,在数据量少的情况下这是可以做到的,但对于图像数据,每一次计算梯度都使用整个数据集显然是不现实的,于是随机梯度下降法(Stochastic Gradient Descent,SGD)就应运而生了。

随机梯度下降法每一次更新都只使用数据集中的若干幅图片作为输入,下一次更新则随机地从数据集中挑选新一批图片,所以称之为随机梯度下降法。每一次更新使用的几幅图片被称为一个批次(Batch)。批次大小(Batch Size)是指一个批次中图片的数目。批次大小一般是固定的,如每一次更新都取8幅图。通过不重复地加载图片,最终将覆盖整个数据集。每完整地覆盖训练数据集一次,就称为一个Epoch。训练一个卷积神经网络,往往需要50个以上的Epoch。 K12HsT7kH5S92ehG3e2tk3dzmmo+Jqpr6KXQvnmfsX24shP8e9j9g3Nd250bewbb

点击中间区域
呼出菜单
上一章
目录
下一章
×