Discrimination-aware Channel Pruning for Deep Neural Networks

原文链接:https://proceedings.neurips.cc/paper/2018/file/55a7cf9c71f1c9c495413f934dd1a158-Paper.pdf   发表:NIPS2018

code: https://github.com/SCUT-AILab/DCP

编辑:牛涛

本文给出了一种基于鉴别力的通道剪枝。

首先给出了卷积的公式,如下


其中O代表output,X代表input,W代表权重,i为第i个sample,j为第j个filter,k为两个矩阵的第k维,*表示卷积操作


通道剪枝意在剪掉那些W中冗余的通道,为此引入关于W的约束,如上式。(比较好奇的是为啥要先对j求和?不就变成了希望不同滤波器的某些通道为0?还是说本文的channel pruning指的就是去掉filter中的某些channel 好的指的就是这些

通常用剪枝前后特征图的重构误差进行评估,如下式:

论文给出了用这种评估的两个弊端,一个是如果原网络效果就不好,会限制剪枝后的网络;另一个是仅通过重构误差可能会导致一些不该保留的channel被保留了(为了尽可能使误差减小,稀疏度就得不到保障)。

至此,文章给出了一种新的剪枝方式,如下图:


除了最终的分类损失Lf与特征图重构损失Lm外,还加入了鉴别力损失L(p,s),定义如下:

L(p,s)=CrossEntropyLoss(F^p , Label)

其中,

说白了就是直接从中间层做分类,效果好说明鉴别力高

至此,channel selection的总损失为:



总伪代码如上:

对于每个stage-p,构建鉴别损失并结合Lf训练网络M,使得全连接层有参数的同时,stage-p的卷积参数得到微调;

对于L_{p-1}+1 L_{p} 间的layer,做channel selection

channel selection:根据总损失计算梯度,找到A的补集中梯度F范数最大的channel并加入到子集A中;(个人理解是模型收敛后,如果梯度仍然很大说明权重的轻微改变就会造成总loss的变化,因此这些channel对loss是很重要的应该保留 初始状态因为要优化下式,需要将补集的channel置零,一开始全是0,训练的时候梯度大说明这个方向更利于loss降低,所以认为这个channel很重要,就把它

A确定后,将不在A中的channel都置零并训练网络至L(W)收敛。贪婪的方式,一次向A中加入一个channel,每加入一个就对其梯度下降训练到最优,然后对补集中的channel继续筛选。

稀疏率参数很难人为确定,你不知道要保留多少filter就达到了最优,再加上L(W)随着t的增加而单调减小,因此设置如下的终止条件。

终止条件:算法2中while语句有个stopping condition,按理说应该按照剪枝率来判断,达到后就停止。但是很难人为确定剪枝率的大小,因此采用自动的方式,当L(W)收敛后就不再剪了,给出的公式如下:


可以看出,一旦相邻两个iteraion的L(W)变化很小,就满足停止条件。

实验结果:

消融实验两个地方比较有意思,一个是损失函数中lambda的值越大,剪枝后精度越高,但是光有Lp效果反而不太好,说明损失的两项都很重要,是互相促进的关系。

第二个就是可视化结果,可以看出保留的channel有更多信息,说明这个Lp损失确实能帮助辨别有用的通道。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容