AlexNet改进及优化方法的研究

2020-10-19 04:40郭敏钢
计算机工程与应用 2020年20期
关键词:梯度区间卷积

郭敏钢 ,宫 鹤

1.吉林农业大学 信息技术学院,长春 130118

2.吉林农业大学 吉林省智能环境工程研究中心,长春 130118

3.吉林农业大学 吉林省农业物联网科技协同创新中心,长春 130118

1 引言

AlexNet[1]在目标检测[2-3]、语音识别[4]、医学研究[5-6]等方面都有着较为突出的表现。

AlexNet 虽然不是第一个卷积神经网络(Convolutional Neural Networks,CNN)[7-10]模型,但却是第一个引起众多研究者注意的卷积神经网络网络模型。随着机器学习研究领域的不断拓展,AlexNet 也被众多研究者作为首选的网络模型,通过改进及优化,使其鲁棒性在不断提高。

LRN(Local Response Normalization)局部响应归一化是AlexNet 网络模型中的一个重要组成部分,其功能是能够产生局部抑制,使被激活的神经元抑制相邻的神经元,使得响应比较大的值更大,增加了模型的泛化能力,同时不改变数据的大小和维度。但是,由于LRN不存在可学习参数,因此提出了用WN(Weight Normalization)[11]权值归一化来代替LRN,同时将WN置于池化层(Pooling layer)之后,并且增加一层卷积层,使权重值更大,梯度更小,进一步优化了AlexNet的泛化性。

优化器(Optimizer)的主要作用是加速卷积神经网络的训练速度。随着神经网络复杂程度的加深以及计算量的增加,导致在模型训练上的耗时增加。为了解决耗时上面的问题,对比分析了Adam[12]、RMSProp[13]、Momentum[14]三种优化器在不同学习率(Learning rate)下对AlexNet 模型训练的影响,并得出了相应的学习率的优化区间,分别在不同区间上起到了优化AlexNet 模型训练的效果。

激活函数(Activation Function)在卷积神经网络中的作用是将神经元的输入映射到输出端,Krizhevsky等人在AlexNet中提出了ReLU激活函数[15-16],其优势在于正向区间为线性函数,加快了模型训练的收敛速度的同时也解决了Softsign、TanHyperbolic(Tanh)、Softsign 等激活函数的梯度消失问题,但ReLU激活函数在模型训练中容易造成部分神经元无法激活的现象。为了解决这一“坏死”现象,改进了ReLU 激活函数,使其在x<0负向区间部分由Swish 函数[17]代替,使ReLU 激活函数的负半轴函数称为非线性激活函数,有效地解决了x<0 部分神经元无法激活的现象,并且在x>0 正向区间部分由ReLU6 函数代替,使其收敛速度更快的同时能够增加参数的利用率,并且还降低了过拟合的现象发生,很好地提高了AlexNet的鲁棒性。

本文通过对AlexNet的Normalization[18]、优化器、激活函数三方面进行了相关的优化处理,在泛化性、模型训练速度以及AlexNet整体的鲁棒性等方面上都有所提高。在一定程度上成功地改进并优化了AlexNet。

2 AlexNet

2.1 AlexNet结构

AlexNet 是由多伦多大学教授Hinton 的学生Krizhevsky等人设计的,并在2012年刷新了image classification的记录,取得了ImageNet Large Scale Visual Recognition Competition(ILSVRC)挑战赛的冠军。并且,AlexNet 在模型训练提出了LRN(Local Response Normalization)局部响应归一化、ReLU 激活函数、Dropout、GPU 加速等新的技术点,成功地推动了神经网络的发展。

现如今,随着机器学习不断的拓展,AlexNet在目标检测、语音识别、医学研究等方面都有着较为突出的表现。

AlexNet 总共有 65 万个神经元,630 000 000 个连接,60 000 000 个参数。AlexNet 结构如图1 所示:自上而下共有八层,分别为五个卷积层和三个全连接层,其中还包含了LRN(Local Response Normalization)局部响应归一化层以及Dropout层。

第一、二层流程:卷积=>ReLU=>LRN归一化=>池化;

第三、四层流程:卷积=>ReLU;

第五层流程:卷积=>ReLU=>池化;

第六层流程:卷积(全连接)=>ReLU=>Dropout;

第七层流程:全连接=>ReLU=>Dropout;

第八层流程:全连接。

图1 AlexNet结构

2.2 AlexNet的特点

