APP下载

一种基于连接敏感度的CNN初始化剪枝方法

2020-11-12张瑞琰安军社姜秀杰

计算机应用与软件 2020年11期
关键词:剪枝精简网络结构

张瑞琰 安军社 姜秀杰

1(中国科学院国家空间科学中心复杂航天系统电子信息技术重点实验室 北京 100190) 2(中国科学院大学 北京 100049)

0 引 言

深度卷积神经网络(DCNN)在图像分类[1]、图像检测[2]和视频跟踪[3]等领域有着广泛应用。然而参数冗余和计算量大的问题限制了其在嵌入式设备的部署。比如一幅227×227的图像在AlexNet网络中训练时,参数量可达122 MB,MFLOPS高达724,其中高参数多集中于全连接层,而高计算量主要集中于卷积层。为解决高参数的问题,多采用卷积层替代全连接层的方法,因此卷积层的优化成为网络压缩关注的热点,这引发了本文对算法优化的探究。

剪枝[4]作为一种简便的网络压缩的有效方法,常用在目标检测[5]和机器翻译[6]等领域。一个标准化剪枝流程分为:预训练、剪枝和微调,如图1(a)所示。预训练即训练一个基准网络,该网络往往是参数量冗余的复杂网络。网络训练完成后,其参数按照规定的某个标准进行排序,以判断这些参数的重要性,将其中不重要的参数进行剪枝处理,得到精简化模型,这一过程即为剪枝。而此时模型精度会有所下降,需要对模型再进行训练达到要求的精度,称作微调。该流程中,多次训练十分消耗资源,因此本文更倾向于在预训练之前实行一次性剪枝[7],获取精简模型,下一步只需以正常步骤训练精简模型即可。如此可节省大量的计算和存储资源,同时也可以加快前向推断速度,该流程如图1(b)所示。

图1 标准化剪枝流程和初始化剪枝流程

传统的剪枝往往是数据驱动剪枝,根据训练好的参数数值来进行排序。而文献[8]指出结构化剪枝[9]的意义在于获得一个优化模型架构,重要的是结构而非权重的值。因此,本文试图寻找一种适合结构化剪枝的方法,得到模型的精简结构。同时考虑到精简模型的结构往往是手工设计好的,譬如PFEC[9]利用敏感度分析的方法确定基准网络每一层的剪枝通道数,其中敏感度分析是控制其他层不变,改变某一层的输出通道数来训练,对于一次性全局剪枝而言,该方法并不完全适用;SFP[10]将卷积层按照相同比例进行“裁剪”(这里的“裁剪”只是将其置0)。基于此,本文认为以相同比例裁剪网络有利于保存网络的层间结构,辅以某种全局的权重重要性标准,可以一次性得到更好的精简化网络结构。考虑到权重的连接敏感度常用来判断某个权重是否重要,因此可将其扩展为整个滤波器的重要性判断标准。

综上,本文提出了一种初始化全局剪枝的方法,综合考虑层间结构和权重连接敏感度。剪枝基于滤波器的粗粒度方式,产生了一个紧凑的精简模型,便于后续训练和部署。

1 相关工作

网络压缩已经是神经网络研究中越来越重要的课题之一。人们为了将人工智能产品(算法)落地化而不得不考虑实际需求,如计算量、资源分配、存储等等。而在网络压缩中,较热门的四个分支为低秩分解、量化、剪枝和轻型网络。

低秩分解[11-12]是将权重矩阵分解为多个小矩阵,如奇异值分解(SVD)和CP分解等;量化主要是对权重和特征图做量化处理,极限量化方式有二值化[13-14]和低比特[15]量化等,其缺点是需要配套的专用硬件来进行卷积运算;轻型网络[16-17]即利用小卷积、分组卷积或残差网络的方式设计网络结构,可大大减少运算量,其缺点是会引入新型处理层。

