深度神经网络压缩与加速综述

2018-09-21 03:32纪荣嵘林绍辉吴永坚黄飞跃
计算机研究与发展 2018年9期
关键词:错误率剪枝权值

纪荣嵘 林绍辉 晁 飞 吴永坚 黄飞跃

1(厦门大学信息科学与技术学院 福建厦门 361005) 2(福建省智慧城市感知与计算重点实验室(厦门大学) 福建厦门 361005) 3(上海腾讯科技有限公司优图实验室 上海 200233)(rrji@xmu.edu.cn)

近年来,随着GPU的快速发展及大数据时代的来临,深度神经网络(deep neural networks, DNNs)已席卷人工智能各个领域[1],包括了语音识别[2]、图像理解[3-5]、自然语言处理[6]等在内的广泛领域.不仅如此,这些深度神经网络在复杂的系统中也得到了广泛使用,如自动驾驶[7]、癌症检测[8]、复杂游戏的策略搜索[9]等.深度神经网络在很多识别任务中已大大超越了人类识别的准确率,同时突破了传统的技术方法(如手工设计的(hand-crafted)特征SIFT[10]和HOG[11])带来的巨大的性能提升.这些性能的提升是因为深度神经网络拥有对大数据高层(high-level)特征提取的能力,从而获得对输入空间或数据的有效表示.另外,相比传统在CPU平台上的计算,强大的GPU计算能力大大提高了深度神经网络的计算效率,使得模型的训练速度得到大幅度提升.如果能将计算平台小型化,即把深度神经网络强大的识别性能移植到移动嵌入式设备中(如手机、机器人、无人机、智能眼镜等),这样不管在军事方面的抢险救灾、敌情勘探,还是在民事方面的移动智能识别、便民出行等都起到重大的促进作用.

伴随着深度神经网络模型的性能增加,神经网络的深度越来越深,接踵而来的是深度网络模型的高存储高功耗的弊端,严重制约着深度神经网络在资源有限的应用环境和实时在线处理的应用,特别是智能化移动嵌入式设备、现场可编程门阵列(field-programmable gate array,FPGA)等在线学习和识别任务.例如8层的AlexNet[3]装有600 000个网络节点、0.61亿个网络参数,需要花费240 MB内存存储和7.29亿浮点型计算次数(FLOPs)来分类一副分辨率为224×224的彩色图像.同时,随着神经网络模型深度的加深,存储的开销将变得越大.同样来分类一副分辨率为224×224的彩色图像,如果采用拥有比8层AlexNet更多的16层的VGGNet[12],则有1 500 000个网络节点、1.44亿个网络参数,需要花费528 MB内存存储和150亿浮点型计算次数;ResNet-152[13]装有0.57亿个网络参数,需要花费230 MB内存存储和113亿浮点型计算次数.对于移动终端设备、FPGA等弱存储、低计算能力特点,无法直接存储和运行上述如此庞大的深度网络.

一方面,拥有百万级以上的深度神经网络模型内部存储大量冗余信息,因此并不是所有的参数和结构都对产生深度神经网络高判别性起作用;另一方面,用浅层或简单的深度神经网络无法在性能上逼近百万级的深度神经网络.因此,通过压缩和加速原始深度网络模型,使之直接应用于移动嵌入式设备端,将成为一种有效的解决方案.

一般情况下,压缩和加速深度神经网络是2个不同的任务,两者之间存在区别,但又紧密联系.例如卷积神经网络(convolutional neural networks,CNNs)分2种类型的计算层,即卷积层和全连接层.1)卷积层,它是计算耗时最大的层,也是卷积神经网络能够获得高层语义信息重要层.在卷积层内,可以通过权值共享,减少了对权值的大量存储.2)全连接层,不同于卷积层的局部感知,在全连接层中,每一个输出单元都与所有输入单元相关,通过密集的权值进行连接,因此需要大量的参数.因为卷积层与全连接层内在的本质区别,通常把卷积层的计算加速和全连接层的内存压缩认为是2种不同的任务.这2类计算层之间又是紧密联系的,卷积层为全连接层提供分层的高层特征,全连接层通过分类指导卷积层的高判别力特征提取.在本文中,我们总结与回顾近几年来压缩和加速深度神经网络方面的相关工作,相关算法与解决方案涉及多门学科,包括机器学习、参数优化、计算架构、数据压缩、索引、硬件设计等.

主流的压缩与加速神经网络的方法可以分成5种:1)参数剪枝(parameter pruning);2)参数共享(parameter sharing);3)低秩分解(low-rank decom-position);4)紧性卷积核的设计(designing compact convolutional filters);5)知识蒸馏(knowledge dis-tillation).参数剪枝主要通过设计判断参数重要与否的准则,移除冗余的参数.参数共享主要探索模型参数的冗余性,利用Hash或量化等技术对权值进行压缩.低秩分解利用矩阵或张量分解技术估计并分解深度模型中的原始卷积核.紧性卷积核的设计主要通过设计特殊的结构化卷积核或紧性卷积计算单元,减少模型的存储与计算复杂度.知识蒸馏主要利用大型网络的知识,并将其知识迁移到紧性蒸馏的模型中.

如表1所示,简要介绍了上述主流的5种压缩与加速深度神经网络的方法,一般来说,除了紧性卷积核的设计只能用于卷积核外,剩余的4种均能应用于卷积层和全连接层.低秩分解与紧性卷积核的设计能够在CPU/GPU下简单实现端对端(end-to-end)训练,然而参数共享、参数剪枝需要多步或逐层完成压缩与加速任务.关于训练过程中是否需要重新开始训练还是依赖于预训练模型的问题上,参数共享、低秩分解都较为灵活有效,既能适应重新训练也能适应于预训练模型.然而紧性卷积核的设计和知识蒸馏只能支持重新训练,另外参数剪枝只能依赖于预训练模型.从上述方法能否相应组合方面,紧性卷积核的设计方法和知识蒸馏还不能结合其他方法,参数剪枝与参数共享或低秩分解方法结合甚密,通过2种方法的互相融合,能够在一定程度进一步压缩与加速深度网络.

在本文中,主要集中分析在图像处理中的卷积神经网络的压缩与加速,特别是对于图像分类任务.本文先回顾近年来较为经典的深度神经网络,然后详细介绍上述压缩与加速方法、相应的特性及缺点,进而分析深度模型压缩与加速的评测标准、相应数据集及性能表现,最后总结并讨论不同压缩与加速方法的选择问题,并分析了未来发展趋势.

