4.1 卷积神经网络的结构
先来看看计算机是如何识别图像的。
计算机识图与十字绣很相似。十字绣首先在样布上用经纬线画出等距离的一个个小方格,在每个小方格中标出要刺秀的丝线颜色。绣工按此要求,对每个格子绣上不同颜色的丝线,就可以绣出一幅事先设计好的图像。计算机识别图像的过程正是十字绣的逆过程。
如图4-1所示,对一幅图片,计算机首先将其划分成若干个方格(像素点),再逐个识别每个格子上的颜色,将其用数字表示,这样就得到了一个维数很大的数字矩阵,图片信息也就存储在这个数字矩阵中。
图4-1 计算机识别图像示意
后面会看到,为了避免对所产生的超大矩阵进行计算,卷积网络识图在识别每个像素点后,会将一个完整的图片分割成许多个小部分,把每个小部分里具有的特征提取出来(也就是识别每个小部分),再将这些小部分具有的特征汇总到一起,组成一个维数较小的矩阵来代替原始的大维数矩阵。
有了计算机识别图像的初步印象后,还是回到卷积神经网络的发端,生物视觉神经系统。
1981年诺贝尔奖获得者Hubel和Wiesel发现了人的视觉系统的信息处理是分级的。如图4-2所示,猕猴的视觉感知与人类相似。LGN(Lateral Geniculate Nucleus):外侧膝状体;V1:初级视觉皮层;V2:次级视觉皮层;V4:视觉区;AIT和PIT:前下颞叶皮层和后下颞叶皮层;PFC:前额叶皮层;PMC:前运动皮层;MC:运动皮层。视觉系统首先由眼睛观察,经视网膜(Retina)触发,经过低级的V1区提取边缘特征,到V2区提取基本形状或目标的局部,再到高层的整个目标(如判定为一张人脸),以及到更高层的PFC(前额叶皮层)进行分类判断等。也就是说高层的特征是低层特征的组合,从低层到高层的特征表达越来越抽象和概念化,也即越来越能表现语义或者意图。
图4-2 猕猴视觉系统的信息流动示意图
(图片来源:Simon Thorpe)
由此可见,生物的视觉识别过程是一个不断迭代、不断抽象的过程。如图4-3所示,从原始信号摄入开始(瞳孔摄入像素),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定眼前物体的形状,比如是椭圆形的),然后进一步抽象(大脑进一步判定该物体是张人脸),最后识别眼前的这个人。
图4-3 视觉的分层处理结构(图片来源:Stanford)
根据这一发现,1984年日本大阪大学的福岛邦彦(Fukushima)提出了神经认知机(Neocognitron),如图4-4所示。神经认知机是一种分层的神经网络模型,这种分层模型的生物依据就是Hubel和Wiesel的研究发现,同时,分层的结构大大简化了全连接的神经网络结构。
图4-4 神经认知机的结构
神经认知机的设计目标是识别0~9的手写数字,现在通常认为是卷积神经网络的雏形,正是神经认知机,激发了随后的卷积神经网络的诞生。
在神经认知机中,由负责提取对比度的G层细胞,负责提取图形特征的S(Simple)层细胞,和抗变形的C(Complex)层细胞交替排列组成。C细胞负责输出识别结果。
借助S层和C层的交替排列结构,各种输入模式的信息会在经过S层提取特征后,通过C层对特征畸变的容错,再反复迭代后被传播到后一层。
经过这样的过程,在底层抽取的局部特征会逐渐变成全局特征。C层还可以消除输入模式因扩大、缩小或平移而产生的畸变。
杨立昆在神经认知机的基础上,引入了误差反向传播算法,得到了卷积神经网络。
卷积神经网络模仿生物的视觉识别过程,通过多个网络层的分层合作,不断迭代、不断抽象地完成特征空间的构建。第一层学习低级特征,如颜色和边缘,第二层学习高级特征,如角、点,第三层学习小块或纹理特征,最后完成分类或回归任务。完整的视觉的分层处理结构如图4-5所示。
图4-5 完整的视觉的分层处理结构
在介绍卷积神经网络之前,有必要先介绍什么是卷积?
在数学上,卷积运算是2个可积函数的乘积再进行积分或累加,生成第3个函数,有连续变量和离散变量两种形式。
连续变量形式:
离散变量形式:
数学解释:先对变量为(τ/i)的函数g作翻转变换(−τ/−i),这相当于沿平面坐标中的x轴把函数g(·)从y轴的右边褶到左边去,也就是卷积的“卷”的由来。然后再把函数g(·)平移(x/n)个单位,接着让两个函数f和g相乘,最后求积分/相加,这个过程是卷积的“积”的过程。
卷积运算可以用来求两个函数乘积的Laplace变换。
Laplace变换的定义为:
这样一个积分变换可以将带有初值问题的微分方程求解问题转换成求解一个代数方程,最后再利用Laplace逆变换求出该微分方程的解。因此,Laplace变换是一个用途很广的积分变换。可是,由于Laplace变换的线性性,使其只能完成函数加法的Laplace变换运算,无法处理函数乘积的Laplace变换运算,这需要引入卷积来处理。
卷积定理告诉我们,对两个函数的卷积做Laplace变换,等于分别对这两个函数做Laplace变换,然后再相乘。用数学表示就是:
当卷积运算引入到图像处理中,卷积运算的两个函数f(τ)和g(x−τ)分别代表输入图像原始像素点的矩阵和卷积核矩阵,函数的乘积是两个矩阵的乘积。
在实际计算时,需要将矩阵按自左向右、自上向下的顺序,由二维向量转变为一维向量,其中的变量x是滑动步长,关于滑动步长的概念稍后介绍。
介绍了卷积运算概念后,下面开始介绍卷积神经网络。
先了解卷积神经网络的结构。与前面介绍的前馈型神经网络一样,卷积神经网络也是分层网络结构,如图4-6所示,一个卷积神经网络由输入层(input layer)、卷积层(convolution layer)、池化层(pooling layer)、全连接层(fully connected layer)和输出层(output layer)组成,卷积层和池化层可以多层交替得到更深层次的网络,最后的全连接层也可以采用多层结构,每一层的工作原理和用途稍后介绍。
图4-6 卷积神经网络的结构
下面先简要说明卷积神经网络大致的工作过程。假定给卷积神经网络输入一张照片,目的是将照片中所含的物件准确归类,接下来神经网络需要做以下几步:
输入层:将照片转换成二维数字矩阵。将照片读入系统,根据照片中每个像素的色彩和敏感度将其转乘一个二维数字矩阵;
卷积层:初步提取特征。用一个小的方阵,从左到右、自顶向下滑过整个照片矩阵,每次滑动停顿时,完成卷积矩阵与其当前覆盖照片区域的矩阵的点积运算,结果会生成一个比原始照片矩阵小一点的特征矩阵,其中记录了照片的某些特征;
池化层:对由卷积产生的特征矩阵分区域(固定大小的方阵)提取统计特征,得到更小的特征矩阵;
全连接层:将各部分特征汇总,使用ReLU激活函数输出特征值;
输出层:由softmax函数根据输出层输出的各个特征值,根据最大似然估计,给出分类结论,完成分类识别。