剪枝方向文献粗读笔记_1

Channel Gating Neural Networks

文章1地址

  提出了一个动态、细粒度、基于训练的降低计算量的剪枝方法——Channel gating。利用输入特征的“空间结构”, 通过判断输入特征中对分类结果贡献较小的区域,对该区域“关门”,跳过该区域的计算。重要性判断标准是“feature map 的导数”,导数值较小的区域被认为是不重要的。(partial sum应该是导数之和的意思吧…)
具体思路

  但因为这个算法是一个“即时生效”型的,就是在infer阶段进行“开关门”的,这会导致额外计算量的增加和精度下降。因此训练-找到一个合适的policy环节格外重要。
  实验结果:在CIFAR10上的各种sota模型,减少 2.7-8 倍的FLOPs,减少 2-4.4 倍的off-chip memory access。和知识蒸馏方法结合,在ImageNet上,ResNet-18减少2.6倍计算量没有精度损失。并且在FPGA和ASIC上都获得了较好的加速效果。

Neuron-Level Structured Pruning using Polarization Regularizer

  以往的剪枝大多基于 L 1    n o r m L1\;norm L1norm进行,但是这种方法缺少对不同神经元的“差异性”,它让所有值都趋向于0。 本文提出了 p o l i a r i z a t i o n      r e g u l a r i z e r poliarization\;\;regularizer poliarizationregularizer, 能够让重要的神经元保持不变,无效的神经元趋向于0。 并且此方法无需占用普通GPU和CPU上额外的硬件资源。如下图所示,利用L1范数训练后的结果和Pola进行训练得结果差别很大。一是权重较小区域:L1没有明确的分界线,难以寻找一个较好的threshold;二十权重较大区域,pola方法对该区域保护较好。
具体体现

  实验表明对结构化剪枝,本文的新正则化方法效果更好,且在CIFAR和ImageNet数据集上取得了sota的效果。
文章2实验结果

SCOP: Scientific Control for Reliable Neural Network Pruning

文章3地址

  已有的很多方法都有各种缺陷:通道之间的相关性可能让一些filters和features有很大的norm,但是包含的信息缺很少,这让基于范式的方法失效;输入数据的微小扰动可能造成巨大的“卷积核重要性排名变化”,这使得输入数据驱动型(上面那个channel gate,还有之前看过的manifold都是这种类型)方法失效。
  本文提出的方法增加knockoff feature作为一个科学控制组,减少除了filter以外所有可能对output的影响。knockoff features的分布(图像)和real features相似,但是真实的label独立。作为对照组,发掘filter的冗余。另外,这篇文章理论上证明了knockoff data生成的intermediat feature同样也是real data的对照组。在训练过程中,将对照组和真实组一起喂给网络,两组features混合在一起,用一个可学习的比例因子进行训练。在对照组中拥有较大比例因子的filters应该倍剪去(?最后一句凭自己感觉总结的)。

文章3实验原理
实验效果(仅仅截取CIFAR-10部分):
文章3实验结果
  这篇文章属实没怎么看懂。主要是不理解对照组存在的背后原理。直观上理解为:因为对照组的存在,剪枝的条件更加“苛刻”了一点,因为不仅要管自己,还要管对照组。但感觉这个方法还是有点太理想了,(属于更照顾accuracy而非pruning rate的方法?),感觉很难剪啊,不知道为啥会有这么高的剪枝率。另外这篇文章的数学推导实在太多了,很多地方连符号是啥意思都不知道…过几天可以精读一下。

Provable Filter Pruning for Efficient Neural Networks

文章4地址

  提出了一种可证明的、基于采样的、输入数据驱动的去除冗余filters的方法。仅仅依靠一小部分的输入数据,就可以对filters进行显著性评分,并且构建”重要性采样分布“,越重要的filters被采样的概率越高。
  提到,现在的剪枝方法大多是基于启发式的(这个”大多“有点过分了吧,很多动态的方法确实是基于启发式的,但是静态的好像也没啥启发式算法啊…),缺少对”大小“和”性能“的保证,需要繁琐重复的训练、或手动微调超参数,或极大依赖于”绝对值大小“比较法。本文提出了一个全新的卷积核重要性定义:卷积核灵敏度(filter sensitivity) ,它是由输入数据一个小batch计算得到的。本文还显示,如果采样卷积核的频率和它的灵敏度成正比,可以得到方差较小的采样方案。
  最核心的应该是fiter sensitivity的提出,利用它作为“标准”,做启发式搜索,找到一个接近于全局最优的解。文章很数学,不知道有生之年能不能看懂。
文章4原理

Directional Pruning of Deep Neural Networks

  提出了一个新的优化算法。因为SGD再训练时经常会找到一个“平缓的极小山谷”(flat minimum valley),本文提出一种全新的能在“平缓区域”找到稀疏极小值的剪枝方法。为了减少在平缓地区的计算量,本文调整了 l 1 l_1 l1近端梯度算法,能够在小学习率、经过充分训练后进行“有方向的剪枝”。

Neuron Merging: Compensating for Pruned Neurons

  提出了一个新的神经元合并概念(Neuron merging),既适用于卷积层,也适用于全连接层,能够补偿因为剪枝而引起的精度下降。
  首先是将原始权重分解成两个矩阵,其中一个是当前层的新权重矩阵,另一个被命名为放缩矩阵。如果激活函数为ReLU,放缩矩阵在一定条件下能被吸收进下一层。本文的神经元合并方法是一种无数据(data-free)的方法。对新权重矩阵,采用 l 1 l_1 l1范数进行压缩,放缩矩阵是通过神经元间的余弦相似性和 l 2 l_2 l2范数的比例进行构建的。
文章5方法

  实验结果:对VGG-16和WideResNet-404,在CIFAR10数据集上分别能够以 64 % 64\% 64% 40 % 40\% 40%的剪枝率下保持 93.16 % 93.16\% 93.16% 93.3 % 93.3\% 93.3%的精度,并且是没有微调。
  不知道怎么具体实现的,但是看着想法先定义为“扯淡”的行列。有空去看看。感觉这个channel的叠加太过于理想化了。。。

Storage Efficient and Dynamic Flexible Runtime Channel Pruning via Deep Reinforcement Learning

  基于深度强化学习的剪枝策略寻找,可以找到每一层需要剪多少,应该剪哪些。另外,这篇文章还加入了“静态”的组件,就是彻底删去一些非常不重要的通道来减少参数的存储量。
  提到了目前强化学习进行模型剪枝的痛点:action space太大了。对每一层,它的搜索(离散)空间都是每一层的channel数,而且不同layers的情况还各不相同。为了解决这个问题,本文设计了一个新的可以用来评估通道重要性的预测装置,再通过一个基于深度强化学习的装置来学习每个layer的压缩率。
  为了实现动态灵活性和静态存储效率之间的平衡,文本提出了两种重要性方法——runtime importance 和 static importance,前者用来考察不同输入对每个通道的重要性,后者考察每个通道对所有输入数据的重要性。
  实验效果(截取部分,另外为什么这里top1的准确率比top5要小啊,我晕了。。。。):
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值