Table 1 Summarization of Different Methods for DNN Compression and Acceleration表1 不同深度神经网络压缩与加速方法总结

1 深度神经网络相关概念与回顾

在本节中,我们主要介绍了深度神经网络的发展历史,以及深度神经网络中前馈网络(feed forward networks)代表卷积神经网络的核心组件和经典网络模型.

1.1 深度神经网络发展历史

虽然20世纪40年代神经网络已经被提出,但一直没能得到实践应用,直到20世纪90年代,LeCun等人提出了LeNet模型[14],并成功地将该模型用于手写体字符识别任务上,后续在ATM机上得到了广泛的应用.在此之后神经网络发展遇到瓶颈,直到2006年,Hinton等人[15]提出了一种有效的训练深度神经网络的策略,不仅提升了模型的准确率,同时还极大地推动了非监督学习的发展.到了2010之后,深度神经网络得到了广泛的应用,特别是2011年微软公司的语音识别系统[2]突破了传统语音识别技术及2012年AlexNet[3]的问世给整个图像识别领域带来了巨大突破,也使得深度神经网络席卷整个人工智能领域埋下伏笔.如表2所示,简要总结了深度学习的重要发展里程碑.

Table 2 The Development History of DNN表2 深度神经网络的发展历史

深度学习技术之所以能够在近几年来取得巨大突破,主要有2个原因:

1) 硬件设备计算能力的增强.半导体设备和计算架构的提高(如GPU),大大缩短网络计算的时间开销,包括训练(training)过程与推测过程(inference).

2) 训练数据集的不断扩充.如图1所示,表示了不同时期公共数据集的数据规模.从图1中可以看出,2010年之前数据量规模停留在万级及以下,到了2010年之后大规模数据集的公开与使用,特别是大规模图像识别比赛(ILSVRC)[17]的成功举办,ImageNet数据集[18]得到广泛的使用,给深度神经网络提高了数据支持,也使得拥有百万级以上参数的深度网络训练不易出现过拟合问题(overfitting).

Fig.1 The number of public training dataset over different years[16]图1 不同时期公共训练数据集的规模

结合以上2个原因,深度学习在各个人工智能领域大放异彩,特别在图像识别领域表现更加出众.如图2所示,描述了在ILSVRC上的最好识别性能及所用的网络模型对比.一方面,在2012年以前,所用的模型采用浅层网络表示(如支持向量机(SVMs)),获得25%及以上的识别误差率;2012年,AlexNet利用深度学习技术将分类错误率较原来的浅层模型降低了近10%.自此以后,深度学习技术成为提高性能的主流与趋势.特别是2016年,何凯明等人[13]提出了ResNet,获得了3.57%的top-5分类错误率(errtop-5),成功超越了人类所能达到的5%的分类错误率.另一方面,随着分类错误率逐年降低,深度网络模型的层数越来越深,模型存储量大、计算复杂度高也越发明显,这触发了工业界及学术界对深度网络压缩与加速的关注与研究.

Fig.2 Comparison of the best performance over different years using various CNNs in ILSVRC[9]图2 不同年份ILSVRC上的最好性能及所用的网络模型对比

1.2 卷积神经网络的相关术语及核心部件

Fig.3 Convolutional neural networks图3 卷积神经网络

卷积神经网络由多个卷积层(CONV layers)和全连接层(FC layers)组合而成.如图3所示,在该网络卷积层中,每层产生了对输入图像的高层抽象表示的结果,称之为特征图(feature map,Fmap).底层的特征图能够获得输入图像的细节信息(如边缘、角点、颜色等),越往顶层越能获得输入图像的整体信息(如形状、轮廓等),正是卷积神经网络利用了此分层特性,取得了很好的性能提升.

如图4所示,显示了每个卷积层包含了复杂的高维卷积计算.输入中包含了一些列的2-D输入特征图(input feature maps,IFmaps),其中每一个特征图称之为通道(channel).每一个输出特征图(output feature maps,OFmap)是由所有的输入特征图与3-D卷积核/滤波(filter)卷积计算的结果,每一个3-D卷积核形成一个输出特征图.

C,H,W,D,N,H′ and W′ are defined in Equation (1).Fig.4 High-dimension convolutional operator图4 高维卷积计算

具体地,计算过程可以用表示为

(1)

在全连接层中,不像卷积层的权值共享,全连接层的输入与输出之间存在密集连接(dense connec-tion),需要保存大量训练参数.其中核心的计算单元是矩阵与矩阵之间的乘法,具体可由式表示:

Z=WX,

(2)

其中,X∈d×b为输入矩阵,W∈h×d为权值,Z∈h×b为输出矩阵.一般情况下,若将全连接层中的权值变量变换成卷积核空间4阶张量形式,并将空间维度设为1×1,那么全连接的矩阵计算可以转换成卷积计算.

另外,在卷积层与全连接层中还存在许多可选层及一些其他重要操作,如非线性变换(non-linearity)、池化(pooling)、正则化(normalization)等,对于网络性能的提升起到非常重要的作用.

1.3 经典的深度神经网络模型

在过去的几十年里,已经提出了很多经典的深度神经网络模型,每个模型拥有不同的网络结构,主要体现在层数、层类型、层形状(即卷积核大小、通道及滤波个数)、层内连接等.在本节中,我们回顾近几年在ImageNet竞赛上使用的冠军模型以及手写体字符识别网络模型LeNet.这些预训练模型(pre-trained model)都已公开,模型的相关参数与总结如表3所示.第1行的top-1分类错误率(errtop-1)和第2行的top-5分类错误率errtop-5均为ImageNet竞赛上常用的2个分类评价指标,所有数值均采用简单的裁剪验证集(validation dataset)图像中间部分作为输入,得到分类的结果.本文将对LeNet[14],AlexNet[3],VGGNet[12],GoogLeNet[22]和ResNet[13]进行介绍.