AlexNet 之所以能够成功,主要有以下四个方面的特点:

(1)使用ReLU激活,使计算量大大减少,由于ReLU激活函数为线性函数,其导数为1,使模型训练的计算量减少,相较于常见的非线性S 型激活函数Softsign、Tanh、Sigmoid等收敛速度加快,如图2所示。

(2)AlexNet 在全连接层中使用了Dropout,在训练时随机忽略部分神经元,有效地 解决了过拟合问题。

(3)局部响应归一化层(LRN),创建了局部神经元的竞争机制,使响应大的值更大并且抑制响应小的值,增强了模型的泛化能力。

(4)采用了GPU并行提高模型的训练速度。

图2 ReLU与常见激活函数函数曲线对比图

3 AlexNet优化

3.1 AlexNet优化流程

AlexNet 优化流程如图3 所示,分别从以下三点进行了优化处理。

(1)局部归一化层LRN 由权值归一化层WN 优化,并将权值归一化层WN置于池化层之后。

(2)ReLU 激活层由ReLU6_Swish 融合激活函数层优化。

(3)优化器 Momentum、RMSProp、Adam 学习率Learning rate区间优化。

3.2 Normalization优化

3.2.1 LRN局部归一化

局部归一化(Local Response Normalization),简称LRN,于2012年在AlexNet中提出。

式中,为归一化的结果,i为通道所在位置更新的值,j代表的是从j~i的像素值平方和,x,y代表待更新的像素的位置,而表示既是ReLU激活函数的输出值又是LRN层的输入值。a表示卷积层(包括卷积和池化操作)的输出值,N表示通道数channel,α、β、κ、n/2、a分别代表函数的alpha、beta、bias、depth_radius、input。

def lrn(input,depth_radius=None,bias=None,alpha=None,beta=None,name=None):

sqr_sum[a,b,c,d]=sum(input[a,b,c,d-depth_radius:d+depth_radius+1]∗∗ 2)

output=input/(bias+alpha ∗sqr_sum)∗∗beta

总体来讲,就是对输入值(aix,y)input除以一个定义的相对系数,最终达到标准化的目的。

但后期研究者Simonyan等人[19]对LRN的应用上发现其对模型训练的准确率实际提升得却很少,并且通过测试LRN在ILSVRC-2012数据集(被用在ILSVRC2012—2014挑战赛,数据包含1 000类图像,训练集1 300 000张、验证集50 000 张和测试集100 000 张)上的图像分类结果,得到了Top-1 和Top-5 错误率如表1 所示,证实了有无LRN 层对模型训练的错误率几乎没有影响,因此LRN的作用效果一直饱受争议。

表1 有无LRN层错误率对比

通过实验测试也印证了部分观点,在无LRN 层以及有LRN层时对模型训练做出了三组模数据进行对比分析,得出的结论是LRN 对模型训练的作用效果并不明显,准确率变化一直保持在误差范围之内,并且三组准确率数据共六条准确率曲线在同一训练模型上几乎保持不变,意味着LRN 对测试结果几乎没有影响,如表2、图4所示。

表2 有无LRN层准确率对比

图3 AlexNet优化流程

图4 三组有无RLN层准确率对比

3.2.2 WN权值归一化

权值归一化(Weight Normalization,WN)于2016 年由Salimans 等人提出。WN是将权重向量W 拆分成为向量方向和向量模g两部分组成如图5所示。

图5 WN权值归一化

通过实验测试如图6所示,在有WN层以及有LRN层时对模型训练做出了三组模数据进行对比分析,并且在原AlexNet 模型基础上进行改进,用WN 权值归一化来代替LRN,同时将WN 层置于池化层(Pooling layer)之后,并且增加一层卷积层。将WN层全部置于池化层之后的目的是因为池化层降低了特征维度,并且通过WN 与 LRN 公式可以看出,由于 WN 相比 LRN 在归一化算法的运算中不涉及幂运算β的同时只对神经网络权值向量w记性参数重写Reparameterization,从而减少了部分参数和计算量。但由于减少了样本参数数量,在减少了参数的同时增加一层卷积层来增加神经元的数量,使模型训练更准确。

总体来讲,WN引入了更少的参数对深度网络的权重重写来实现加速,并且对minibatch没有任何的依赖,加快了收敛速度的同时,也提高了模型训练的准确率如表3、图6所示,达到了优化AlexNet的目的。

表3 LRN准确率VS.WN准确率

