一种基于牛顿共轭梯度法的深度学习网络架构的制作方法

文档序号:21698092发布日期:2020-07-31 22:50阅读:408来源:国知局
本发明属于深度学习领域,尤其涉及一种基于牛顿共轭梯度法的深度学习网络架构。
背景技术
:在过去几年中,卷积神经网络(convolutionalneuralnetworks,cnn)已成为计算机视觉领域中用于各种任务的主流机器学习方法,包括图像识别、目标检测和语义分割。总之,cnn模型的结构决定了它的性能,因此设计cnn是一个核心问题。但是,大多数cnn结构仍是通过手动设计获得的,这是经验化的、耗时且缺乏理论支持。人们很难深入了解神经网络的机理。因此,有必要从理论的角度探索cnn结构,并设计出更透明且有效的cnn结构。事实上,有一些工作利用优化算法来辅助设计神经网络结构,它们主要用于解决压缩感知问题。很多传统的方法用迭代算法求解一个有良好定义的压缩感知优化问题。但是,迭代算法通常需要多次迭代才能收敛,计算复杂性较高。许多工作(karolgregorandyannlecun,‘learningfastapproximationsofsparsecoding’,inicml,pp.399-406,omnipress,(2010).boxin,yizhouwang,wengao,davidwipf,andbaoyuanwang,‘maximalsparsitywithdeepnetworks’,innips,pp.4340-4348,(2016).jiansun,huibinli,zongbenxu,etal.,‘deepadmm-netforcom-pressivesensingmri’,innips,pp.10-18,(2016).jianzhangandbernardghanem,‘ista-net:interpretableoptimization-inspireddeepnetworkforimagecompressivesensing’,incvpr,pp.1828-1837,(2018).)将迭代算法展开,自然地获得了优化算法启发的神经网络结构。但是,由于难以建立合适的的特征提取优化问题,这种设计方法仍难以直接用于图像识别任务。为解决这一问题,受常微分方程(ordinarydifferentialequation,ode)启发的cnn设计方法提供了另一种思路。一些工作(eldadhaberandlarsruthotto,‘stablearchitecturesfordeepneuralnetworks’,inverseproblems,34(1),014004,(2017).yipinglu,aoxiaozhong,quanzhengli,andbindong,‘beyondfinitelayerneuralnetworks:bridgingdeeparchitecturesandnumericaldifferentialequations’,inicml,(2018).tianqichen,yuliarubanova,jessebettencourt,anddavidkduvenaud,‘neuralordinarydifferentialequations’,inneurips,pp.6571–6583,(2018).)将resnet的前向传播过程视为一个ode的欧拉格式,然后在这种新视角下设计新的神经网络结构。但是这种方法很难诱导出新的计算模块,如dropout模块。我们需要指出的是,受优化算法启发的cnn设计方法是可微编程的一个重要组成部分。可微编程通常的做法是,首先使用迭代算法来解决一个有良好定义的问题,然后将迭代格式表示为一个数据流,该数据流可以看作是一个深层神经网络。获得网络结构后,我们使参数变得可变且可学习以增加容量。但是对于图像识别任务,我们事先没有明确的特征提取优化问题,很难找到一个有良好定义的优化问题,因此必须首先将已知的cnn结构转换为用于解决优化问题的迭代式,就像将残差网络(residualnetwork,resnet)看做是欧拉离散格式一样,以便获得一个有良好定义的问题,然后使用可微编程方法设计新的cnn。神经网络架构自动搜索也是网络设计的一个重要方法,但是这种方法通常非常耗时,计算代价高昂,而且很难对得到的网络架构进行理论分析。技术实现要素:本发明的目的在于针对现有技术的不足,提供一种基于牛顿共轭梯度法的深度学习网络架构。本发明可得到性能更好且原理更加透明的网络结构用于图像识别问题。本发明的目的是通过以下技术方案来实现的:一种基于牛顿共轭梯度法的深度学习网络架构,将残差网络中的残差模块替换成牛顿共轭梯度模块;所述牛顿共轭梯度模块通过以下步骤实现:(1)将第k个牛顿共轭梯度模块的输入xk作为初始节点y0:y0=xk(2)初始化迭代次数t=0;(3)当前节点yt经过卷积核wt(1)进行卷积操作后,再进行dropout操作得到第一梯度支节点gt(1):gt(1)=dropout(wt(1)yt)其中,dropout操作用于随机丢弃部分节点;(4)对当前节点yt进行dropout操作后,再经过卷积核wt(2)进行卷积操作得到第二梯度支节点gt(2);gt(2)=wt(2)dropout(yt)(5)当前节点yt经过卷积核wt(3)进行卷积操作后,进行dropout操作,再经过卷积核wt(4)进行卷积操作得到第三梯度支节点gt(3);gt(3)=wt(4)dropout(wt(3)yt)(6)对当前节点yt、步骤(3)得到的第一梯度支节点gt(1)、步骤(4)得到的第二梯度支节点gt(2)和步骤(5)得到的第三梯度支节点gt(3)求和,得到当前梯度节点gt:gt=yt+gt(1)+gt(2)+gt(3)(7)根据步骤(6)得到的梯度节点gt得到共轭梯度节点dt:其中,t为预设的迭代次数,βt-1是标量;(8)根据步骤(7)得到的共轭梯度节点dt更新节点:yt+1=yt+αtdt其中,αt是标量;(9)重复执行步骤(3)~(8),每次迭代后更新t=t+1,直到经过t次迭代后得到节点yt;(10)通过下式得到第k个牛顿共轭梯度模块的输出,作为第k+1个牛顿共轭梯度模块的输入xk+1:xk+1=relu(xk+yt)其中,relu是激活函数。进一步地,所述卷积核wt(1)、wt(2)、wt(3)、wt(4)和所述标量βt-1、αt均先初始化,再采用反向传播算法训练得到。进一步地,所述反向传播算法为随机梯度下降法。本发明的有益效果是:本发明首先把神经网络的迭代运算看成是用简单拟牛顿法来求解一个优化问题的过程,然后把求解过程换成更精确的牛顿法,其hessian矩阵的逆和梯度的乘积用若干步共轭梯度法来近似,最后把整个计算过程用网络结构表达出来,得到相应的深度神经网络。可应用于人工智能、计算机视觉等应用领域。采用本发明技术方案,从优化算法出发设计神经网络结构,能够改进传统的依靠经验、实验尝试搜索的设计方式,得到更高效的神经网络结构,从而节省大量的时间与计算资源。本发明用优化算法中的牛顿法来启发深度神经网络结构设计,可以得到性能优越的深度神经网络。附图说明图1是一个newton-cg模块的示意图;图2是从y计算g的过程的数据流图。具体实施方式下面我们通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。本发明提出了一个用于设计cnn的统一框架。首先,我们观察到经典前馈模型(plainnet)通过一种拟牛顿法解决一个优化问题;我们还发现使用改进的拟牛顿法来解决此问题,可以自然地得到resnet的变体。最常见的用于图像识别的卷积神经网络结构是前向传播结构,如alexnet和vgg(visualgeometrygroup)。除去最后的softmax层,提取特征的过程可以表示成xk+1=φ(wkxk)(1)其中,xk是第k层的输出,φ是激活函数,这里我们令它为relu函数,wk是由卷积操作实现的线性变换。我们把这类网络结构称为plainnet。很显然,式(1)最直接对应的优化迭代是:xk+1=φ(axk)(2)其中,a是一个矩阵。进一步的,我们需要得到式(2)求解的优化问题。我们有如下观察:如果a是对称矩阵,式(2)实际上是用一种拟牛顿法求解优化问题:其中,p′(x)=φ(x),逆海塞(hessian)矩阵由a-1近似;假设||a||2<1,可以证明,这种方法仅具有一阶收敛速度。事实上,这样的近似并不准确,而且一个好的拟牛顿法往往能够达到二阶收敛速度。作为一个简单的替代,我们可以在形式上用一个可变hk近似f(x)的逆海塞矩阵,有:其中,算子pc表示投影到集合c={x|x≥0}上。利用可微编程的思想,我们将式(4)中的参数变得可变且可学习的,可以得到一种resnet的变体形式:xk+1=φ[ws(k)xk+w1(k)φ(w2(k)xk)](5)其中,w1(k)、w2(k)为普通的卷积核,通常是3*3卷积核,ws(k)表示直连边的卷积操作,通常是1*1的卷积核,用来匹配尺寸,上标k表示是第k个模块的卷积核。牛顿-共轭梯度法如果我们用更好的优化算法求解同样的优化问题,可能会诱导出一个更好性能的网络(huanli,yiboyang,dongminchen,andzhouchenlin,‘optimizationalgorithminspireddeepneuralnetworkstructuredesign’,inacml,pp.614–629,(2018).)。然后,我们采用一种更好的方法,即牛顿-共轭梯度法(newton-conjugategradientmethod,newton-cgmethod)来解决该问题,并提出了牛顿-共轭梯度网络(newton-conjugategradientnetwork,newton-cgnet),它自然包含分支结构和dropout模块。由于我们所用到的方法都属于牛顿方法族,因此我们将这种方法称为牛顿设计。事实上,使用者可以用任意一种方法来近似函数f(x)的逆海塞矩阵,如秩1迭代、bfgs、dfp(davidon-fletcher-powell)等方法,用来诱导设计新型的网络架构。在这里,我们以牛顿-共轭梯度法为例,诱导出newton-cgnet。观察问题(3),我们发现它的第一项是个二次项,而牛顿方法很适合解决二次规划问题,因此我们尝试直接用牛顿法求解问题(3),算法迭代格式可以写作:这里直接求解[i-diagφ′(axk)a]-1很困难,我们采用共轭梯度法来间接求解。我们记u=i-diagφ'(axk)a,r=φ(axk)-xk,然后仅需要求解:y=u-1r(7)y是下述优化问题的解:其中,q=utu,b=utr。我们可以用共轭梯度法求解该优化问题(8),具体为:(1)输入问题中的参数q、b和迭代次数t,并选取初始点y0;(2)计算g0:(3)重复执行t次如下公式,得到第t次迭代(t=t-1)的输出yt:yt+1=yt+atdt其中,t是迭代变量,初始值为0,每次迭代后加1,t=0~t-1;d0=-g0。理论上,共轭梯度法仅需要n次迭代就可以收敛到精确解,这里n是方阵q的维数。但是n通常很大。因此我们仅迭代t次来近似求解问题(8)。显然,牛顿共轭梯度法的好坏强烈依赖于问题(8)求解的好坏,当t足够大时候,才会得到较好的近似结果。相应的,在随后诱导设计newton-cgnet时,我们也相应的使用较多共轭梯度模块。newton-cgnet这里我们利用可微编程的思想,将牛顿-共轭梯度法展开成相应的神经网络,核心思想是把迭代过程中的某些参数变为可变和可学习的,以增加模型容量。首先,我们将牛顿-共轭梯度法步骤(3)中的αt,βt看成是两个可学习的标量,而非如算法中那样准确计算。这么做的好处是可以根据整个网络的优化目标来进行相应调整。另外,我们简单地取算法的初始点y0=xk。计算梯度是算法中的一个重要步骤,具体地:自然地,这里形如ay可以看作是卷积操作,而最后一项b可以简单地看做一个阈值。我们考察diagφ′(axk)。由于激活函数φ是relu函数,φ’(axk)是一个二值函数,取值为0或1,不适合作为网络的一部分在训练中进行反向传播。另一方面diagφ′(axk)·y=φ′(axk)⊙y,这里⊙表示逐点相乘,因此可以将diagφ′(axk)·y看成是一个二值化掩膜。在基于随机梯度法的训练过程中,输入xk是随机的,因此diagφ′(axk)也具有随机性,形式上很像dropout,因此我们在这里将它看作是一个dropout模块。基于上述讨论,我们能将牛顿-共轭梯度法迭代式转化成一个数据流图。然后我们令其中的参数可变且可学习得到了newton-cgnet。为了便于叙述,我们将对应于一步牛顿法的前向传播称为一个newton-cg模块,如图1所示,其中对应于一步共轭梯度法的前向传播称为一个cg模块。从y计算g的过程的数据流图如图2所示,一个newton-cg模块中总共的可训练参数为θ={wt(1),wt(2),wt(3),wt(4),αt,βt-1,t=0,1,…,t-1};wt(1),wt(2),wt(3),wt(4)为卷积核,αt,βt-1为标量,均先初始化后由反向传播算法进行训练。将残差网络中的残差模块替换成牛顿共轭梯度模块,若干个newton-cg模块堆叠成为一个newton-cgnet;最后一个牛顿共轭梯度模块的输出依次经过池化层、softmax分类器最终得到该深度学习网络的输出标签。所述牛顿共轭梯度模块通过以下步骤实现:(1)将第k个牛顿共轭梯度模块的输入xk作为初始节点y0:y0=xk(2)初始化迭代次数t=0;(3)当前节点yt经过卷积核wt(1)进行卷积操作后,再进行dropout操作得到第一梯度支节点gt(1):gt(1)=dropout(wt(1)yt)其中,dropout操作用于随机丢弃部分节点;(4)对当前节点yt进行dropout操作后,再经过卷积核wt(2)进行卷积操作得到第二梯度支节点gt(2);gt(2)=wt(2)dropout(yt)(5)当前节点yt经过卷积核wt(3)进行卷积操作后,进行dropout操作,再经过卷积核wt(4)进行卷积操作得到第三梯度支节点gt(3);gt(3)=wt(4)dropout(wt(3)yt)(6)对当前节点yt、步骤(3)得到的第一梯度支节点gt(1)、步骤(4)得到的第二梯度支节点gt(2)和步骤(5)得到的第三梯度支节点gt(3)求和,得到当前梯度节点gt:gt=yt+gt(1)+gt(2)+gt(3)(7)根据步骤(6)得到的梯度节点gt得到共轭梯度节点dt:其中,t为预设的迭代次数,βt-1是标量;(8)根据步骤(7)得到的共轭梯度节点dt更新节点:yt+1=yt+αtdt其中,αt是标量;(9)重复执行步骤(3)~(8),每次迭代后更新t=t+1,直到经过t次迭代后得到节点yt;(10)通过下式得到第k个牛顿共轭梯度模块的输出,作为第k+1个牛顿共轭梯度模块的输入xk+1:xk+1=relu(xk+yt)其中,relu是激活函数。本发明可以应用于任何使用深度神经网络的场合,比如图像分类、物体检测、文字识别等等,但这里仅举一个实施例,即将本发明应用于人脸识别问题。人脸识别系统主要包含四个组成部分,分别为人脸图像采集及检测、人脸图像预处理、人脸图像特征提取和构建分类器对人脸特征进行识别。深度卷积神经网络同时包含特征提取和特征识别过程,并且性能优于基于特征脸、支持向量机、线段hausdorff距离等其他人脸识别方法。本实施例具体包括如下步骤:步骤1,采集人脸数据;通过摄像镜头来采集人脸的静态图像和动态图像,一般要包含不同位置、不同相貌与表情等,从而增大数据集的多样性,使得训练所得模型具有较好的泛化能力。步骤2,建立人脸识别问题的目标函数,所述目标函数对应神经网络的损失函数;在具体实现中,一般多采用交叉熵作为损失函数,根据问题特点,也可以采用其他目标函数。由于人脸识别问题中,数据的分布一般呈现类间方差较小的特点,所以也可以选用center-loss,l-softmax等建立损失函数f(x),从而最大化类间方差,最小化类内方差。步骤3,选择用于识别的深度神经网络:可以选择通过牛顿设计得到的任意一个网络作为提取特征的网络。在本实例中,我们可以选择本文提到的newton-cgnet实现人脸特征提取和特征识别。得到网络结构后,需确定网络结构的细节。由于人脸数据集一般情况下样本数量较小,为了避免过拟合,采用网络规模较小的结构。在本实施例中,可将网络总层数设置为50层左右,最终的特征长度为1000维左右。步骤4,对输入数据做预处理;由于系统获取的原始图像受到各种因素的限制和干扰,一般不能直接使用,需要先对人脸图像数据进行预处理,从而获得稳定的识别性能。在本实施例中,可以选用的预处理方案包括对人脸图像的光线补偿、灰度转换、直方图均衡化、几何校正等操作。除此之外,还要对输入数据进行归一化。步骤5,确定网络训练的超参数;在训练之前,要确定网络训练的超参数,包括训练样本批量,学习率、迭代次数等。在人脸识别的问题中,可以选用样本批量为64,学习率为0.1,迭代1000-2000次。步骤6,进行网络训练;得到网络结构后,可利用用于训练的人脸图像数据对该网络进行训练,直至损失函数的值趋近于收敛时停止训练。在本发明的实施例中,完成以上步骤,训练好的深度神经网络即可以用来做人脸识别,判断输入人脸图像的标签。实验验证下述实验用于验证newton-cgnet的有效性。我们在数据集cifar-10、cifar-100、svhn和imagenet上做测试。其中cifar-10和cifar-100包含60,000张32×32的彩色图片,在cifar10中,这些图片分属10类,在cifar100中则分属100类。我们使用50,000张图片作为训练数据,10,000张图片作为测试数据。我们对每张图片做归一化:减去均值并处以标准差。我们用标准的方法对cifar-10、cifar-100数据集做数据增强,得到cifar-10(+)和cifar-100(+)。svhn数据集包含73,257张训练图片,26,032张测试图片,531,131张补充图片,图像尺寸为32×32。我们把补充图片加入训练图片一起训练。imagenet包含1,200,000张训练图片,50,000张验证图片和100,000张测试图片。这些图片分属1,000个类。我们将每张图片归一化为[0,1]。我们使用随机梯度下降法(sgd)训练网络,设置nesterov冲量为0.9,权重衰减为0.0001。我们使用何凯明的参数初始化方法(kaiminghe,xiangyuzhang,shaoqingren,andjiansun,‘delvingdeepintorectifiers:surpassinghuman-levelperformanceonimagenetclassification’,iniccv,pp.1026–1034,(2015).),并且使用xavier初始化全连接层。对于cifar-10、cifar-100数据集,我们训练300轮,样本批量大小为128。初始学习率设为0.1,并在第150次迭代和225次迭代分别将学习率除以10。对于svhn数据集,我们训练40轮,样本批量大小为128,初始学习率设为0.1,并在第20轮和第30轮迭代分别将学习率除以10。对于imagenet数据集,我们训练100次迭代,使用样本批量大小为256。在第30、60和90次迭代时减小学习率。在增强数据集cifar-10(+)和cifar-100(+)上,dropout率设为0.2;在非增强数据集上,dropout率设为0.4。进一步地,我们将newton-cgnet和resnet及其多种高级变体,在多个数据集上进行比较。在数据集cifar和svhn上的结果如表2所示。结果表明,newton-cgnet在实验的所有数据集上,都明显错误率优于resnet及其变体。表2:newton-cgnet与resnet及其多种变体在cifar,svhn上的实验结果imagenet包含1.2m的训练图片,而且每张图片的尺寸为224*224,是一个大规模数据集,resnet是在imagenet上广泛使用的基准模型,newton-cgnet在数据集imagenet上的实验结果如表3所示,可以看出相同深度和参数量下,newton-cgnet的top-1错误率、top-5错误率均低于resnet;结果表明,newton-cgnet同样适用于大规模的数据集。这些实验结果都说明牛顿设计的思想是有意义的,设计出的网络结构具有良好的性能。表3:newton-cgnet和resnet在imagenet上的实验结果方法深度参数量top-1错误率top-5错误率resnet3421.8m26.738.65newton-cgnet3421.7m25.988.43需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。当前第1页12
当前第1页1 2 
当前第1页1 2 
网友询问留言 留言:0条
  • 还没有人留言评论。精彩留言会获得点赞!
1