1) LeNet[14].在1998年LeNet作为最早使用的卷积神经网络之一,被LeCun等人提出用于识别手写体字符.作为经典的版本——LeNet-5包含了2个卷积层和2个全连接层.每1层的卷积计算都使用了5×5的空间维度,第1层使用了20个3-D卷积核,第2层使用50个卷积核.每个卷积之后加入Sigmoid非线性变换作为激活函数,然后接着使用2×2的平均池化(average pooling)降采样特征图.整个网络分类1张图像总共需要6万个参数、34.1万浮点型计算次数.LeNet是第1个被成功应用的卷积神经网络,它被广泛使用在ATM机上,应用于支票存款任务中识别手写体字符.

2) AlexNet[3].它是ImageNet竞赛上第1个利用深度学习获得冠军的卷积神经网络,同时该模型也为后续的深度学习的广泛应用奠定坚实的基础.该模型由5个卷积层和3个全连接层组成.第1个卷积层使用了96个维度为11×11×3的3-D卷积核,第2层使用了256个维度为5×5×96的3-D卷积核,后续的卷积层使用了空间维度为3×3的卷积核.AlexNet引入了多种加速训练与提高模型分类准确率的技巧,如:①引入了ReLU非线性激活函数[20],代替原始的Sigmoid或tahn非线性激活[21].②在每个最大池化(max pooling)之前加入局部响应正则化(local response normalization,LRN),用于统一输出激活的数据分布.在AlexNet中,LRN应用于第1,2和5卷积层.③利用2个GPU加速训练.④通过扩充训练样本数和引入Dropout方法,防止模型训练过程过拟合.AlexNet在ImageNet 验证集上获得了42.3% top-1分类错误率和19.1% top-5分类错误率,且需要0.61亿个参数、7.29亿浮点型计算次数处理尺寸大小为227×227的彩色图像.

Table 3 Summary of Popular DNNs[19]表3 常用深度神经网络的总结[19]

3) VGGNet[12].它取得了2014年ImageNet竞赛的分类项目第2名、定位项目第1名.VGGNet拥有强拓展性,体现在由很强的泛化能力、稳定的卷积特征和较好的表达能力.具体而言,VGGNet有2种形式,即VGG-16和VGG-19.VGG-16由13个卷积层和3个全连接层构成的16层网络.不同于AlexNet,VGG-16利用多个小空间维度的卷积核(例如3×3)代替原始大的卷积核(例如5×5),获得相同的接受域(receptive fields).在VGG-16中,所有的卷积层都采用了空间维度为3×3的卷积核.为此,VGG-16分类1张大小为224×224的彩色图像,需要1.38亿个参数、156亿浮点型计算次数.虽然VGG-19比VGG-16低0.1% top-5分类错误率,但需要1.27倍浮点型计算次数于VGG-16.

4) GoogLeNet[22].它取得了2014年ImageNet竞赛的分类项目的冠军.Inception拥有多种版本,包括Inception-V1[22],Inception-V3[23]和Inception-V4[24]等,其中Inception-V1也称为GoogLeNet.我们详细介绍Inception-V1,它拥有22层深的网络结构,引入了核心组件——Inception module.如图5所示,展示了Inception module主要组成部件,它由平行连接(parallel connection)构成.在每个平行连接中,使用了不同空间维度的卷积核,即1×1,3×3,5×5,并在每个卷积后紧跟3×3最大池化(其中一个1×1卷积核除外),所有卷积核输出结果全串在一起(concatenate)构成该模块的输出.GoogLeNet利用3种不同的尺度卷积和最大池化,增加网络对不同尺度的适应性,同时可以让网络的深度和宽度高效率地扩充,提升准确率且不会过拟合.22层的GoogLeNet包括了3个卷积层、9个Inception层(每个Inception层拥有2层深的卷积层)和1个全连接层.由于采用了全局平均池化[23](global average pooling, GAP),并采用1个全连接层取代传统的3个全连接层,大大缩小了模型的存储空间.对于分类一张224×224的彩色图像,GoogLeNet需要700万个参数、14亿浮点型计算次数.

Fig.5 Inception module in GoogLeNet图5 GoogLeNet的Inception模块

5) ResNet[13].它是首次在ImageNet竞赛上超过人类所能达到的识别精度(即低于5% top-5分类错误率).ResNet能够克服训练过程中梯度消失问题,即在反向传播(back-propagation)中梯度不断衰减,影响了网络底层的权值更新能力.如图6所示,ResNet的核心组件是残差块(residual block),每个残差块中引入了快捷模块(shortcut module),该模块包含了恒等连接或线性投影连接,并且学习残差映射(F(x)=H(x)-Wsx),而不是直接学习权值层(weight layers)函数F(x).同样地,ResNet使用了1×1卷积核减少参数个数,并在每个卷积后加入批量正则化[22](batch normalization,BN).ResNet有很多种结构表现形式,以ResNet-50为例,它包含了1个卷积层,紧接着16个残差块(每个残差块拥有3层深的卷积层),及1个全连接层.对于分类一张224×224的彩色图像,ResNet-50需要0.25亿个参数和39亿浮点型计算次数.

Fig.6 Residual block in ResNet图6 ResNet的残差块

如表3和图2所示,随着模型的深度和宽度的增加,深度网络取得更好的性能提升,但是卷积层的高度复杂的浮点计算及全连接层的高内存存储,严重阻碍深度模型应用于移动设备端.因此,压缩与加速深度神经网络将愈发重要.

2 深度神经网络压缩与加速算法

在本节中,我们主要介绍了主流深度神经网络压缩与加速算法,以及相关算法的优缺点.

2.1 基于参数剪枝的深度神经网络压缩与加速

网络/参数剪枝是通过对已有的训练好的深度网络模型移除冗余的、信息量少的权值,从而减少网络模型的参数,进而加速模型的计算和压缩模型的存储空间.不仅如此,通过剪枝网络,能防止模型过拟合.以是否一次性删除整个节点或滤波为依据,参数剪枝工作可细分成非结构化剪枝和结构化剪枝.非结构化剪枝考虑每个滤波的每个元素,删除滤波中元素为0的参数,而结构化剪枝直接考虑删除整个滤波结构化信息.

