深度压缩-Deep Compression

Deep Compression

方法,包含 裁剪,量化,编码 三个手段。

模型参数分析:

网络中全连层参数和卷积层weight占绝大多数, 卷积层的bias只占极小部分。 而参数分布在0附近,近似高斯分布。
参数压缩针对卷积层的weight和全连层参数。每一层的参数单独压缩。

1. 剪枝(pruning)

模型的裁剪方法则比较简单明了,直接在原有的模型上剔除掉不重要的filter, 虽然这种压缩方式比较粗糙,但是神经网络的自适应能力很强, 加上大的模型往往冗余比较多,将一些参数剔除之后, 通过一些retraining的手段可以将由剔除参数而降低的性能恢复回来,
因此只需要挑选一种合适的裁剪手段以及retraining方式,
就能够有效的在已有模型的基础上对其进行很大程度的压缩,是目前使用最普遍的方法。

基于模型裁剪的方法:

对以训练好的模型进行裁剪的方法,是目前模型压缩中使用最多的方法, 通常是寻找一种有效的评判手段,来判断参数的重要性,
将不重要的connection或者filter进行裁剪来减少模型的冗余。

a. 阈值剪裁 基于模型裁剪的方法
b.基于量级的裁剪方式 相关论文
c.统计filter中激活为0的值的数量作为标准 论文参考
d.基于熵值的剪裁 论文参考
e.基于能量效率的裁剪方式 论文参考
f.遗传算法思想,随机剪裁,选择效果好的 论文参考
g.基于icc组内相关来衡量filter的重要性 论文参考
h.基于神经元激活相关性的重要性判别方法 论文参考
i.将裁剪问题当做一个组合优化问题
j. 一种基于Hessian矩阵的网络修剪算法

2. 量化(Quantization)

对象:对权重量化,对特征图量化(神经元输出),对梯度量化(训练过程中) 过程:在inference网络前传,在训练过程(反传)
一步量化(仅对权重量化), 两步量化(对神经元与特征图量化,第一步先对feature map进行量化,第二步再对权重量化)

32位浮点和16位浮点存储的时候, 第一位是符号位,中间是指数位,后面是尾数。 英特尔在NIPS2017上提出了把前面的指数项共享的方法,
这样可以把浮点运算转化为尾数的整数定点运算,从而加速网络训练。

1,聚类量化,降低内存消耗,但不能降低计算消耗
2. 二值量化网络

1,BCN & BNN 全二值网络
2,BWN(Binary-Weights-Networks)
仅有参数二值化了,激活量和梯度任然使用全精度,
3, XNOR-Net是BinaryNet的升级版
4,量化网络 nbit量化
5,约束低比特(3比特)量化 Extremely Low Bit Neural Networks 6,哈希函数两比特缩放量化

3.三值化网络
TNN 全三值网络
TWN 三值系数网络
训练三值量化 TTQ 训练浮点数量化
3. 二进制位量化网络 哈希函数的味道啊 ShiftCNN

3. 编码(Huffman Encoding)
4. 迁移学习方法 基于教师——学生网络的方法

基于教师——学生网络的方法,属于迁移学习的一种。 迁移学习也就是将一个模型的性能迁移到另一个模型上,
而对于教师——学生网络,教师网络往往是一个更加复杂的网络, 具有非常好的性能和泛化能力, 可以用这个网络来作为一个soft
target来指导另外一个更加简单的学生网络来学习, 使得更加简单、参数运算量更少的学生模型也能够具有和教师网络相近的性能,
也算是一种模型压缩的方式。

a. Distilling the Knowledge in a Neural Network
b.使用复杂网络中能够提供视觉相关位置信息的Attention map来监督小网络的学习

你可能感兴趣的:(神经网络优化)