东阳的学习记录,坚持就是胜利!
文章目录
为什么需要做网络压缩
我们平时通过训练的网络结构过于庞大,而在实际的工业应用上,可供使用的硬件资源十分有限。这时候我们就需要对网络结构进行压缩。以在各种(微型)工业电子设备上使用。
常用的网络压缩方法
- Network Pruning
- Knowledge Distillation
- Parameter Quantization
- Architecture Design
- Dynamic Computation
Network Pruning
网络结构通常存在着过多的参数(存在大量冗余权重或神经元)
- 把他们剪掉!!!
Network Pruning的步骤
- 计算某个权重的重要性:L1, L2
- 计算神经元的重要性:计算它在给定的数据集上,输出不为0的次数
- 在经过裁减之后, 准确率会有一定程度的降低。
- 在训练数据上对裁减好的网络经行重新修复(重新训练参数的值,恢复准确率)
- 不要一次性裁减过多,否则可能导致无法修复
为什么选择裁减而不是直接训练一个小的网络
- 因为小网络不太容易train的起来(好像现在有新理论,可以训练起小的network)
Knowledge Distillation
Knowledge Distillation的思想是:我们可以先train一个大的网络,然后用一个小的网络去train这个大的网络的output(不是跟预测结果去学习,而是学习output的所有结果和相应概率)。
为什么跟着Teacher训练会比单独训练好
见上图红字
Parameter Quantization
- 用更少的参数来代表一个参数
- Weight clustering(会损失一些精度)
- 比较常出现的cluster用比较少的bit表示,比较少出现的cluster用比较多的bit表示
Binary Weights(不太懂)
结构设计(在运用中最有效的)
Low rank approximation
可以减少参数量
Depthwise Separable Convolution(通道分离卷积)
- filter num等于输入图片的通道数
- 一个filter只考虑一个通道
- 一个filter有 K * K 个参数
- 通道之间没有互动
这种方法能够减少参数量
一些值的读的论文
- SqueezeNet
- https://arxiv.org/abs/1602.07360
- MobileNet
- https://arxiv.org/abs/1704.04861
- ShuffleNet
- https://arxiv.org/abs/1707.01083
- Xception
- https://arxiv.org/abs/1610.02357