早在20世纪末,LeCun等人[27]提出了最优化脑损失(optimal brain damage)算法,大大稀疏化多层网络的系数,同时保证模型预测精度依然处于零损失或最小量损失状态.其实这种学习方式模仿了哺乳动物的生物学习过程,通过寻找最小激活的突触链接,然后在突触删减(synaptic pruning)过程中大大减少连接个数.利用相似的思想,Hassibi 和Stork[28]提出了最优化脑手术(optimal brain surgeon)剪枝策略,利用反向传播计算权值的二阶偏导信息(hessian矩阵),同时利用此矩阵构建每个权值的显著性得分,从而删除低显著性的权值.不同于最优化脑手术剪枝策略,Srinivas等人[29]提出了不依赖于训练数据(data-free pruning)和反向传播,直接构建并排序权重的显著性矩阵,删除不显著冗余的节点.由于不依赖于训练数据及后向传播计算梯度信息,因此该网络剪枝过程较为快速.韩松等人[30-31]提出了一种基于低值连接的删除策略(low-weight con-nection pruning),该剪枝方法包括3个阶段,即训练连接、删除连接、重训练权值.第1阶段通过正常训练,学习重要的连接;第2阶段通过计算权值矩阵的范数,删除节点权重的范数值小于指定的阈值的连接,将原始的密集网络(dense network)变成稀疏网络;第3阶段通过重新训练稀疏网络,恢复网络的识别精度.以上剪枝方法通常引入非结构化的稀疏连接,在计算过程中会引起不规则的内存获取,相反会影响网络的计算效率.

近几年,基于结构化剪枝的深度网络的压缩方法陆续被提出,克服了非结构化稀疏连接导致的无法加速问题[27-31].其核心思想依靠滤波显著性准则(即鉴定最不重要的滤波的准则),从而直接删除显著性滤波,加速网络的计算.2016年,Lebedev等人[32]提出在传统的深度模型的损失函数中加入结构化的稀疏项,利用随机梯度下降法学习结构化稀疏的损失函数,并将小于给定阈值的滤波赋值为0,从而测试阶段直接删除值为0的整个卷积滤波.温伟等人[33]通过对深度神经网络的滤波、通道、滤波形状、网络层数(filters, channels, filter shapes, layer depth)的正则化限制加入到损失函数中,利用结构化稀疏学习的方式,学习结构化的卷积滤波.Zhou等人[34]将结构化稀疏的限制加入目标函数中,并利用前向后项分裂(forward-backward splitting)方法解决结构稀疏化限制的优化问题,并在训练过程中直接决定网络节点的个数与冗余的节点.另外,近年来,直接测量滤波的范数值直接判断滤波的显著性也相继被提出[35],例如:直接删除给定当前层最小L1范数的滤波,即移除相应的特征图(feature map),然后下一层的卷积滤波的通道数也相应地减少,最后通过重训练的方式提高删减后模型的识别精度.由于大量的ReLU非线性激活函数存在于主流的深度网络中,使得输出特征图高度稀疏化,Hu等人[36]利用此特点,计算每个滤波所对应输出特征图的非零比例,作为判断滤波重要与否的标准.NVIDIA公司Molchanov等人[37]提出一种基于全局搜索显著性滤波的策略,对需要删除的滤波用0值代替,并对目标函数进行泰勒公式展开(taylor expansion),判断使目标函数变换最小的滤波为显著滤波.通过卷积计算方式,可以建立当前层的滤波与下一层的卷积滤波的输入通道存在一一对应关系,利用此特点Luo等人[38]探索下一层卷积核的输入通道重要性,代替直接考虑当前层滤波,并建立一个有效的通道选择优化函数,从而删除冗余的通道以及相应的当前层的滤波.以上基于结构化剪枝的深度网络的压缩方法,通过删除卷积层的整个滤波,没有引入其他额外的数据类型存储,从而直接压缩网络的同时加速整个网络的计算.

Table 4 Comparison of Methods to Reduce Precision on AlexNet[19]表4 不同量化方法在AlexNet上的对比[19]

Notes: “*” denotes the method is not applied to first and/or last layers, and “↑” denotes increase.

参数剪枝的缺点在于,简单利用非结构化剪枝,无法加速稀疏化矩阵计算.虽然近年来,相关软件[39]与硬件[40]已被利用进行加速计算,但依靠软硬件的非结构化剪枝方案还无法在所有深度学习框架下使用,另外硬件的依赖性会使得模型的使用成本提高.结构化剪枝不依赖软硬件的支持,且能很好地嵌入目前主流的深度学习框架,但逐层固定的剪枝方式(layer-by-layer fixed manner)导致了网络压缩的低自适应能力、效率和效果.此外,上述的剪枝策略需要手动判断每层的敏感性,因此需要大量的精力分析及逐层微调(fine-tuning).

2.2 基于参数共享的深度神经网络压缩与加速

参数共享是通过设计一种映射将多个参数共享同一个数据.近年来,量化作为参数共享的最直接表现形式,得到广泛的应用.此外,Hash函数和结构化线性映射也可作为参数共享的表现形式.

参数量化压缩与加速深度网络模型主要的核心思想是利用较低的位(bit)代替原始32 b浮点型的参数(也可记为全精度权值(full-precision weight)).龚云超等人[41]及Wu等人[42]利用向量量化的技术,在参数空间内对网络中的权值进行量化.近年来,利用低比特位的量化被提出用于加速与压缩深度神经网络.Gupta等人[43]将全精度浮点型参数量化到16 b固定长度表示,并在训练过程中使用随机约束(stochastic rounding)技术,从而缩减网络存储和浮点计算次数.使用动态固定点(dynamic fixed point)量化,在量化AlexNet网络时,几乎可以做到无损压缩.例如,Ma等人[44]将权值和激活分别量化到8 b和10 b,且没有利用微调权值.随后Gysel等人[45]利用微调,将权值和激活全部量化到8 b.

为了更大程度地缩减内存和浮点计算次数,对网络参数进行二值表示已被大量提出.其主要思想是在模型训练过程中直接学习二值权值或激活.BinaryConnect(BC)[46]通过直接量化权值为-1或1,只需要加和减计算,减少了卷积计算,但因激活为全精度,无法大幅度加速网络计算.为此,通过同时量化权值和激活为-1和1,Courbariaux等人[47]提出了BNN,将原始的卷积计算变成Bitcount和XNOR,大幅度加速和压缩深度网络.但在压缩和加速深度网络时(如AlexNet),分类精度大大降低.为了减少精度的丢失,Rastegari等人[48]分别提出了BWN和XNOR-Net引入了尺度因子(scale factor),用于缩小量化误差,并保留第一层和最后一层的权值和输入为32 b的浮点型.同时,改变卷积和正则化的顺序,即先执行正则化、后卷积,减少了激活的动态幅度范围.伴随着这些改变,BWN和XNOR-Net分别获得了相对于原始AlexNet 0.8%和11%的分类错误率增加.在近期的工作中[49-50],通过增加激活的位数(大于1),并探索不同的低比特权值与激活的组合量化全精度权值和激活,提高量化后的网络在ImageNet数据集分类上的效果.但是在训练这些量化网络中,会出现梯度不匹配问题.Cai等人[51]通过分析权值和激活的分布情况,设计一种新的半波高斯量化器(half-wave Gaussian quantizer)及其BP过程中不同的梯度近似,提出了HWGQ-Net,有效地解决了训练过程中梯度不匹配问题.

