卷积神经网络起源于感知器。单层感知器结构简单,权重更新计算快速,能够实现逻辑计算中的“非”(not)、“或”(or)、“与”(and)等简单计算。但是对于稍微复杂的“异或”(nor)逻辑操作运算无法解决,其本质缺陷是不能处理线性不可分问题,而在此基础上提出的多层感知器就能解决此类问题。
前面已经叙述过,卷积神经网络实际上就是一种多层感知器或多层前馈神经网络。这种网络实际上就是一种特征信号“产生器”,即将对辨识的图像、语音等采集的信号提取标准化、精确化的不变特征以便后续处理。它将采集到的信号值与权重作卷积运算,减去阈值信号值后,再经激活函数作用,产生输出信号。为了使输出信号能正确地反映辨识对象的特征,必须对权重进行修正。采用的计算方式就是“反向传播”(back propagation,BP)算法。其实质就是利用输出信号与理想信号的差值来修改权重。
上述计算方法就是传统的神经网络的计算方法。由于卷积神经网络中还有许多后续处理,为了统一计算公式所用符号,下面再将上述计算的有关公式分列如下。
1.关于卷积的数学定义
在卷积神经网络中,涉及两种卷积运算:内卷积和外卷积。在目前的科技文献中,一般都不把这两种卷积明确区分开来,这有时可能引起逻辑和理解上的混乱。虽然卷积神经网络在前向计算时只用到内卷积,但是在设计反向传播学习算法时则要用到外卷积。下面是内卷积和外卷积的数学定义。
式中:rot180(B)是矩阵B作180°转置。
2.BP算法
卷积神经网络的基础是多层前馈神经网络,其工作的关键问题在于如何训练其中各层间的连接权重。解决训练问题有两类方法:一类是将其他连接权重固定,只训练两层间的连接权重。研究者们已从数学上证明了这种方法对所有非线性可分的样本集都是收敛的。另一类即目前普遍应用的BP算法。通常使用sigmoid和tanh等连续函数模拟神经元对激励的响应,使用反向传播对神经网络的连接权重进行训练。以下介绍训练的基本算法(见图8.7.2)。
图8.7.2 卷积神经网络相邻的两个神经元
其中,f(·)表示激活函数,比如Sigmoid函数。
训练多层网络的目的就是使代价函数C最小化,对于一个单独的训练样本x,其标签(目标)为Y,定义代价函数为
由此可以看出,反向传播过程就是更新神经元误差值,然后再根据所求出的误差值正向更新权重和偏值。
3.权重共享
从以上叙述可知,卷积神经网络(缩写为CNN)的核心是卷积,卷积层也称为“检测层”,卷积层的权重称为“卷积核”,它作用于输入信号,形成卷积,再经处理后就能得到相应的输出,例如图像、语音等。
在实际工作中,为了使CNN工作更高效,并不需要卷积核中的全部元素都工作。例如在图像识别中,人的单个视觉神经元并不需要对全部图像进行感知,只需要对局部信息进行感知即可。若距离较远,相关性比较弱的元素则不在计算范围内。将此思想应用到卷积计算中,就是在全部卷积核中选择与辨识对象有紧密关系的部分参加计算,这样就能使计算量大大降低。
如图8.7.3所示。原始图像的二维输入矩阵是5×5矩阵,选择的卷积核(权重)矩阵是3×3矩阵。卷积核矩阵缩小了,这样就使计算工作量大大缩小,并且使重要的图像特征更加突出。
图8.7.3 二维卷积实例
下面介绍具体的操作。首先将卷积核与原始图像左上角的3×3矩阵对应位置的元素相乘求和(输入信号的对应的行与卷积核中对应的列相乘后求和,如图8.7.3虚线框内所示),得到的数值作为结果矩阵第1行第1列的元素值,然后卷积核向右移动一个单位(即步长stride为1),与原始图像前3行第2、3、4列所对应位置的元素分别相乘并求和,得到的数值作为结果矩阵第1行第2列的元素值,以此类推。
以上就是卷积核矩阵在一个原始矩阵上从左往右、从上往下扫描,每次扫描移动一格(即一个数据位置),得到一个计算结果,将所有结果组合到一起,得到一个新的结果矩阵的过程。操作如图8.7.3所示。
如果将大量图片作为训练集,则最终卷积核会训练成待提取的特征,例如识别飞机,那么卷积核可以是机身或者飞机机翼的形状等。
卷积核与原始图像做卷积操作,符合卷积核特征的部分得到的结果比较大,经过激活函数往下一层传播;不符合卷积特征的区域,获得的数值比较小,往下传播的程度也会受到限制。卷积操作后的结果可以较好地表征该区域符合特征的程度,所以卷积操作后得到的矩阵被称为特征平面。训练完成后的图像的局部特征具有重复性(即与位置无关),这种基本特征图形可能出现在图片上的任意位置。用一个相同的卷积核对整幅图像进行一个卷积操作,相当于对图像做一个全图滤波,选出图片上所有符合这个卷积核的特征。
4.感受野与池化
感受野(receptive field)是卷积神经网络的重要概念之一,当前流行的各种识别方法的架构大都围绕感受野进行设计。(www.xing528.com)
从直观上讲,感受野就是视觉感受区域的大小,从数学角度看,感受野是CNN中某一层上的一个区域,它的输出结果以映射方式对应特征图上的一个点。换言之,特征映射图上的一个点所对应的输入图上的区域就是感受野,如图8.7.4所示。
图8.7.4 感受野示例图
如果一个神经元的大小受到了N×N的神经元区域的影响,那么就可以说该神经元的感受野是N×N,因为它反映了N×N区域的信息。在图8.7.4中,Conv2的像素点为5,它是由Conv1的2×2区域映射而来,而该2×2区域,又是由Raw Image中的5×3区域映射而来,因此该像素的感受野是5×3。可以看出,感受野越大,得到的全局信息越多。
池化的实质是对数据进行压缩,使图像越来越小,每过一级池化,相当于作一次降采样。特征图经池化压缩变小后,不但简化了网络计算的复杂度,而且还提取了主要特征。
池化实现的方法有两种:一种是通过“步长”不为1的卷积来实现,还有一种是通过池化层的直接采样实现。后者的采样操作,常见的有均值池化和最大池化。均值池化是计算图像区域所有元素的平均值作为该区域池化后的值,最大池化则是选取图像区域中元素的最大值作为该区域池化后的值。
池化作用于图像中不重合的区域(这与卷积操作不同,卷积操作可以作用于重合区域)。一般而言,池化操作的每个池化窗口都是不重叠的。池化窗口的大小就等于“步长”(stride),如图8.7.5所示。图中移动步长stride=2,采用一个大小为2×2的池化窗口,选用最大池化法进行池化,最终在原特征图中提取主要特征,得到图8.7.5的右图。
图8.7.5 最大池化操作示意图
例8.7.1 设特征图矩阵采用2×2不重叠均值池化(平均下采样)和最大池化(最大下采样),求池化的结果。
解 设Davg(A)为均值池化,Dmax(A)为最大池化,则得
Zeiler提出随机池化(stochastic pooling)操作,只需对特征图中的元素按照其概率值大小随机选择,元素被选中的概率与其数值大小正相关,并非如同最大池化那样直接选取最大值。这种随机池化操作不但最大化地保证了取值的最大化,也部分确保不会所有元素都被选取最大值,而造成过度失真。
在池化操作提取信息的过程中,如果选取区域均值,往往能保留整体数据的特征,较好地突出背景信息;如果选取区域最大值,则能更好地保留纹理特征。但最理想的还是小波变换,不但可以在整体上更加细微,还能够保留更多的细节特征。池化操作本质是使特征图缩小,有可能影响网络的准确度,对此我们可以通过增加特征图的深度来弥补精度的缺失。
池化操作为神经网络的研究者提供了广阔的创新空间。
5.块归一化
块归一化(batch normalization),又称为批量归一化。对神经网络的训练过程进行块归一化,不仅可以提高网络的训练速度,还可以提高网络的泛化能力。块归一化可以理解为将输入数据的归一化扩展到其他层输入数据的归一化,以减小内部数据分布偏移(internal covariate shift)的影响。经过块归一化后,一方面可以通过选择比较大的初始学习速率极大地提升训练速度,另一方面还可以不用太关心初始化方法和正则化技巧的选择,从而减少对网络训练过程的人工干预。
块归一化在理论上可以作用于任何变量,但在神经网络中一般直接作用于隐含单元的输入。块归一化实质上就是一个变换,使变换后的数据满足同一独立分布的假设条件。前提是假定各输入数据块的数据呈同一独立随机分布(如高斯分布)。
块归一化是常用的数据归一化方法,常用在卷积层后,可以用于重新调整数据分布。
假设神经网络某层一个batch的输入为X=[x0,x1,…,xn],其中每一个xi为一个样本,n为batch size也就是样本的数量。
首先,需要求得mini-batch里元素的均值:
其次,求出mini-batch的方差:
这样就可以对每个元素进行归一化,其中ε是防止分母为0的一个常数:
在实际使用时还要做尺度缩放和偏移操作,例如用下式来实现这一变换:
式中:γ和β是修正参数,它们是基于具体的任务学习得来的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。