原文链接:https://arxiv.org/pdf/2007.03260.pdf 发表:ICCV 2021
code:https://github.com/DingXiaoH/ResRep
编辑:牛涛
本文argue的是之前在损失函数上加正则项(如l1/l2范数)进行稀疏化,收敛后根据给定标准剪枝的方法。这种方法任务损失与正则损失同时加在网络参数上,会出现参数既偏离最优点又不够小的情况,直接删除参数会带来比较大的负面影响。收到神经学的启发,人脑会分别有负责记忆与遗忘的神经,类比于任务与正则的话,任务就是记忆,正则就是遗忘,如果能把两项解耦,那么理论上会实现比较好的trade-off。
作者将重参数化利用在了剪枝上,首先将网络重参数化,在每个卷积层后插入一个1*1卷积,命名为compactor。compactor初始化为单位矩阵,因此插入前后不改变计算。如果我们可以只在compactor的参数上添加正则项,那么网络本身的参数还是只受到任务损失的影响驶向最优点,compactor的参数负责在任务与正则间挣扎。
其中,compactor的梯度如下式
m表示二进制mask,随着网路的训练,会根据compactor每个fitler的范数排序,并逐渐将范数小的filter所对应的m置零,置零后认为这个filter及输出对应的通道就不重要了,仅用正则项更新会使得这些filter范数非常趋近于0,故可以无损删除。
删除compactor中的filter后,可以用重参数化把卷积和compactor合并,这样就等同于在原始网络上剪枝了。
关于m的置零,是随着训练逐渐增多置零的数量,这样会更平滑。
文章伪代码如下
本文核心就是将重参数化用在了剪枝上,并且对梯度做了个魔改,其实解构之后工作量也不是很大,但是作者确实很会对自己的概念进行包装,看起来很有东西。