由于权值近似分布于均值为0的高斯分布,即W~N(0,σ2),进一步考虑0作为量化后的值,可能减少量化误差.基于此思想,三元权值网络(ternary weight nets,TWN)[52]将全精度权值网络量化到三元网络(即-w,0和w),其中w通过统计估计得到的量化值.通过改变对称的w,训练的三元量化[53](trained ternary quantization,TTQ)引入了不同的量化因子(即-w1,0和w2),且通过训练得到该因子,在量化AlexNet时分类错误率只增加了0.6%.如表4所示,列出了以上量化网络的性能比较及相应的量化比特数比较结果.

对于传统网络(如AlexNet和VGG-16),全连接层的参数存储占整个网络模型的95%以上,所以探索全连接层参数冗余性将变得异常重要.利用Hash函数和结构化线性映射相继提出,可用于实现全连接层的参数共享,大大减低模型的内存开销.Chen等人[54]提出了HashNet模型,利用2个低耗的Hash函数对不同的网络参数映射到相同Hash桶中,实现参数共享.Cheng等人[55]提出基于一种简单有效的循环投影方法,即利用存储量极小的循环矩阵代替原始矩阵,同时使用快速傅里叶变换(fast Fourier transform,FFT)加速矩阵的乘积计算.另外,Yang等人[56]引入了新的Adaptive Fastfood变换,重新定义了全连接层的矩阵与向量之间的乘积计算,减少了参数量和计算量.

量化权值,特别是二值化网络,存在以下缺点:1)对于压缩与加速大的深度网络模型(如Goog-LeNet和ResNet),存在分类精度丢失严重现象;2)现有方法只是采用简单地考虑矩阵近似,忽略了二值化机制对于整个网络训练与精度损失的影响;3)对于训练大型二值网络,缺乏收敛性的理论验证,特别是对于同时量化权值和激活的二值化网络(如XNOR-Net,BNN等).对于限制于全连接层的参数共享方法,如何泛化到卷积层成为一个难题.此外,结构化矩阵限制可能引起模型偏差,造成精度的丢失.

2.3 基于低秩分解的深度神经网络压缩与加速

基于低秩分解的深度神经网络压缩与加速的核心思想是利用矩阵或张量分解技术估计并分解深度模型中的原始卷积核.卷积计算是整个卷积神经网络中计算复杂度最高的计算操作,通过分解4D卷积核张量,可以有效地减少模型内部的冗余性.此外对于2D的全连接层矩阵参数,同样可以利用低秩分解技术进行处理.但由于卷积层与全连接层的分解方式不同,本文分别从卷积层和全连接层2个不同角度回顾与分析低秩分解技术在深度神经网络中的应用.

在2013年,Denil等人[57]从理论上利用低秩分解的技术并分析了深度神经网络存在大量的冗余信息,开创了基于低秩分解的深度网络模型压缩与加速的新思路.如图7所示,展示了主流的张量分解后卷积计算.Jaderberg等人[58]利用张量的低秩分解技术,将原始的网络参数分解成2个小的卷积核.利用相同简单的策略,Denton等人[59]先寻找对卷积层参数的低秩近似,然后通过微调的方式恢复模型的识别精度.此外,利用经典的CP分解[60],将原始的张量参数分解成3个秩为1的小矩阵.相似地,利用Tucker分解[61],将原始的张量分解成3个小的张量的乘积.Tai等人[62]提出了新的低秩分解张量算法,同时也提出了引入批量正则化,从头开始训练有低秩限制的卷积神经网络.Ioannou等人[63]利用卷积核的低秩表示,代替分解预训练的卷积核参数,并设计了一种有效的权值初始化方法,从头开始训练计算有效的卷积神经网络.同样地,代替直接分解预训练的模型参数,温伟等人[64]从训练的角度探讨如何更有效地聚集更多参数于低秩空间上,提出了新的强力正则化项(force regularization),迫使更多的卷积核分布于更为低秩空间中.以上低秩分解卷积核的方法,虽然减少了卷积核的冗余性,即考虑了卷积神经网络内部结构的冗余性,但全盘接受了视觉输入的全部,极大地影响了模型加速比.为此,林绍辉等人[65]提出了ESPACE卷积计算加速框架,考虑了视觉输入的冗余性,即从输入计算空间和通道冗余性2方面移除低判别性和显著性的信息.

K, (R3, R4) and R are the corresponding rank of low-rank decomposition, Tucker-2 decomposition and CP decomposition respectively.Fig.7 Convolution with several low-rank factors图7 拥有若干个低秩因子的卷积计算

对于全连接层特定的2D矩阵形式,虽然可以通过转变2D矩阵计算为1×1的卷积计算,从而利用上述低秩分解技术进行应用,但对于特定的全连接层也存在相关低秩分解方法.Denil等人[57]利用了低秩分解方法减少了深度神经网络中的动态参数个数.林绍辉等人[66]分析了直接对层内参数低秩分解压缩无法获得高精度分类效果的缺点,提出考虑层间的各种非线性关系,参数层间的联合优化,代替单层的优化,构建全局误差最小化优化方案.

基于低秩分解的深度网络模型压缩算法,在特定场景下取得良好的效果,但增加了模型原有的层数,极易在训练过程中造成梯度消失的问题,从而影响压缩后网络的精度恢复.另外,逐层低秩分解优化参数,无法从全局进行压缩,延长了离线分解时间开销.

2.4 基于紧性卷积核的深度神经网络压缩与加速

对深度网络模型的卷积核使用紧性的滤波直接替代,将有效地压缩深度网络.基于该思想,直接将原始较大的滤波大小(如5×5,3×3)分解成2个1×1卷积滤波,大大加速了网络的计算同时获得了较高的目标识别性能.