剪枝即为剔除网络中的冗余连接,原理来源于哺乳动物的发育过程,幼儿时期神经元个数达到巅峰,个体成熟之后不重要的神经元逐渐退化掉。剪枝从方法上分类,可分为结构化剪枝和非结构化剪枝[18]。其中非结构化剪枝是裁剪掉权重的连接,形成稀疏化的卷积核,理论上可以提高运算速度,减少存储空间,但需要配套的稀疏运算库才能实际加速。结构化剪枝则不同,它将卷积的参数矩阵以输出通道为基准划分,每个输出通道代表的三维参数矩阵看作一个滤波器(下文统称filter)。裁剪掉的是若干个filter,因此不需要对现有的软件库和算法框架修改,可直接运行剪枝算法,本文主要讨论结构化剪枝。

剪枝从裁剪过程上分类,可分为初始化剪枝、运行过程中剪枝和训练结束后剪枝。初始化剪枝是在训练的开始阶段,根据数据集和未剪枝的网络结构来进行预先剪枝,多采用自动机器学习方法(AutoML),如强化学习[19]和元学习[20]等方法;运行过程中剪枝是动态剪枝过程[21],在训练过程中随时剔除或添加所需结构,缺点则是运行中的运算量和存储资源比较大;训练结束后剪枝对训练完的参数选择重要的部分留下,再经过微调达到剪枝前的准确度,现在很多较为成熟的方案便是训练结束后剪枝,采用l1[9]、l2[10]范数剪枝或通道相似度[20]方式剪枝。

本文的思路和贡献如下:为寻求对数据集来说冗余尽可能少的网络结构,在数值敏感和结构敏感两个方面对网络进行裁剪。数值敏感是指根据权重值在方差缩放初始化时对损失函数的影响(即连接敏感度)的方法[22],判断出filter中反映前景信息较为突出的特征图,裁剪掉剩余的filter;结构敏感是指以每层特征图通道数的一定比例为基准进行层间结构微调。以通道裁剪率为裁剪条件,提出超参数α以平衡数值敏感和结构敏感的关系,最终得到网络的精简结构。使用初始化剪枝的方式,实现一次性全局裁剪。在训练和部署前向推断时,均可减轻计算量和存储量,同时模型分类的准确度基本保持不变。

2 基于连接敏感度的初始化剪枝

2.1 结构化剪枝

对于一定数量(batch)大小的输入特征图而言,设其大小为N×C×H×W,其中:N为batch的数量;C为通道数;H与W为图像的高和宽,为空间信息。在卷积层中,每层的卷积核大小为Cout×Cin×K×K,Cout为输出图像通道数,Cin为输入通道数,K为卷积核的尺寸,常用大小为3和1,其中Cin×K×K称为一个filter,每个卷积层中有Cout个filter。

结构化剪枝是剪除每个卷积层的若干个filter,该过程如图2所示。浅色部分为裁剪掉的通道数,深色部分为实际参与运算的部分。由于上层剪枝的缘故,输入特征图部分通道被裁剪,因此卷积层的卷积核对应的输入通道数也被裁剪,再加上本卷积层自身有部分filter被剪掉,所以输入特征图的对应通道数也被修剪。

图2 结构化剪枝流程

设剪枝率为r,假设每层均裁剪同样的比例,则对于网络中第i层,裁剪完后的filter数量为Cout×(1-r),可得到输出图像尺度为N×Cout×(1-r)×H×W。那么对于网络中第i+1层,卷积核的大小为Cout×(1-r)×Cin×(1-r)×K×K。这种情况下,设两层的输入图像空间信息不变,则结构化剪枝的参数裁剪率Rparameter和运算量裁剪率Rflop。此时可保证参数量和运算量裁剪比例的一致。

(1-r)2

(1)

(1-r)2

(2)

特别地,对于ResNet残差网络,因为有shortcut层的存在,需要对剪枝的过程稍作修改。这里只考虑常规的两层Residual block模块,如图3所示。引入make_layer层,代表输出通道数相同的若干个相邻的Residual block模块的集合。

图3 ResNet中Residual block模块