图6 WN对比LRN准确率

3.3 优化器(Optimizer)优化

优化器(Optimizer)主要为了计算损失函数的梯度并且将所计算的梯度应用在模型训练计算的变量更新中。简单来讲优化器就是对AlexNet中梯度下降算法的优化。

选择了动量优化算法的Momentum 以及自适应学习率优化算法的Adam和RMSProp这三种优化器算法,并在AlexNet的CIFAR-10测试集上进行对比测试,对每个算法在不同学习率(Learning rate)上的最优区间进行分析,目的是为了解决在模型训练中由于对不同优化器选择学习率不准确而导致的模型收敛速度缓慢或波动过大的问题。

3.3.1 Momentum

Momentum 是引用了物理学中动量的方法来解决梯度下降的相关问题。其算法规则如下:

其主要优点是在梯度方向改变时降低超参数的更新速度,从而使震荡受到抑制,在梯度方向一致时,加速超参数的更新,从而使收敛速度增加。

通过实验测试分析如图7所示,在学习率为[0.001,1]区间上进行了数次的测试,得出了Momentum在学习率[0.17,0.398)区间上收敛性明显优于RMSProp和Adam,后两种明显地出现了波动的现象,无法对模型进行准确的训练。

图7 学习率[0.17,0.398)区间内优化器收敛性对比

3.3.2 Adam

Adam是Kingma和Lei Ba两位学者在2014年12月提出的自适应学习率优化算法的一种,其算法规则如下:

其主要优点是实现简单,计算效率高,对内存需求相对较少,超参数的更新不受梯度伸缩变换的影响,适用于梯度稀疏的大噪声问题。

通过实验测试分析如图8所示,同样是在学习率为[0.001,1]区间上进行了数次的测试,得出了Adam 在学习率[0.003,0.02)区间上收敛性明显优于Momentum 和RMSProp,虽然Adam 在大部分区间中收敛速度及波动都很稳定,但RMSProp 在部分区间内的收敛性及波动性会有小概率的情况比Adam 的表现效果好,例如在0.007 9、0.008 8、0.009 4 三个学习率下收敛性要优于Adam,因此Adam并非在[0.003,0.02)区间上绝对的优异。

图8 学习率[0.003,0.02)区间内优化器收敛性对比

3.3.3 RMSProp

RMSProp 是Hinton 提出的自适应学习率优化算法的其中一种,也是相较于Adam在学习率区间上范围更大且震荡幅度较小的一种优化器,其算法规则如下:

其主要优点是依赖于全局学习率,并解决当权重更新步长变小、学习率急剧下降的问题。

通过实验测试分析如图9所示,同样是在学习率为[0.001,1]区间上进行了数次的测试,得出了RMSProp在学习率[0.02,0.1)区间上收敛性明显优于Adam 和Momentum,虽然在此区间内RMSProp 表现得更优异,但Adam也在此区间内有着良好的表现,略慢于RMSProp,波动情况略高。

图9 学习率[0.02,0.1)区间内优化器收敛性对比

总体来讲,Momentum、RMSProp、Adam 三种优化器算法都有各自适应的学习率区间,在模型训练时需要根据项目需求对所需学习率进行仔细分析,从而选择相适应的优化器算法来解决实际问题,从而真正地达到优化AlexNet的效果。

4 激活函数(Activation functions)优化

激活函数(Activation functions)对于AlexNet 起着十分重要的作用,能够给AlexNet增加一些非线性因素,使其能够解决更多更复杂的问题,其根本作用是将神经元的输入映射到输出端。正是因为Krizhevsky 等人在AlexNet中提出了ReLU激活函数,并通过使用ReLU激活加快了收敛速度的同时,使模型训练的计算量以及耗时大大减少。

激活函数总体分为两类如图10 所示,一类是饱和激活函数,例如Tanh、Sigmoid 等,其劣势之处在于计算量大,反向传播求导时涉及除法,并且极易出现梯度消失现象,从而无法完成模型训练;另一类则是非饱和激活函数,例如ReLU、ELU、Leaky ReLU、RReLU等,AlexNet使用非饱和激活函数ReLU 也是因为除了加快收敛速度外还能解决梯度消失问题。

图10 激活函数分类

4.1 ReLU激活函数

ReLU(Rectified Linear Units,线性修正单元)激活函数的提出是AlexNet 在2012 年ImageNet 竞赛中夺冠的必要因素之一。