2016年,SqueezeNet[67]的提出是将原始的卷积结构替换成为Fire Module,即包括Squeeze层和Expand层.在Squeeze层将3×3的卷积滤波替换成1×1的卷积滤波,并在Expand层中加入1×1和3×3的卷积滤波,同时减少3×3的卷积滤波个数,减少池化(pooling),从而简化网络复杂度,降低卷积网络模型参数的数量,同时也达到AlexNet识别精度.最终的模型参数降低了50倍,大大压缩了深度网络模型.另外,Google公司Howard等人[68]提出了MobileNets,利用计算和存储更小的深度分割卷积(depthwise separable convolution)替代原始的标准卷积计算.Zhang等人[69]提出ShuffleNet,利用组卷积(group convolution)和通道重排(channel shuffle)两个操作设计卷积神经网络模型,从而减少模型使用的参数.一般情况下,使用组卷积会导致信息流通不当,通过通道重排改变通道的序列,得到与原始卷积相似的计算结果.Chollet[70]提出Xception网络结构,在原始Inception-V3的基础上引入深度分割卷积计算,不同于原始MobileNet中的深度分割卷积,Xception先进行1×1的点卷积计算(point convolution),然后再逐通道卷积,提高了模型的计算效率.在同参数量情况下,分类效果优于Inception-V3.

基于紧性卷积核的深度神经网络压缩与加速采用了特定的卷积核的设计或新卷积计算方式,大大压缩神经网络模型或加速了卷积计算.但压缩与加速方法的扩展性和结合性较弱,即较难在紧性卷积核的深度神经网络中利用不同压缩或加速技术进一步提高模型使用效率.另外,跟原始模型相比,基于紧性卷积核设计的深度神经网络得到的特征普适性及泛化性较弱.

2.5 基于知识蒸馏的深度神经网络压缩与加速

知识蒸馏(KD)的基本思想是通过软 Softmax变换学习教师输出的类别分布,并将大型教师模型(teacher model)的知识精炼为较小的模型.如图8所示,展示了简单的知识蒸馏的流程.2006年,Buciluǎ等人[71]首先提出利用知识迁移(knowledge transfer,KT)来压缩模型.他们通过集成强分类器标注的伪数据(pseudo-data)训练了一个压缩模型,并重现了原大型网络的输出结果,然而他们的工作仅限于浅层网络.近年来,知识蒸馏[72]提出了可以将深度和宽度的网络压缩为浅层模型,该压缩模型模仿了复杂模型所能实现的功能.

Fig.8 Knowledge distillation图8 知识蒸馏

Hinton等人[73]提出了知识蒸馏的压缩框架,通过软化教师网络输出指导和惩罚学生网络(student network).该框架将集成的深度网络压缩成为相同深度的学生网络.为此,利用教师软输出的结果作为标签,训练压缩学生网络.Romero等人[74]提出了基于知识蒸馏的FitNet,通过训练窄且深网络(学生网络),压缩宽且浅网络(教师网络).

近几年,知识蒸馏也得到了改进和拓展,例如:Balan等人[75]通过在线训练的方式学习带有参数的学生网络近似蒙特卡洛(Monte Carlo)教师网络.不同于原来的方法,该方法使用软标签作为教师网络知识的表达,代替原来的教师网络的软输出.Luo等人[76]利用高层隐含层神经元的输出作为知识,它比使用标签概率作为知识能保留更多的知识.Zagoruyko等人[77]提出了注意力迁移(attention transfer,AT),通过迁移注意力图(attention maps),松弛了FitNet的假设条件.

虽然基于知识蒸馏的深度神经网络压缩与加速方法能使深层模型细小化,同时大大减少了计算开销,但是依然存在2个缺点:1)只能用于具有 Softmax 损失函数分类任务,这阻碍了其应用;2)模型的假设较为严格,以至于其性能可能比不上其他压缩与加速方法.

2.6 其他类型的深度神经网络压缩与加速

在1.3节介绍GoogLeNet时,为了减少全连接层的参数个数,全局均匀池化代替传统的3层全连接层,减少了全连接层的参数.在近几年提出的最新的网络结构中,全局均匀池化方法广泛其中,例如Network in Network(NIN),GoogLeNet,ResNet,ResNeXt[78]等,在很多基准(benchmark)任务中取得了最优的(state-of-the-art)性能.但该类型结构在ImageNet数据集上学习到的特征很难直接迁移到其他任务上.为了解决此问题,Szegedy等人[22]在原始结构的基础上加入了线性层.

此外,基于卷积的快速傅里叶变化[79]和使用Winograd算法[80]的快速卷积计算,大大减少了卷积计算的开销.Zhai等人[81]提出了随机空间采样池化(stochastic spatial sampling pooling),用于加速原始网络中的池化操作.但是这些工作仅仅为了加速深度网络计算,无法达到压缩网络的目的.

3 数据集与已有方法性能

3.1 数据集

在深度神经网络压缩与加速中常见并具有代表性的数据集主要包括MNIST[14],CIFAR-10/100[82],ImageNet[18],如表5所示,罗列了这些数据集的基本统计信息.

Table 5 Comparison of the Widely Used Dataset for DNN Compression and Acceleration表5 常见深度神经网络压缩与加速数据集统计信息

MNIST是用于手写字符分类被广泛使用的数据集.在1998年,该数据集被公开作为字符识别算法评测的公共数据集.在该数据集中,包含了来自10个类别(即手写体数字0~9),像素为28×28的手写体字符灰度图,总计有6万张训练图像和1万张测试图像.LeNet-5作为经典模型在MNIST上分类错误率达到0.9%.MNIST已作为简单且公平的数据集用于评测深度神经网络压缩与加速性能.

CIFAR是用于分类小图像的数据集,它是8千万张 Tiny Image数据集的子集.在2009年,该数据集被公开作为分类小型彩色图像算法评测的公共数据集.CIFAR数据集有2个版本,分别为CIFAR-10和CIFAR-100,包含了像素均为32×32的自然彩色图像.在CIFAR-10数据集中,包含了来自10个互不交叉的类别,总计有5万张训练图像(每类5千张)和1万张测试图像(每类1千张).在CIFAR-100数据集中,包括了100个类别不同的图像,其中5万张训练图像(每类500张)和1万张测试图像(每类100张).在不引入任何数据扩展方法时,经典模型NIN 在CIFAR-10和CIFAR-100分类错误率达到10.41%和35.68%.