其裁剪分为两个并行过程,即weight layer 1剪枝和weight layer 2剪枝。因为剪枝只包含输出通道数的修剪,因此weight layer 1剪枝只涉及该模块内部改变,而不影响整个模块的输入输出。而weight layer 2剪枝时,其filter个数需要和上一个Residual block模块的weight layer 2模块的filter个数相同,因此需要同时考虑make_layer层中的所有weight layer 2模块,为它们求取一个共同的filter个数。

2.2 连接敏感度

这里均只考虑卷积层。令L为损失函数,l为层数,X为输入图像,Y为分类标签,W为原始权重,其中filter的个数为Cl(j∈Cl),W*为剪枝之后的权重,剪枝后的filter的个数为Cn(Cn≤Cl),g为激活函数,S为重要性判断函数,则优化问题为:

minL(Y,g(X;W*{0,1,…,Cn}))s.t.W*=S(W{0,1,…,j,…,Cl})

(3)

在第t次迭代更新时,第l层第i个权重的更新方式为:

(4)

(5)

可视化其特征图也可以看出该统计意义的作用。在VGG16网络初始化阶段筛选出连接敏感度高的若干个filter,保持卷积层的参数不变,将已训练好的网络的第一层卷积层的特征图可视化,如图4所示。虚线左边为剪掉的filter,右边为连接敏感度高的filter。通过对比可得出保存的通道具备注意力(较亮的区域)集中在前景、提取的特征更丰富等特点,更便于后续的高维度特征分辨。

图4 第一层卷积层的特征图可视化

考虑到不同层的梯度值有层间差异,与初始化的标准差值以及每层的梯度量级递减均有关。对VGG网络,本文考虑实行层间的归一化处理,该处理代表了层级分布的凸显性,如式(6)所示。而对于ResNet网络, shortcut层避免了梯度消失,可按需采用归一化处理。

(6)

参照SPF的按比例剪枝的方法,既可以预防凸显性剪枝造成的通道数为0的情况,也可以起到层间调节的辅助作用,对维持原始网络结构有很大帮助。该特性记作结构维持特性,公式如下:

Struc(Fl)=Cl×r

(7)

综合这两个方面,本文给出最终剪枝的裁剪计量标准如下:

S(Fl,j)=α×Promi(Fl,j)+(1-α)×Struc(Fl)

(8)

式中:Promi(Fl,j)为数值参数,Struc(Fl)为结构参数,α为二者占比的调节超参数。

2.3 算法流程

因为数据集数量的庞大,如今的训练均采用小批量数据集batch运算的方法。而用在本算法中,如果只训练一次(不更新各参数)便得出结果,会对结果造成偏差。因此,本文采用多次训练取平均的方法,且每个batch的构成都由每个类别内随机采样的数据组合得出。

本文方法简单易操作,其基本流程为:先采用如算法1所示的步骤训练出精简模型所需要的网络结构,按照这种结构对原始网络稍作改变,之后采用与原始训练方式相同的步骤训练,即初始化参数,确定学习率、动量和迭代次数等超参数,开始训练直至网络收敛。

算法1获取精简网络结构的剪枝算法

输入:训练数据X,裁剪率P,卷积层层数l,模型参数W={W(j),0≤j≤l},训练次数epochmax。

输出:精简网络的cfg和cfg_con(若存在)。

初始化模型参数W,据P确定保留的filter总数目

for epoch in range(0,epochmax):

根据训练数据X获取模型参数W的梯度值

forjin range(0,l):

据式(5)记录每个filter梯度的l1范数

据式(6)做归一化处理

记录本卷积层的初始filter数目

end

据式(8)计算后排序获取cfg和cfg_con(若存在)

更新cfg和cfg_con(若存在)

不更新优化器和模型参数

end

算法1的目的是得到网络的各卷积层filter的个数,用列表cfg表示。对于ResNet,还需要确定weight layer 2剪枝的结果,用列表cfg_con表示。首先确定训练次数epochmax;之后进行各filter的敏感度排序,确定精简模型的网络结构,即可得到cfg和cfg_con。

3 实 验

