pruning 几点思考:
参考的项目是这个: https://github.com/tanluren/yolov3-channel-and-layer-pruning
- 参考的论文很有指导意义,在bn层加了scale factor(实际上是对bn层的gamma系数进行压缩),这个值越小,说明对网络不重要,就是可以剪枝的
- scale factor范围的确定:在目标函数中加了个正则项,在训练过程中自动剪枝
之前的想法:
- 剪枝最重要的就是剪枝方式和剪枝比例,就是在哪里剪,剪多少
- 如何保证大模型中重要的weight不被剪掉
看了这篇论文有启发: https://arxiv.org/abs/1803.03635
这篇论文的思考:
- dense、随机初始化的前馈网络包含子网络,这个子网络单独训练的时候,精度能达到原始网络的精度,这是作者提出的核心思想
- 剪枝技术中对子网络初始会化使得训练有效,但是随机初始化会比原始网络的精度低,除非适当的随机初始化,作者提出子网络的初始化参数来自原网络的参数集合
- 子网络的迭代次数小于原网络的迭代次数
最近看剪枝相关文章的一些想法:
- 训练一个over parameter的model对最终剪枝得到的小模型是不必要的
- 为了得到剪枝后的小模型去计算大模型中的import parameter是不必要的
- 剪枝得到的结构相比求得的weight更重要,所以剪枝过程其实就是搜索网络结构的过程