本发明深度神经网络模型压缩与加速领域,具体涉及一种基于shapley值的深度卷积神经网络滤波器剪枝方法。
背景技术:
1、深度卷积神经网络在计算机视觉领域取得了很大的成功,例如图片分类、目标检测和图像分割等领域。但它仍然有一些计算量和内存占比大的缺点,这使得大多数性能优秀的神经卷积神经网络无法应用到智能手机等资源受限的设备上。因此卷积神经网络模型的压缩和加速时近几年被广泛研究的问题。如今比较流行的模型压缩方法主要有模型轻量化设计、参数量化、模型剪枝和知识蒸馏等。在这些方法中,模型剪枝由于其方便有效性和高效性被广泛的探索研究。
2、模型剪枝主要包括权重剪枝和滤波器剪枝。权重剪枝通过直接剪掉滤波器中不重要的权重连接来对模型进行压缩,但这种剪枝方式得到的权重矩阵是稀疏的,需要专门的库或者硬件才能实现模型压缩和加速。而滤波器剪枝方法直接剪掉整个滤波器来实现模型压缩,仍然保留原始的模型结构,是一种较实用的模型压缩和加速方法。滤波器剪枝的主要方法就是通过对每个滤波器的重要性进行评价,通过剪去重要性高的保留重要性低的滤波器来实现模型压缩。而如何合理全面的评价一个滤波器是否重要就是滤波器剪枝需要面对的主要问题。
技术实现思路
1、本发明的目的就是为了解决如何合理全面的评价一个滤波器的重要性,提出了一种基于shapley值的深度卷积神经网络滤波器剪枝方法。
2、本发明实现上述发明目的所采用的技术方案如下:
3、一种基于shapley值的深度卷积神经网络滤波器剪枝方法,其特征在于,包括如下步骤:
4、步骤1:针对分类等模型识别任务,准备数据集d,划分为训练集和测试集,选择原始网络模型,固定模型参数,通过数据集d训练出未剪枝的初始模型。
5、步骤2:将部分训练集输入初始模型,根据模型输出的loss计算出每个滤波器的shapley值。
6、shapley值的计算公式为:
7、
8、其中,φi(v)表示滤波器i的shapley值,n\{i}表示去掉滤波器i的所有滤波器集合,s表示n\{i}的一个子集,|s|表示集合s中滤波器的个数,|n|表示集合n中滤波器的个数,v(s)表示保留集合s中的滤波器时模型输出的loss值,v(s∪{i})表示保留集合s中的滤波器和滤波器i时模型输出的loss值。(*)!表示阶乘。
9、由公式1,当v(s)的值变化δv(s),所有滤波器的shapley变化值为δφ(v)为:
10、
11、
12、其中,δφi(v)表示滤波器i的shapley增加值,δφj(v)表示滤波器j的shapley增加值,δv(s)表示保留集合s中的滤波器时模型输出的loss值的增加值。
13、先假设一开始v(s)的值仅与集合s的元素个数有关,对于元素个数为k的集合s,假设根据公式1可以得到这时每个滤波器的shapley值是相等的,设φ1(v)=φ2(v)=…=φ|n|(v)=0。
14、当k=1时,先将所有的v(s)的实际值与平均值的差值进行从小到大的排序,如图1所示:
15、图中每个点代表实际值与平均值的差。中间虚线为0。
16、当v({i})由平均值变为实际值时,δφi(v)为
17、
18、其中,v({i})为只保留滤波器i时模型输出的loss值,v({j})为只保留滤波器j时模型输出的loss值,δv({i})是v({i})与平均值的差值,δv({j})是v({j})与平均值的差值。
19、如果将左右两边的值分别加起来,如图2,当δv({i})<0时,可以分为如图3的两部分,当δv({i})>0时符号相反:
20、则:
21、
22、当|n|>k>1时,si为包含滤波器i且滤波器个数为k的集合,由于si有多个,可能平均值的两边都存在,按大于或小于平均值所有的集合si分为两部分x和y,x表示小于的v(si)与的差值求和,y表示大于的v(si)与的差值求和。a为平均值左边去掉x的剩余部分和,b为平均值后面去掉y的剩余部分和,四部分如图4所示:
23、即:
24、
25、
26、
27、其中是所有元素个数为k的集合s的v(s)的平均值,v(si)表示保留集合si中的滤波器时模型输出的loss值,是所有v(si)的平均值。且:
28、
29、假设a>b,则可将a分为-b和-(x+y)两部分,-b和b可以约掉,a<b时情况类似。如图5所示:
30、此时δφi(v)为:
31、
32、其中,|si|表示集合si中的滤波器个数。
33、当k=|n|时,集合n中包含所有的滤波器,所有滤波器shapley增加值相等,即又由于开始φi(v)=0,所以
34、
35、由公式9,11可知,可以通过计算近似值来得到φi(v)的近似值。
36、对于|s|=k,先根据每个滤波器shapley值与平均shapley值的差的绝对值进行从小到大的排序,然后取不包含i的前k个滤波器任意k-1个滤波器的组合加入滤波器i后分别得到loss,将这些loss的平均值作为复杂度为
37、步骤3:设置剪枝比例,根据shapley值对模型的各层滤波器进行排序,对初始模型进行剪枝,然后使用数据集d对剪枝后的模型进行重新训练,记录并保存测试结果最好的模型。
38、步骤4:,修改剪枝比例,重复步骤s3。
39、进一步,所述s3具体包括:
40、(1)学习率设为0.01;衰减间隔为150,225;
41、(2)采用交叉熵函数作为损失函数;
42、(3)采用sgd优化方法,权重衰减率为0.005,动量值为0.9;
43、本发明具有以下有益效果:
44、基于shapley值进行重要性评价更具有合理性和公平性,本发明提出了一种新的计算shapley值近似值的方法。
45、本发明提出了一种基于shapley值的深度卷积神经网络滤波器剪枝方法,将shapley值作为过滤器重要性评价的指标,该方面能够全面合理的评价滤波器剪枝对模型性能的影响,实现对滤波器重要性的准确评估。
1.一种基于shapley值的深度卷积神经网络滤波器剪枝方法,其特征在于,包括如下步骤:
2.如权利要求1所述的一种基于shapley值的深度卷积神经网络滤波器剪枝方法,其特征在于:所述步骤1具体包括:
3.如权利要求1所述的一种基于shapley值的深度卷积神经网络滤波器剪枝方法,其特征在于:所述步骤2具体包括:
4.如权利要求1所述的一种基于shapley值的深度卷积神经网络滤波器剪枝方法,其特征在于:所述步骤3具体包括: