分类网络剪枝问题,模型压缩

分类剪枝疑问

 

1. 为什么network slimming必须使用bn层系数训练(4.17.2020)

     1)如果直接加在CNN后面(没有BN),就是个线性变换,对没有归一化的数据进行线性变换,是没有意义上的,加不加效果都一样

     2)如果加在BN前面,BN的normalization就把scaling的效果抵消了。了解bn层的公式,发现分子分母都乘个系数没有变化,所以归一化的过程将系数效果抵消,将scaling放在BN层前面同样没有意义。

     3)如果加在BN后面,BN已经有一个scaling,就多余了

 

2. optimal threshold解决了network slimming的哪个痛点?(4.24.2020)

NS: 使用一个global threshold来剪所有的layers cons:所有层使用一个threshold会导致有的层over-pruning,有的层under-pruning

OT: 基于每一层的分布,选择一个对应的threshold来剪 pros:最大限度地将重要与不重要的channels分开,得到最大的sparsity

相比于weights,网络的structure更重要,OT相比NS能得到更好的网络结构

 

3. 8bit量化的截断是什么意思?(4.24.2020)

8bit:当数据分布很不均匀时,把原始数据在映射前截断一部分,构成对称且分布良好的阶段信息,再映射到8bit上。先找一个阈值T,将超出阈值的值映射到-127/127.

 

4. 为什么使用KL散度表征量化的效果?(4.24.2020)

KL:KL散度表示两个分布的差异程度,也就是量化前后两个分布的差异程度。KL越小,表示分布差异越小,量化的效果越好

 

5. pytorch中卷积层参数的维度是如何排布的?4维,每一维代表什么?(4.24.2020)

pytorch中如果对(W,H,Ci)维度的特征图做卷积,得到的feature map为(Wo,Ho,Co),则此卷积层的维度为(B,Cin,K,K)四维,其中一个卷积核的维度为(Ci,K,K)三维。这个卷积层共Ci×K×K×Co+bias个参数。B:batch size,K:height and width,Co:output channel,Cin: input channel

 

6. 定义Baselayer和BasePruner有哪些好处?(4.24.2020)

OOP编程思想的典型做法,将基础模块(具有公用的属性和方法)封装成一个父类,以便于多继承的子类重复调用,并应用到子类特殊的属性和方法中。比如block.py中CB类就继承了Baselayer类,并可以通过super()._init_继承父类的构造函数,通过self._cloneBN调用父类中的cloneBN方法。

 

7. 注意事项(5.5.2020)

剪枝之前必须进行sparse training,没有进行稀疏化训练的剪枝是没有意义的,也是错误的。因此optimal threshold剪枝方法是在network slimming的基础上进行修改的,并且必须保留了sparse training。

 

8. 建议(5.8.2020)

例如thinet的剪枝方法都很老了,参考代码只有caffe的,目前要去实现可能有点困难。另一方面根据经验真正能有比较好的压缩效果的可能就是networkslimming和autoslim这两种方法。所以要练手的话从backbone入手,从shufflenet,resnet,vgg入手,基于框架进行补充,定义一些新的block和对应剪枝规则,这样也能充分起到练习的作用了。

 

9. 如何定义模型的运行顺序(5.8.2020)

现在我们的分类是一溜下来的顺序,但是实际的检测、unet之类的就不是了。

 提示 :数据结构中的拓扑排序,神经网络本身就是一个有向无环图DAG

 

10. 为什么科技互联网公司越来越看重数学(链接)(5.13.2020)

 

11. 稀疏因子的选择和哪些因素有关,有没有规律?   模型结构、是否使用pretrain、数据集等等。(5.14.2020)

 

12. 关于不同稀疏度,欠拟合的问题;为什么稀疏化训练会导致欠拟合(5.16.2020)

    Sparse会使得原本不为0的bn曾系数趋近于0,使bn层有效的权重变少了,同样bn为0的层后续conv对应的层也都趋近于0,稀疏化训练导致有效的卷积通道变少了  有效参数减少->欠拟合。但需要注意,稀疏化只会使得参数趋近于0,不会为0,故在训练过程中全部的参数都在更新。

    可以类比一下决策树的特征选择/剪枝过程  稀疏化训练的话其实就是尽可能少的保留了特征

    所以稀疏化训练带来一个意想不到的好处  实际业务中都是开集  不像cifar10,coco这种确定的验证集,欠拟合是比过拟合要好的,业务中收集到的数据很难说有很全面的代表性

 

13. 为什么L1和L2正则化可防止过拟合(链接)(6.4.2020)

 

14. Slimmable neural network, Universal slimming neural network, Autoslim 三部曲论文详解(6.30.2020)

从channel prune到channel search的发展和探索

 

15. 简要说明autoslim系列论文的改进思路。(6.30.2020)

                                                    NAS method

                                                     Pruning method

1)从S net到US net作者实现将只有少数固定比例(eg. 0.25X,1.0X等)的switchable width到任意比例的switchable width的转换,使得算力和准确率更加平衡(更加充分利用全部算力)

2)从US到Autoslim,真正实现NAS,搜索在资源限定下最优的网络结构,在S slim和US slim得到的模型池的基础上,先训练好一个1.5X的网络结构,然后根据贪心规则找到每一层导致准确率下降最小的参数group,进行剪枝,以此类推全部网络层,得到在资源限制内的最有网络结构。(这里的参数group是为了加速剪枝,否则一个参数一个参数剪速度太慢、资源消耗太大)。并且实现One-shot,即在 Greedy Slimming过程中不需要训练,只需在剪枝之后进行一次train from scratch即可,便可得到最优模型,不需要重复‘剪枝-更新’这个过程。

 

16. 为什么需要重新累计bn层统计参数,从实践来看,重新累计/不累计区别有多大?(6.30.2020)

1)重新累计bn的问题最早出现在Slimmble network中,由于每一种width的特征图都共享同一组bn参数,故若使用同一个bn的mean和variance会导致结果偏差,即full-scale的bn是准确的但scaled bn层已经存在偏差,故在最终的predict时,bn层的偏差会导致较差的结果

 

2)结合上图分析,左图表示在训练过程中,前向传播使bn在实时更新,故普通bn和switchable bn的结果一致,但在验证集中,我们发现,不同的比例导致准确率的明显降低,导致降低的原因便是小比例的bn层仍使用full-scale时的bn层,故不累计的bn层会很大程度导致准确率的下降

 

17. 与稀疏剪枝方法相比, autoslim的优缺点有哪些?(6.30.2020)

优点:

  1. 从1.5倍的模型开始搜索,相对于普通prune有更好的结果

  2. 每次修剪对结果影响最小的一组参数,比prune的一次性修剪有更好的结果,相比prune可以找到更加有效的结构

  3. Autoslim 没有人工经验的影响,prune往往需要人为设定超参数,这种超参数的设置往往会导致无法剪枝出最优解。

  4. 训练一次可以给不同算力要求的设备适配,稀疏训练的话需要多次指定不同的稀疏率

  5. Autoslim 剪枝不依赖于bn层

缺点:

  1. 速度太慢,剪枝的过程消耗太多算力和时间

 

18. 相关论文:(6.30.2020)

  1. Once for All: Train One Network and Specialize it for Efficient Deployment ,ICLR 2020

  2. GAN Compression: Efficient Architectures for Interactive Conditional GANs, CVPR 2020

  3. Single Path One-Shot Neural Architecture Search with Uniform Sampling, CVPR 2019

论文解读:1. OFA论文

论文解读:2. SPOS论文

 

19. 问题: autoslim 和 single path,once for all的异同

1. autoslim是prune类

        i. 在1.5x模型的基础上进行prune来得到,意味着每一个block,每一层的网络结构的框架是固定的,只是在prune的过程中导致一些channel被修剪掉。

       ii. 相比另外两个SP和OFA来说,prune前整体结构是固定的,但是每个block,每层更加精细。prune到具体的某个神经元或组

2. SP是NAS的一种

        i. 不同于prune,旨在找出准确率更高的单路径上不同blocks的组合,在给定搜索空间内(如下图),每层进行随机采样不同的block结构

        ii. 每层共享同一个Kernel(根据采样所得的结构在大的Kernel上裁出所需kernel的大小)

3. OFA同样是NAS

      i. 不同于Autoslim的prune方式,类似于SP的模型搜索方式

      ii. 但对于SP的对最高准确率的kernel size的搜索,OFA在四个维度进行模型搜索:net depth,net width,kernel size和 输入图片的分辨率

       iii. 在大网络训练完成后,分5个阶段对不同的四个维度进行fine-tune来训练子网络,子网络的训练应用distill,在loss计算中引入大网络的Soft loss使得自网络学习更快更准;

       iv. 子网络种类繁多,多大16k种,完全满足任何设备的要求

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值