其成功的关键因素在于,ReLU 激活函数在方向求导过程中导数不为0,如图11所示,解决了AlexNet优化参数时使用饱和激活函数(例如Tanh、Sigmoid 等)反向传播求导过程中导数为0而造成的梯度消失现象,导致参数无法被更新,如图12所示。

图11 ReLU导数图像

图12 Sigmoid、Tanh导数图

4.2 ReLU激活函数优化

虽然ReLU 激活函数相较于Sigmoid、Tanh 在解决AlexNet在模型训练过程中梯度消失问题取得了良好的效果,并且由于其在x>0 正向区间为线性函数,所以在一定程度上也加快了收敛速度。但是,ReLU在x<0 的负向区间上呈硬饱和,导数为0,如图11所示,导致权重无法更新。其次,也正是因为ReLU激活函数在正向区间上呈线性函数,所以在某种程度上对较深层的神经网络中效果并不是很突出。

不少研究者不断地研究改进ReLU 激活函数来优化AlexNet,提出了一些ReLU激活函数的“升级”版,例如:LReLU、ELU等如图13所示。虽然这些改进的ReLU激活函数在x<0 负向区间上尽可能地解决了无法更新权重(激活神经元)的作用,但是伴随着参数的增加,同时也会出现过拟合的现象。不仅如此,由于随着AlexNet 复杂程度的加深,当节点和层数过多输出为正时,模型训练计算的输出与目标相差过大而导致无法收敛的情况。

图13 ReLu及其改进函数

为此,提出了一种解决方案:利用2017年谷歌大脑提出的新的Swish 激活函数(也被称为self-gated(自门控),如图14)在x<0 负向区间上为半饱和函数,同时导数不为0 的特点,其与ReLU6 激活函数的x>0 正向区间结合成为分段函数,如图15所示。

图14 Swish激活函数

图15 ReLU6、Swish融合函数

Swish激活函数的导数为:

图16 ReLU6对比ReLU

这两种函数融合的主要优点在于:一方面由于ReLU6激活函数对ReLU 激活函数的输入数据上界进行了限制,如图16所示,避免了AlexNet模型训练过程中ReLU激活函数由于接受域过广而导致的梯度爆炸现象的发生,收敛速度更快的同时能够增加参数的利用率,并且还降低了过拟合的现象发生;另一方面,由于Swish 激活函数在x<0 负半轴上为半饱和函数,既解决了ReLU激活函数部分权重无法更新的情况,又不会造成过拟合的现象。总体来讲,ReLU6与Swish的融合优化了ReLU激活函数的同时能够更好地增加AlexNet在模型训练上的鲁棒性。

5 测试分析

结合了本文提出的三点优化AlexNet 的方法,在CIFAR-10、MNIST、Fashion-MNIST 数据集上进行了模型训练测试,对比了经过本文提出的三点优化方法优化的AlexNet 和没有经过本文提出的三点优化方法优化的AlexNet 在模型训练中收敛性以及准确率上的不同。对比测试准确率、收敛性结果如图17、18 以及表4 所示。

图17 优化后对比无优化准确率

图18 优化后对比无优化准确率

表4 Swish激活函数谷歌测试 %

从图17 的测试结果可以看出,经过本文提出的三点优化方法优化后的AlexNet的数据集模型训练准确率opt 曲线明显高于未经过任何优化的模型训练准确率none曲线;从图18的测试结果可以看出,经过本文提出的三点优化方法优化后的模型训练收敛速度opt曲线也明显快于未经过任何优化的模型训练收敛速度none曲线,波动情况也得到了明显的缓解。总体达到了优化AlexNet的目的。

6 结语

本文通过对AlexNet的Normalization、优化器、激活函数三方面进行了相关的优化处理,主要在泛化性、模型训练速度以及AlexNet整体的鲁棒性等方面上都有所提高。在一定程度上成功地改进并优化了AlexNet,但仍有些优化改进不足的部分值得去继续实验研究,同时也为AlexNet的研究者们提供一些新的方法和思路。

猜你喜欢
梯度区间卷积
你学会“区间测速”了吗
一个带重启步的改进PRP型谱共轭梯度法
一个改进的WYL型三项共轭梯度法
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种自适应Dai-Liao共轭梯度法
卷积神经网络的分析与设计
全球经济将继续处于低速增长区间
从滤波器理解卷积
一个具梯度项的p-Laplace 方程弱解的存在性
基于傅里叶域卷积表示的目标跟踪算法