zl程序教程

您现在的位置是:首页 >  其他

当前栏目

《Pruning from Scratch》论文笔记

论文笔记 from Scratch
2023-09-11 14:22:29 时间

1. 导读

导读:这篇文章从不同于原始网络剪裁的角度出发,分析了预训练给网络剪裁带来的影响,之后分析是否在网络剪裁的时候需要进行预训练,从而提出了一种不需要预训练进行的网络剪裁方式,其是通过随机初始化的方式去获取剪裁的网络结构,在这个结构上也获得了与在预训练模型上性能接近的结果,好处就是省去了花费较多的预训练模型获取过程。

在文章中将网络剪裁的方式划分为如下的三种形式:
在这里插入图片描述

  • (a)传统的网络剪裁方式,使用预训练模型,之后在剪裁之后的网络结构上finetune;
  • (b)相比于(a)中的方法将finetune改成了从头训练,取得效果也与之近似;
  • (c)在(b)的基础上思考是否真的需要预训练,直接在随机初始化之后模型的基础上进行剪裁,再从头进行训练,省去获取预训练模型的开销;

2. 方法设计

2.1 预训练模型与网络剪裁

在传统的观念中网络的结构性剪裁是在网络进行训练完成之后,根据网络层中的参数按照设置的阈值进行剪裁,之后再在剪裁模型权重的基础上进行finetune。后续也有论文论证了直接使用剪裁之后的结构train from scratch也能达到相似的效果。因而这篇文章在这个基础上分析是否有可能实现不需要预训练就可以实现网络的剪裁。因而文章指出可不可以直接不经过预训练就进行剪裁。

这里通过保存不同迭代次数的模型,观察这些不同迭代次数的模型对于最后剪裁结果的影响。这样也就探明了预训练模型对于最后剪裁结果的影响。

2.2 剪裁结构的相似性

对于每个剪裁的模型,这里计算网络中每个层的剪裁比例,之后将网络中各层的剪裁比例放入一个向量中,从而借此表达剪裁之后的网络结构。得到这个表达向量之后就可以计算不同模型剪裁之后的相似比。为了确保实验的有效性,文章在CIFAR10数据集上使用VGG16选择了5个随机种子进行训练,作为对比,分析初始化对于剪裁结果的影响。
在下图中展示了所有剪裁模型的相关系数矩阵。
在这里插入图片描述
从上图中可以分析得到3点有用信息:

  • 1)从随机权重初始化得到的剪裁结果与在预训练权重上进行剪裁之后的结果并不一致,见图2(a,b)左上图。在pretrained不同epoch上进行剪裁其带来的变化比较大,而使用随机初始化使用文章的方法其剪裁更加固定,且在10个epoch之后高度近似(只迭代10 epoch就行了)
  • 2)从随机权重初始化得到的剪裁结构在相关系数上具有更大的变化,但是在经过一定epoch(代码中为10)训练之后,训练模型上得到的相关系数就更加趋向于一致(减少少花费在pretrained上的时间),见图2(c)图;
  • 3)在预训练模型的相邻checkpoint之间具有更高的相似性(在同一次run里面),见图2(a,b)中右图;

从上面的结论可以推知,在预训练阶段其带来的剪裁结构空间在训练过程中被严重压缩了,这也许会带来性能的局限,而相反使用随机的权重初始化使得剪裁算法可以探索更加多样的剪裁结构。

2.3 网络裁剪结构的性能

文章将上文章提到在不同条件下裁剪得到的网络结构进行训练,最后得到的性能见下表1所示:
在这里插入图片描述
从上面的表结果中可以得出以下结论:

  • 1)从随机初始化剪裁得到的模型经过训练之后也能获得与基于预训练模型的结果近似,这一定程度上表明随机初始化进行剪裁带来的优化结果可能更好;
  • 2)上面的结果现实基于预训练的模型在最后的结果上能够稍好一些,但是基于预训练模型需要的庞大计算量,使用随机初始化进行剪裁,通过训练之后也能获得类似的性能;

2.4 裁剪方法

文章中对于网络结构的表达使用 f ( x ; W , α ) f(x;W,\alpha) f(x;W,α)进行表示,其中 x , W , α x,W,\alpha xW,α分别代表输入数据,网络权值与网络结构信息。在进行网络剪裁的时候,文章提出在网络层( j j j层)的channel-wise上使用一个标量值 λ j \lambda_j λj进行相乘(对应的是Conv层之后的BatchNorm中scale参数,有对应channel个,可不是每个Conv层就关联一个数),由于这个标量值是接近于0的存在因而会抑制某些channel上的输出,因而可以产生类似网络剪枝的效果,对于网络中的 K K K个层可以学习得到一组标量值 ∧ = { λ 1 , λ 2 , … , λ K } \wedge=\{\lambda_1,\lambda_2,\dots,\lambda_K\} ={λ1,λ2,,λK},因而网络的优化的目标函数可以写为:
min ⁡ ∧ ∑ i N L ( f ( x i ; W , ∧ ) , y i ) + γ ∑ j K ∣ λ j ∣ 1 \min_{\wedge}\sum_i^NL(f(x_i;W,\wedge),y_i)+\gamma\sum_j^K|\lambda_j|_1 miniNL(f(xi;W,),yi)+γjKλj1
s . t . 0 ≤ λ j ≤ 1 , ∀ j = 1 , 2 , … , K s.t. 0\le \lambda_j \le 1,\forall j=1,2,\dots,K s.t.0λj1,j=1,2,,K
在上面的网络剪裁过程中与传统的剪裁方法不同的地方在于两点:

  • 1)在计算网络层中channel重要性的时候并没有更新权值(先使用随机初始化的参数迭代,之后再在这个模型基础上获取BatchNorm的scale数值进行剪裁,剪裁完了之后再进行正常训练),也就是选择channel的过程没有在训练的过程中;
  • 2)使用随机初始化权值进行重要channel,并没有依赖于预训练;

在上面的剪枝过程中,可以使用一个期望的剪裁值 r r r,来设置剪裁的期望,对此可以添加一个正则项:
ω ( ∧ ) = ( ∑ j ∣ λ j ∣ 1 ∑ j C j − r ) 2 \omega(\wedge)=(\frac{\sum_j|\lambda_j|_1}{\sum_jC_j}-r)^2 ω()=(jCjjλj1r)2
其中, C j C_j Cj是网络层的channel数量。在决定最后的网络结构的时候文章通过在满足给定FLOPS下的全局阈值 τ \tau τ来得到网络结构,这个阈值是通过二分查找的形式进行确定的。计算过程如下:
在这里插入图片描述

3. 实验结果

CIFAR10上剪裁方法的性能比较:
在这里插入图片描述