王金哲, 王泽儒, 王红梅
(长春工业大学 计算机科学与工程学院, 吉林 长春 130012)
近年来,伴随着互联网技术的飞速发展,人工智能已经应用到生活的不同方面,其中自然语言处理、机器人学、人脸识别、人工神经网络、图像理解和智能搜索等是目前人工智能领域的研究热点。由于卷积神经网络(CNN)可以很好地应用于这些领域,因此,针对CNN性能的改进成为许多学者关注的焦点[1]。CNN通过局部感知与参数共享,有效降低网络复杂度。该设计在针对图像识别、变形、扭曲、倾斜等变形形式具有较高的适应性和优越性[2],通过将图像直接输入,避免了特征提取和图像重建等过程。因而CNN在语音识别、图像分析和文本分类等很多问题中表现出色,而且在很多具体的领域得到了普及应用。
CNN结构特点如下:
1)CNN包含卷积层、池化层、全连接层这三层基本网络结构,卷积层运算后,池化层开始进行,两者是交替进行计算的,同时将特征提取和分类过程相互结合在一起,有效地简化了传统算法中特征提取的步骤;
2)CNN使用局部连接,单个的神经元仅仅和一小部分神经元相连,通过权重共享机制,可以有效地减少训练权重的数目,一定程度上防止过拟合问题;
3)多层感知器包括输入层、隐含层和输出层这三个重要层,多层感知器对于图像平移、缩放、扭曲有良好的鲁棒性。
改进CNN算法[3]通过使用GPU来提升运算速度,但在CPU与GPU之间数据切换和进程的调度可能会出现进程中断的情况;文献[4]对于原有CNN训练时间较长和过拟合等问题提出基于免疫系统改进CNN网络,但是,这种改进在数据集测试仅有81.6%识别率;文献[5]对MLP-CNN这一经典模型进行改进,通过使用梯度下降算法和增加神经元特征数等来提高模型性能,但是这种改进会出现误差收敛缓慢的情况;文献[6]提出在CNN中加入波尔兹曼机制,并进行图像分类,该方法提升了图像分类的准确率,但是对系统内存要求比较高;文献[7]对正则化策略进行微调,以侦听卷积的滤波器和非线性激活函数,将会在一定程度上使得训练的时间有所增加;文献[8]在CNN中引入了双线性插值,可以对图像进行预测和分类,不过针对图片集过拟合现象没有提出切实可行的方案。
CNN算法一般存在以下问题[9]:
1) CNN采用梯度下降算法,在反向传播中的调节网络连接权重的过程中,误差将会缓慢下降,网络的收敛速度会受到不小的影响;
2)Sigmoid激活函数使原来在较大范围内变化的输入数据映射到[0,1]内输出,在数据集的规模逐渐增大时,参数不易得到很好的训练,网络权重不能及时更新,从而减缓收敛的速度;
3)CNN中常采用的weight decay方法与提前停止的方式缓解过拟合问题,不过解决过拟合现象的能力会随着学习层数目的增多逐渐下降。针对上述问题,为了可以让误差反传方法具有可靠的的理论意义和重要的实用价值,采用PSO算法进行优化,提高CNN收敛速度,同时基于Dropout的改进CNN算法在很大程度上能够减少过拟合现象的发生。
PSO是一种比较经典的群体优化算法,它通过模仿鸟群行为来找寻最优值。PSO算法中每个求解问题的解都作为多维搜寻空间的一个粒子,设定适应值函数,根据单个粒子自身获得的最优解,以及整体群簇所找寻到的最优值,通过不停地改变各粒子的位置和速度,最后通过迭代获得最优解。PSO算法具有搜索速度快、算法易实现、精度较高等特点。基本PSO公式如下:
c2·rand()·(pgj-xij) (1)
1.2卷积神经网络(CNN)
CNN一般由输入层、卷积层、激励层、池化层、全连接层和输出层组成。它通过卷积运算和降采样等方法实现对有用信息的提取[11]。
输入层,将所要用到的数据或者图像进行输入,为方便卷积层运算,需要对输入数据做预处理。
卷积层,卷积层的卷积核主要对输入信息进行特征提取。
激励层,激活函数主要对运算的结果进行平滑处理,同时激活函数可以对网络稀疏化,清除冗余数据,保留数据主要特征。
池化层,整理卷积层输出信息,减少网络计算量,另外对特征进行压缩,提取更为重要的特征,防止过拟合现象。
全连接层,通过特征变换,将有用信息进行整合,对提取结果进行分类和预测等处理。
输出层,将前面运算的所得结果进行输出处理。
2.1.1 CNN 算法前向传播
首先CNN 进行前向传播,包含卷积和池化操作,对于卷积层的计算:
(3)
式中:Mj----输入特征图集;
f()----激活函数,使用Sigmoid函数;
卷积层与池化层进行交替计算,卷积层之后是池化层,对于池化层的计算为:
(4)
输出层得到结果前,在n层的卷积神经中,作为输入样本,用fn表示各层池化的激活函数,w(n)表示每个层的连接权重,这个过程的计算可以表示为:
y=fn(…(f2(f1(x·w1)w2))…)wn(5)
计算出前向传播的结果,和已给出的养殖的标签值作误差计算,误差函数表示为:
(6)
式中:N----CNN输入图像训练样本数;
C----网络输出层神经元数;
yji----第i个样本的第j个输出节点的实际输出值。
2.1.2 CNN算法的后向传播
CNN算法的后向传播是为了在计算期望输出和实际输出的误差后,将需要运算的参数作为PSO算法的粒子,利用式(6)获得粒子的局部最优Pbest和全局最优值Gbest,然后使用式(1)和式(2)来更新粒子。迭代运算后,更新后的粒子是CNN权值,再对CNN网络重新进行前向传播,直至误差阈值收敛到最小范围之内,然后停止算法。
算法的实现过程如下:
输入:m(粒子个数),c1(加速常数),c2(加速常数),w(惯性权重),x(粒子的位置),v(粒子的速度)。
输出:cw[](优化后的权值)。
1)对于群体内的每一个粒子,在CNN前向传播中使用式(5)计算,再由式(6)计算误差。
2)如果已经达到误差阈值的小值,停止算法,如果没有收敛,则执行式(1)与式(2)对粒子进行更新:
①将更新的粒子的信息传回CNN中,同时更新需要训练的权值,再次进行前向传播误差计算;
②回到2)。
2.2.1 CNN结构设计
构建的9层CNN模型如图1所示。
图1 神经网络模型设计
图1由输入层、5个由卷积层和池化层构成的隐含层、全连接层、Dropout层和输出层组成。在这个新模型中,为了改善过拟合问题,将Dropout层添加到全连接层的后面,通过概率p摒弃神经元结点。
2.2.2 基于Dropout防止过拟合问题
为了提升网络的范化能力,将会在CNN网络中增加Dropout层,在网络的训练过程中,对于神经网络中任意的一个神经元,它都是使用相同的概率p将其从网络中临时抛弃,从而减小了网络的大小,其公式为:
(7)
式中:pa----样本a生成1的概率;
Ba----第i类神经元中属于样本a的数量。
文中所提出的改进CNN结构,具体算法如下:
输入:训练集,测试集;
输出:识别结果。
1)对神经网络滤波器进行训练,同时初始化滤波器尺寸像素为P1*P2;
2)对图片集进行训练,将训练集中的图片经过处理,转换成尺寸大小一致的图片,同时把图片读入到数据矩阵P中;
4)使用式(4)中所给的公式对第一层卷积特征矩阵P(1)进行计算;
5)通过调用PSO算法,来对权值wi进行更新,从而获得特征矩阵P(2);
6)通过4)与5)进行第二次卷积计算,这样会得到一个新的特征矩阵P(3);
7)将特征矩阵P(3)作为一个列向量神经元,输入到全连接层,而后将这个输入乘以权重矩阵w,然后添加偏置,对其运用激活函数,从而获得特征向量b1;
8)将全连接层得到的结果作为Dropout层的输入,通过式(7)运算获得神经元在Dropout层中的输出概率,得到特征向量b2;
9)将8)得到的特征向量b2作为输出层的输入,通过输出层Softmax分类器进行分类,最后输出识别结果。
为了评估所改进算法的性能,在ubuntu16.04的操作系统中采用Python3语言编程来实现文中所提出PD-CNN算法。测试平台为6台相同配置的电脑,配置为:AMD10CPU@2.5 GHz,GPU为AMD Radeon HD 8670M+AMD Radeon HD 8610G,8.00 GB内存。文中使用的测试数据集包括MNIST手写体数据集与HCL200书写汉字数据集。实验次数为10次。
文中改进算法和WCNN算法、MLP-CNN算法及SVM-ELM算法进行比较。其中WCNN算法为最近邻规则的神经网络模型。为了实现对输入的处理,使用了多个卷积层和池化层,并在连接层和输出结果之间建立了映射关系,最后使用聚类算法对特征分类。算法MLP-CNN主要是增加网络特征数和使用梯度下降算法进行优化,来提高网络模型的识别能力。SVM-ELM是基于支持向量机的优化算法,可以减少隐层节点数,通过SVM优化每个结点的线性决策函数。以上3个算法都是比较经典的CNN改进算法,通过与以上3个CNN改进算法进行测试比较,可以有效地说明文中提出的改进算法在性能上有很大的提高。
针对MNIST训练数据集运行10次,在不同数据规模下各算法的识别结果如图2所示。
图2 各算法针对MNIST数据集的识别结果
由图2可知,PD-CNN算法对于不同的数据规模识别率高于SVM-ELM、MLP-CNN与WCNN算法。数据规模的增长,使得MLP-CNN算法对图片的识别率影响较大,识别性能波动幅度增加。当数据集的规模小于等于3.6×104时,随着数据规模的增大,WCNN算法与PD-CNN算法识别率呈上升趋势,但是,当数据规模大于3.6×104时,识别率有下降趋势,随着数据集的增大,WCNN算法与MLP-CNN算法识别率波动大于PD-CNN算法,说明了PD-CNN算法具有较好的鲁棒性。
对每个测试数据集运行10次,在最小识别率RM、最大识别率RX、平均识别率R与运行时间t进行比较算法性能结果统计。
算法性能统计结果见表1。
表1 算法性能统计结果
通过观察表1可知,在数据集MNIST上,相比较于WCNN、MLP-CNN和SVM-ELM算法,PD-CNN算法在最小识别率RM、最大识别率RX与平均识别率R上最高,表明了文中改进算法的可行性以及正确性。使用PSO算法在梯度下降中训练CNN,在识别精度与收敛速度高于常规的训练方法,通过在模型上添加一层Dropout层,防止可能出现的过拟合问题,同时可以使得CNN的正确率得到较大的提升。最后在运行时间上与另外三个CNN改进算法进行比较,可以看到PD-CNN算法时间小于三种算法的时间,说明PSO算法在反向传播中提高了收敛速度。
针对CNN算法的收敛速度较慢、过拟合等问题,将PSO算法中需要训练的参数作为粒子进行优化,将更新的参数用于CNN算法的前向传播,调整网络连接权矩阵迭代,直到误差收敛,停止算法。同时设计新的神经网络模型,将一层Dropout层添加到输出层与全连接层之间,用于缓解过拟合风险,在识别率上得到了不小的提升,同时具有良好的鲁棒性。最后,通过与经典改进CNN算法WCNN、MLPCNN和SVM-ELM算法在数据集MNIST与HCL200进行实验比较,PD-CNN算法在识别率、收敛速度均高于另外三个算法,证明了改进算法的正确性。