本文在两个数据集上验证了该方法的有效性,实验采用Pytorch架构,使用公开的训练数据集来训练。

3.1 数据集介绍

3.1.1CIFAR-10

CIFAR-10数据集由10个类的60 000个32×32彩色图像组成,每个类有6 000幅图像,共50 000幅训练图像和10 000幅测试图像。数据集分为五个训练批次和一个测试批次,每个批次有10 000幅图像。测试批次包含来自每个类别的恰好1 000幅随机选择的图像。

3.1.2IMAGENET-300

IMAGENET数据集包含120万幅训练图片和5万幅验证图片,共有1 000个类。因为硬件的限制,本文只训练其中随机挑选的300类来进行实验说明,并计算这300类的均值和标准差来进行预训练处理。

3.2 网络模型

3.2.1CIFAR对应网络

本文主要采用的基准网络架构为简化版的VGG16和ResNet系列网络,这个简化版本是正常版本的一种变异形式[9]。其中,简化版VGG16最后只采用了两层全连接层,因为输入图像的空间尺寸较小,因此最后的平均池化层参数不是7,而是2。对于ResNet而言,shortcut层会涉及到卷积步长大于1或输入输出通道不匹配的问题,标准的ResNet使用的1×1的卷积核来做变换,这里简化版的ResNet只是通过补0或置0来使输出通道适应输入通道,不引入多余参数和计算量。同时只有3个make_layer层,即每个残差模块的输出通道数都一样,每个make_layer层的第一个残差网络可能会进行通道变换或者特征图尺度放缩。综上,这些简化版本更适合于小尺寸的输入图像。

3.2.2IMAGENET对应网络

IMAGENET数据集的图像较大,不适宜再采用简化版的网络,因此直接采用标准化的ResNet网络。采用上述的Residual block两部分剪枝, shortcut层沿用标准化的1×1卷积核运算。

3.3 实验数据

CIFAR数据集中,采用简化版VGG16、ResNet20、ResNet56和ResNet110网络,优化器为SGD,初始学习率0.1,均在总迭代数的0.5和0.75处进行学习率缩小十倍的操作,动量值设置为0.9,权重衰减率设置为1e-4。CIFAR10数据集的预处理包括周围4像素外填充padding,随机裁剪之后随机水平翻转,其余设置均未改变。batch的数量取128,训练硬件为GPU GTX 1080。

IMAGENET数据集中,采用ResNet18和ResNet34网络,分别在总迭代数的1/3处学习率变为之前的0.1。其余设置与CIFAR10数据集相同。

为保证训练结果的公平性,未剪枝模型的计算量应保证和精简网络的计算量保持一致[8]:

epochbase×FLOPbase=epochprune×FLOPprune

(9)

式中:epoch代表训练迭代次数;FLOP代表模型计算量;下标base和prune分别代表基准网络和裁剪后的网络。

3.4 实验结果

3.4.1总体实验结果

在数据集CIFAR10上,验证集结果如表1所示。采用的网络框架为简化版VGG16、ResNet20、ResNet56和ResNet110。表格括号内前者为通道裁剪率,后者为超参数α的取值,ACC为训练的分类准确度,FLOPS为前向训练时的计算量,Para为参数量,Pruned为计算量裁剪和参数量裁剪的百分比。

表1 CIFAR验证集结果

在VGG16基准网络下,baseline为不裁剪的训练结果。考虑到VGG网络较为冗余,本文将通道裁剪率设置为60%和70%,可以看出分类准确度与PFEC和baseline结果相比无降低,且部分略有提升,同时实验的参数量裁剪率在80%以上,计算量裁剪率在40%左右。在ResNet基准网络下,在分类准确度基本维持不变时,本文实验的计算量裁剪率和参数裁剪率均比对照组高。特别地,ResNet110网络在计算量及参数量均裁剪掉50%以上时,模型分类的准确度依然维持较高水平。

在数据集IMAGENET300上,验证集结果如表2所示,采用的网络框架为Resnet18和Resnet34。表中均为通道剪枝率30%下的结果,与不裁剪的训练结果baseline相比,准确度略微降低,且降低率在0.4%以内。此时,计算量裁剪率可达到30%左右,参数裁剪率为50%左右。

