1.2.4 卷积神经网络
1. 神经网络的定义
神经网络也称为人工神经网络,是一种模仿生物神经网络行为特征的算法数学模型,由神经元(细胞体、细胞核、树突)、节点与节点之间的连接(轴突)所构成,如图1-31所示。
图1-31 生物的神经网络
每个神经网络单元抽象出来的数学模型如图1-32所示,也叫感知器,它接收多个输入(x1,x2,x3,…),产生一个输出,这就好比是神经末梢感受各种外部环境的变化(外部刺激),然后产生电信号,以便于传导到神经细胞(又叫作神经元)。
单个感知器就构成一个简单的模型,但在现实世界中,实际的决策模型则要复杂得多,往往是由多个感知器组成的多层网络,如图1-33所示,这也是典型的神经网络结构,由输入层、隐含层和输出层构成。输入层、隐含层和输出层的单元可以有多个。
图1-32 神经网络单元抽象出来的数学模型
图1-33 典型的神经网络结构
隐含层也可以有多层,如图1-34所示为具有双隐含层的神经网络结构。
图1-34 具有双隐含层的神经网络结构
人工神经网络可以映射任意复杂的非线性关系,具有很强的鲁棒性、记忆能力、自学习等能力,在分类、预测、模式识别等方面有着广泛的应用。
2. 卷积神经网络的定义
卷积神经网络(Convolutional Neural Networks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。特别是在模式分类领域,由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,因而得到了更为广泛的应用。
卷积神经网络包括一维卷积神经网络、二维卷积神经网络以及三维卷积神经网络。一维卷积神经网络主要用于序列类的数据处理,二维卷积神经网络常应用于图像类文本的识别,三维卷积神经网络主要应用于医学图像以及视频类数据识别。
卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成,如图1-35所示。
图1-35 卷积神经网络结构
输入图像通过与三个可训练的滤波器和可加偏置进行卷积,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进行求和、加权值、加偏置,通过一个S型函数得到三个S2层的特征映射图。这些映射图再经过滤波得到C3层,这个层级结构再经过与得到S2一样的过程产生S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。
一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层为特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射结构采用S型函数作为卷积网络的激活函数,使得特征映射具有位移不变性。
此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C层)都紧跟着一个用来求局部平均与二次提取的计算层(S层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。
3. 卷积神经网络的应用案例
下面通过一个案例来学习卷积神经网络的应用。
假设给定一张图,可能是字母X或者字母O,通过CNN即可识别出是X还是O,如图1-36所示,这是怎么做到的呢?
图1-36 识别字母
卷积神经网络的处理顺序为图像输入、特征提取、卷积、池化、激活函数、深度神经网络、全连接层、卷积神经网络。
(1)图像输入 采用经典神经网络模型,需要读取整幅图像作为神经网络模型的输入,即全连接的方式。图像尺寸越大,其连接的参数将变得越多,从而导致计算量非常大。
人类对外界的认知一般是从局部到全局,即先对局部有感知的认识,再逐步对全体有认知,这是人类的认识模式。在图像中的空间联系也是类似,局部范围内的像素之间联系较为紧密,而距离较远的像素则相关性较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。这种模式就是卷积神经网络中降低参数数目的局部感受野。
局部感受野就是视觉感受区域的大小。在卷积神经网络中,局部感受野的定义是卷积神经网络每一层输出的特征图上的像素点在原始图像上映射的区域大小,如图1-37所示。
经典神经网络与卷积神经网络的图像输入对比如图1-38所示。
图1-37 局部感受野
图1-38 经典神经网络与卷积神经网络的图像输入对比
(2)特征提取 如果字母X、字母O是固定不变的,那么最简单的方式就是对图像之间的像素一一比对就行,但在现实生活中,字体都有着各个形态上的变化,例如平移、缩放、旋转以及微变形等,如图1-39所示。
对于各种形态变化的X和O,都要通过CNN准确地识别出来,这就涉及应该如何有效地提取特征,作为识别的关键因子。对于CNN,它是一小块一小块地来进行比对,在两幅图像中大致相同的位置找到一些粗糙的特征(小块图像)进行匹配,相比起传统的整幅图逐一比对的方式,CNN的这种小块匹配方式能够更好地比较两幅图像之间的相似性,如图1-40所示。
图1-39 字母形态的变化
图1-40 CNN的小块匹配
以字母X为例,可以提取出三个重要特征,即两个交叉线和一个对角线,如图1-41所示。
图1-41 字母X的三个重要特征
假如以像素值“1”代表白色,像素值“-1”代表黑色,则字母X的像素值特征如图1-42所示。那么这些特征又是怎么进行匹配计算的呢?
图1-42 字母X的像素值特征
(3)卷积 当给定一张新图时,CNN并不能准确地知道这些特征到底要匹配原图的哪些部分,所以它会在原图中把每一个可能的位置都进行尝试,相当于把这个特征变成一个过滤器。这个用来匹配的过程称为卷积操作,这也是卷积神经网络名字的由来。卷积的操作如图1-43所示。
图1-43 卷积的操作
在本案例中,要计算一个特征和其在原图上对应的某一小块的结果,只需将两个小块内对应位置的像素值进行乘法运算,然后将整个小块内乘法运算的结果累加起来,最后再除以小块内像素点总个数即可。
如果两个像素点都是白色(值均为1),那么1×1=1,如果均为黑色,那么(-1)×(-1)=1,也就是说,每一对能够匹配上的像素,其相乘结果为1。类似地,任何不匹配的像素相乘结果为-1。具体过程如图1-44所示,第一个、第二个……、最后一个像素的匹配结果。
图1-44 字母X的像素匹配过程
根据卷积的计算方式,第一块特征匹配后的卷积计算如图1-45所示,结果为1。
图1-45 第一块特征匹配后的卷积计算
对于其他位置的匹配也是类似,例如中间部分的匹配,如图1-46所示。
图1-46 字母X中间部分的匹配
计算之后的卷积如图1-47所示。
图1-47 字母X中间部分卷积的计算结果
依此类推,对三个特征图像不断地重复上述过程,通过每一个特征的卷积操作,会得到一个新的二维数组,称之为特征映射。其中的值越接近1,表示对应位置和特征的匹配越完整;越是接近-1,表示对应位置和特征的反面匹配越完整;而值接近0则表示对应位置没有任何匹配或者说没有什么关联。当图像尺寸增大时,其内部的加法、乘法和除法操作的次数会增加得很快,每一个特征的大小和特征的数目呈线性增长。由于有许多因素的影响,很容易使得计算量变得相当庞大。
(4)池化 CNN使用池化减少计算量。池化就是将输入图像进行缩小,减少像素信息,只保留重要信息。池化的操作也很简单,通常情况下,池化区域是2×2大小,然后按一定规则转换成相应的值,例如取这个池化区域内的最大值、平均值等,以这个值作为结果的像素值。
图1-48所示为左上角区域的池化结果,取该2×2区域(0.77,-0.11,-0.11,1.00)的最大值1.00作为池化后的结果。
图1-48 左上角区域的池化结果
第二小块区域(0.11,0.33,-0.11,0.33)取最大值0.33作为池化后的结果,如图1-49所示。
图1-49 第二小块区域的池化结果
其他区域也是类似,取区域内的最大值作为池化后的结果,最终的池化结果如图1-50所示。可以对所有的特征映射进行池化。
图1-50 最终的池化结果
最大池化保留每一小块内的最大值,相当于保留这一块最佳的匹配结果(因为值越接近1表示匹配越好)。也就是说,它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。通过加入池化层,可以使图像缩小,从而在很大程度上减少计算量,降低机器负载。
(5)激活函数 常用的激活函数有S型函数(Sigmoid)、双曲正切(Tanh)、线性整流函数(Relu)等,前两者常见于全连接层,后者常见于卷积层。
感知机在接收到各个输入后进行求和,再经过激活函数后输出,如图1-51所示。激活函数的作用是用来加入非线性因素,把卷积层输出结果做非线性映射。
在卷积神经网络中,激活函数一般使用Relu,它的特点是收敛快,求梯度简单。计算公式也很简单,max(0,T),即对于输入的负值,输出全为0;对于输入的正值,则原样输出。
下面看一下本案例的Relu激活函数操作过程。
第一个值,取max(0,0.77),结果为0.77,如图1-52所示。
图1-51 激活函数
图1-52 取max(0,0.77)的结果
第二个值,取max(0,-0.11),结果为0,如图1-53所示。
图1-53 取max(0,-0.11)的结果
依此类推,经过Relu激活函数后,结果如图1-54所示。可以对所有的特征映射执行Relu激活函数操作。
(6)深度神经网络 通过将卷积、激活函数、池化组合在一起,加大网络的深度,增加更多的层,就得到了深度神经网络,如图1-55所示。
图1 54 经过Relu激活函数后的结果
图1-55 深度神经网络
(7)全连接层 全连接层在整个卷积神经网络中起到“分类器”的作用,即通过卷积、激活函数、池化等深度网络后,再经过全连接层对结果进行识别分类。
首先将经过卷积、激活函数、池化的深度神经网络后的结果串联起来,如图1-56所示。
由于神经网络属于监督学习,在模型训练时,根据训练样本对模型进行训练,从而得到全连接层的权重,如预测字母X的所有连接的权重,如图1-57所示。
图1-56 串联深度神经网络的结果
图1-57 预测字母X的所有连接的权重
在利用该模型进行结果识别时,根据刚才提到的模型训练得出来的权重,以及经过前面的卷积、激活函数、池化等深度网络计算出来的结果,进行加权求和,得到各个结果的预测值,然后取值最大的作为识别的结果,如图1-58所示,最后计算出来字母X的识别值为0.92,字母O的识别值为0.51,则结果判定为X。
图1-58 字母的识别结果
上述过程定义的操作为全连接层,全连接层也可以有多个,如图1-59所示。
图1-59 多个全连接层
(8)卷积神经网络 将以上所有结果串起来后,就形成了一个卷积神经网络结构,如图1-60所示。
图1-60 卷积神经网络
卷积神经网络主要由两部分组成,一部分是特征提取(卷积、激活函数、池化),另一部分是分类识别(全连接层)。
卷积神经网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入与输出之间的精确的数学表达式,只要用已知的模式对卷积神经网络加以训练,网络就具有输入输出对之间的映射能力。
卷积神经网络一个非常重要的特点就是头重脚轻,即输入权值越小,输出权值越多,呈现出一个倒三角的形态,这就很好地避免了BP神经网络中反向传播时梯度损失过快的情形。
卷积神经网络主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积神经网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络。权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。