ImageNet是一个大尺度图像数据集.2010年首次被提出,并在2012年得到稳定使用.该数据集包含1 000个类别彩色图像,且一般先缩放至像素大小为256×256.不同于以上2种数据集,该数据集的类别标签可用字网络(WordNet)表示,即由主类别标签词表示并包含相同目标的近义词,相当于词汇的分层结构.该数据集总计约有0.13亿张训练图像(每个类别数量在732~1 300之间),10万张测试图像(每类100张)和5万张验证图像(每类50张).由于测试数据集标签未公开,一般情况下,测试该数据集性能时通过验证集上性能作为测试依据.另外,top-1分类错误率和top-5分类错误率是判断ImageNet分类准确率指标.top-1指的是得分最高的类别刚好是标签类别时,分类正确;top-5指的是得分前5的类别中包含正确标签时,分类正确.AlexNet,VGG-16,ResNet-50作为ImageNet数据集上经典的网络模型,分别获得了42.24% top-1分类错误率和19.11% top-5分类错误率、31.66% top-1分类错误率和11.55% top-5分类错误率以及24.64% top-1分类错误率和7.76% top-5分类错误率.

综上所述,MNIST是较为简单的小型数据集,而ImageNet是一个大尺度类别多样的复杂数据集,充满着挑战.另外,对于同一个网络,在不同数据集下表现出不一样的性能,因此判断网络性能时一般需要考虑所采用的数据集.

3.2 评价准则

率失真(rate-distortion)作为评价深度神经网络压缩与加速性能标准,既考虑了模型的压缩与加速比,同时需要计算压缩与加速后的模型分类误差率.为了计算模型的压缩与加速比,我们假设λ和λ*分别为原始模型M和压缩后模型M*所有参数所占的内存开销,那么模型的压缩比Cr可计算为

(3)

相似地,假设γ和γ*分别为原始模型M和压缩后模型M*推测(inference)整个网络的时间,那么模型的加速比Sr可定义为

(4)

关于分类误差率需要根据不同的数据集,如上述所述的数据集中,MNIST和CIFAR只存在top-1分类错误率,而ImageNet有top-1和top-5两种分类错误率.根据数据集不同,选择相应模型性能评价标准.一般情况下,好的深度神经网络压缩与加速方法表现出:压缩与加速后的模型具有相似于原始模型的分类错误率,同时伴随着少量的模型参数和计算复杂度.因此模型的错误率和压缩比(或加速比)需要统一考虑.

目前深度学习框架层出不穷,包括Caffe[83],Tensorflow[84],Torch等.为了公平评测各压缩模型的实际速度,对于深度神经网络压缩与加速领域,采用Caffe作为主流的深度学习框架.

3.3 代表性的深度神经网络压缩与加速方法性能

目前已有工作的实验所用数据集一般是3个数据集:MNIST,Cifar,ImageNet,使用模型包括LeNet-5,AlexNet,VGG-16,ResNet等.下面我们比较代表性深度神经网络压缩与加速方法在不同模型上的压缩与加速效果.

如表6所示,列出了包括剪枝与参数共享在内的压缩与加速方法在LeNet-5上的比较结果.#FLOPs表示浮点型计算次数个数,#Param表示模型中参数的数量,errtop-1↑表示相比较于原始模型,压缩后的模型top-1分类错误率增加值.从整体上看,在该模型上压缩与加速取得了较好的结果.从压缩与加速2方面比较,非结构化剪枝[31]在压缩模型参数上能取得12×更好的结果,而结构化剪枝SSL[33]在加速模型上取得3.62×的结果,基本保证模型不丢失精度.

Table 6 Results of Different DNN Compression and Acceleration on LeNet-5表6 不同压缩与加速方法在LeNet-5上的结果

Note:↑denotes increase.

如表7和表4所示,主要比较了不同压缩与加速方法在AlexNet上的结果.如表7所示,主要比较了不同低秩分解技术在AlexNet上加速效果(除SSL[33]外).从比较结果可以看出,LRA[64]不仅在准确率和加速比高于传统的CPD[60]和TD[61],而且在加速比(4.05×vs.3.13×)上也高于SSL,top-5分类错误率增加几乎一样(1.71% vs.1.66%).如表4所示,主要列出了关于量化网络在AlexNet上的性能比较.原始的权值和激活的保存形式为32 b浮点型,通过用低比特位数量化网络,减少模型存储和计算开销.增加比特位的位数,模型的性能得到提升,量化到8 b几乎无损压缩模型,如利用动态固定点量化[44-45].若只对模型的权值进行量化,保持激活位数不变,BWN[48],TWN[52],TTQ[53]能够较好地控制模型误差增加(除了BC[46]外),但加速效果有限.通过进一步量化激活,特别是量化激活为2 b时,HWGQ-Net[51]取得了top-5分类错误率增加仅为5.2%.

Table 7 Comparison of Different CNN Acceleration Methods on AlexNet[64]表7 不同卷积神经网络加速方法在AlexNet上的对比

Note:↑ denotes increase.

在压缩与加速VGG-16上,如表8所示,展示了部分比较有代表性的剪枝算法的评测结果.为了进一步压缩VGG-16,借鉴NIN[25]全局均匀池化,代替原始模型中的3层全连接层.我们把压缩后的模型记为“X-GAP”,指的是利用“X”方法剪枝完所有的卷积层后,加入GAP进行微调整个压缩后的网络.特别地,VGG-GAP不删除任何卷积层的滤波,反而取得了较高的分类错误率,即top-1分类错误率和top-5分类错误率分别为37.97%和15.65%.另外,ThiNet[38]较其他方法,取得了较低的分类错误率增加(即top-1分类错误率和top-5分类错误率分别增加为1.00%和0.52%),但加速和压缩比相对较低于L1[35],APoZ[36].通过进一步增加剪枝卷积核的数量(记为“ThiNet-T”),取得106.5×压缩比和4.35×加速比,但压缩后模型的top-1分类错误率和top-5分类错误率分别增加了9%和6.47%.

Table 8 Comparison of Parameter Pruning Methods for Compressing and Accelerating VGG-16表8 参数剪枝方法在压缩与加速VGG-16上的对比

Note:↑denotes increase.

如表9所示,展示了主流的二值量化方法在ImageNet数据集上压缩与加速ResNet-18的比较结果.全精度的ResNet-18能达到30.7% top-1分类错误率及10.8% top-5分类错误率.虽然BWN[48]

Table 9 Results of Binary Network on ImageNet for Compressing ResNet-18表9 二值网络在ImageNet上压缩ResNet-18的结果

Note:↑ denotes increase.

和DeReFa-Net[49]取得较好的分类性能,但它们分别使用了全精度的激活和4 b的激活.若同时二值化权值和激活,计算卷积时,只需要bitcount和XNOR计算,大大提高卷积计算效率,但降低了模型的分类效果,例如BNN[47]和XNOR-Net[48]分别增加了27.1%和18.1%的top-1分类错误率.

如表10所示,比较MobileNet[68]和ShuffleNet[69]在ImageNet上性能比较结果.aMobileNet-224指的是在基准模型框架下(即1 MobileNet-224),以a倍缩放基准结构的每层卷积核滤波个数;ShuffleNetb×,g=c指的是在组的个数为c的情况下,以b倍缩放基准结构(即ShuffleNet 1×)的每层卷积核滤波个数.通过不同层次的浮点型计算复杂度对比结果,可以明显得出ShuffleNet的性能优于MobileNet.特别值得注意的是,在小的浮点型计算复杂度情况下(如0.4亿浮点型计算次数),ShuffleNet取得了更好的分类结果,即高于相同复杂度等级的MobileNet 6.7%分类错误率.

Table 10 Comparison of MobileNet and ShuffleNet on ImageNet Classification[69]表10 MobileNet和ShuffleNet在ImageNet分类上比较[69]

Note:↓ denotes decrease.

4 讨论:压缩与加速方法选择

在第2节中,我们回顾与总结深度神经网络压缩与加速算法,但如何选择不同的压缩与加速算法成为一个难题.为此,在本节中,我们将进行详细讨论选择深度模型压缩与加速策略.

事实上,上述介绍的5种主流的深度神经网络压缩与加速方法各有优缺点,也没有固定和可量化的准则来判断哪种方法是最优的.所以压缩与加速方法的选择依赖于不同的任务和需要.总结出压缩与加速方法选择的6条意见:

1) 对于在线计算内存存储有限的应用场景或设备,可以选择参数共享和参数剪枝方法,特别是二值量化权值和激活、结构化剪枝.其他方法虽然能够有效的压缩模型中的权值参数,但无法减小计算中隐藏的内存大小(如特征图).

2) 如果在应用中用到的紧性模型需要利用预训练模型,那么参数剪枝、参数共享以及低秩分解将成为首要考虑的方法.相反地,若不需要借助预训练模型,则可以考虑紧性滤波设计及知识蒸馏方法.

3) 若需要一次性端对端训练得到压缩与加速后模型,可以利用基于紧性滤波设计的深度神经网络压缩与加速方法.

4) 一般情况下,参数剪枝,特别是非结构化剪枝,能大大压缩模型大小,且不容易丢失分类精度.对于需要稳定的模型分类的应用,非结构化剪枝成为首要选择.

5) 若采用的数据集较小时,可以考虑知识蒸馏方法.对于小样本的数据集,学生网络能够很好地迁移教师模型的知识,提高学生网络的判别性.

6) 主流的5个深度神经网络压缩与加速算法相互之间是正交的,可以结合不同技术进行进一步的压缩与加速.如:韩松等人[30]结合了参数剪枝和参数共享;温伟等人[64]以及Alvarez等人[85]结合了参数剪枝和低秩分解.此外对于特定的应用场景,如目标检测,可以对卷积层和全连接层使用不同的压缩与加速技术分别处理.

5 未来发展趋势

就目前研究成果而言,深度神经网络压缩与加速还处于早期阶段,压缩与加速方法本身性能还有待提高,合理压缩与加速评价标准还需完善,为深入地研究提供帮助.

合理的性能评价标准的建立.虽然率失真率能同时考虑压缩或加速、分类性能分布情况,但不同压缩与加速方法无法统一到同一指标下,即同一压缩与加速率下判断分类性能的优劣,或同一分类性能下判断压缩与加速比.在后续的评测标准中,特别对不同压缩与加速方法的合理评价将得到补充和完善.

压缩与加速的模型多样性得到推广.目前深度神经网络压缩与加速的模型多使用卷积神经网络,这肯定了卷积神经网络强大的特征表示能力及应用覆盖面.除卷积神经网络外,还存在大量其他不同结构的网络,如递归神经网络(recurrent neural network,RNN)、长短期记忆网络(long short-term memory,LSTM),广泛应用于人工智能领域.在未来一段时间内,对于递归神经网络、长短期记忆网络等不同于卷积神经网络结构的网络,是否可以使用上述介绍的压缩与加速方法进行处理,这将有待于研究.

更多深度神经网络压缩与加速技术嵌入终端设备,实现实际应用落地.随着深度神经网络压缩与加速方法的快速推进与发展,对于分类任务的压缩与加速方面已取得较大进步,但对于其他视觉任务较少涉及.设计基于视觉任务(如目标检测、目标跟踪、图像分割等)为一体的深度神经网络压缩与加速,将成为深度神经网络压缩与加速方法真正植入智能终端设备,实现实际应用落地的研究热点.

6 总 结

本文首先描述了深度神经网络压缩与加速技术的研究背景;然后对深度神经网络压缩与加速相关代表方法进行详细梳理与总结;其次回顾了目前主流压缩与加速算法所使用的数据集、评价准则及性能评估;最后讨论了相关深度神经网络压缩与加速算法的选择问题,并分析了未来发展趋势.随着深度神经网络压缩研究的不断深入,希望本文能给当前及未来的研究提供一些帮助.

猜你喜欢
错误率剪枝权值
一种融合时间权值和用户行为序列的电影推荐模型
人到晚年宜“剪枝”
基于5G MR实现Massive MIMO权值智能寻优的技术方案研究
基于YOLOv4-Tiny模型剪枝算法
基于激活-熵的分层迭代剪枝策略的CNN模型压缩
一种基于互连测试的综合优化算法∗
小学生分数计算高错误率成因及对策
程序属性的检测与程序属性的分类
正视错误,寻求策略
剪枝