表2 IMAGENET验证集结果

3.4.2α系数的影响

以ResNet20为例的cfg结果如图5所示。可以看出α的大小控制着不同层的通道均衡程度。α趋于0时,意味着结构参数控制较大,各层裁剪通道数与原始输出参数成比例;而α为1时,代表只有数值参数参与判断,图线波动较大,抖动很大,同时在shortcut层处的敏感度很高,因此保留的通道数较大。图6为ResNet56各卷积层的通道数实例。

图5 ResNet20的cfg结果

对于VGG网络而言,只需要做层间归一化,同时使用层间因子调节一下输出通道数不为0即可,因此一般使α取趋向1的值。而对于简化版的ResNet,考虑到shortcut层和make_layer层,为了保证shortcut层不引入多余的参数,本文将每个make_layer层看作一个整体而得出一个统一的输出通道数,因此各个残差模块的中间输出通道数的差距不应过大,所以α值取值比VGG网络稍小。

图6 ResNet56的cfg结果

3.4.3预训练模型与初始化模型的cfg对比

使用本文方法分析预训练模型的参数剪枝后能否恢复精度。实验一使用初始化模型训练出网络结构列表cfg,之后对预训练模型进行连接敏感度排序,每层只保留排序靠前的cfg中规定数目的通道数,之后进行40次的微调;实验二使用预训练模型直接进行全局连接敏感度排序及训练cfg,剪枝后微调相同次数。

在VGG16上进行测试,将初始化参数固定。pre_cfg是采用实验二得到的网络结构列表cfg;initial_cfg是实验一初始化阶段得到的cfg。经过同样的迭代次数之后,结果如表3所示。二者训练出的通道数列表如图7所示。实验结果表明,前者的效果要比后者提高约0.7%。这说明了该方法只适应于初始化剪枝的方法,在已经训练好的模型上效果并不理想。

表3 预训练模型与初始化模型训练结果对比

图7 预训练模型与初始化模型的cfg对比

3.5 讨论分析

本文认为损失函数对权重的影响随着训练是会发生变化的。在刚开始时所有的权重都是需要训练的,而在训练多次之后,有些权重被认为已达到稳定值,此时损失函数对权重的影响是很小的。对于预训练网络,权重梯度的统计值更倾向于随着网络深度加速而逐级递减的趋势,此时如果按照当前权重梯度的l1范数进行裁剪,会对分类准确度造成较大损失。这说明本文的方法更适合于初始化模型剪枝,同时也侧面印证了文献[8]观点的正确性,结构化剪枝最终得到的是网络结构,而不是网络参数。

4 结 语

本文提出一种卷积层的初始化剪枝方式,无须更新训练中参数便可得出精简模型的网络结构,操作简单,较易实现,且后续精简模型训练与正常训练相同,而计算量和参数量有了大幅度减少,对通用的前向推断硬件十分友好。

经过在不同数据集和不同架构上的测试,对比原始网络分类训练的结果,本文方法分类准确度基本不会下降,部分有所提升,其中ResNet110网络在计算量及参数量均裁剪掉50%以上时,模型分类的准确度基本保持不变。

未来将研究对于轻小型网络的剪枝优化算法,同时结合网络量化的相关内容,进一步减少深度卷积神经网络的计算量和参数量,便于其在嵌入式设备中的部署和应用。

猜你喜欢

剪枝精简网络结构
人到晚年宜“剪枝”
基于区域分割的多视角点云精简算法
基于YOLOv4-Tiny模型剪枝算法
快递网络结构研究进展
很美,很暖,很享受 Unison Research(优力声) MAX Mini书架音箱 Simply Italy精简意大利真空管合并放大器
基于激活-熵的分层迭代剪枝策略的CNN模型压缩
基于AutoML的保护区物种识别①
精简、综合、用足——神木持续优化考核机制
剪枝
基于互信息的贝叶斯网络结构学习