ICLR'16 best paper 深度压缩,加速网络前传

1、Deep Compression

【1】神经网络在图像很多领域都达到了state-of-art的程度,例如,目标识别(VGG-net,Goolge-net),图像检索(deep Hash),图像分割(Fully convolutional networks for semantic segmentation),物体检测(faster-rcnn, yolo, ssd)等。
【2】但是也由于其巨大的参数数量(几百兆),导致(train/prediction[Net Froward]速度, 能耗存储是个很大问题。


1.1 Intro

song Han 提出深度压缩技术可以将最先进的卷积神经网络模型大小压缩10到49倍,同时“密集-稀疏-密集”(DSD)训练方法提高了很多神经网络的预测精度。

1.2 why 10X~40X?

我们知道对于有全连接层(Fc layer),的网络,其中很多参数是冗余的,也就是这些链接可有可无。

【1】因此对于具有FC layer的network,例如:Alexnet和VGGnet可以压缩倍数就高(~40X)。主要可以通过网络剪枝技术。
【2】对于全卷积的network,例如:GoogleNet和SqueezeNet,主要是通过,量化,霍夫曼(无损)变长编码。也能压缩10X
对于上述两种网络的压缩,均可以不损失精度。


2 Deep compression pipline

1- 剪枝神经网络,只学习重要的连接;(Less Number of Weights2- 量化权值去使权值共享;(Reduce Storage for Each Remaining Weight)
3- 应用霍夫编码继续压缩。(Entropy of the Total Remaining Weights

2.1 pruning

Lecun 在早些年发表论文(LeCun et al. Optimal Brain Damage NIPS’90),阐述网络剪枝是一种减少网络复杂度和过度拟合的有效方法。
ICLR'16 best paper 深度压缩,加速网络前传_第1张图片

【1】common step to train a network
【2】Pruning network:删除网络中权重值低于某一阈值的所有连接。
【3】retrain network,得到剩余稀疏连接的权重值。

pruning+retrain 的结果怎么样

ICLR'16 best paper 深度压缩,加速网络前传_第2张图片

2.2 weight sharing

Reduce Storage for Each Remaining Weight
已经证明:神经网络对低精度权重值具有非常高的容忍度:如图所示,蓝色权重值最初为2.09、2.12、1.92和1.87,然后让它们共享相同的权重值2,网络的预测精确度仍然不受影响。
网络量化和权值共享会进一步压缩剪枝的网络

ICLR'16 best paper 深度压缩,加速网络前传_第3张图片

【1】这些数字怎么来的?
另外,看绿色的,-0.98,-1.08,-0.91,-1.03 ,他们均值大概在-1左右。看黄色的,均值大概在0左右。粉色的同理。
【2】为什么分成4类?怎么分的?
k-means,这个也得尝试,不是第一次就成功的啊。

  1. 如何更新权值呢?


    ICLR'16 best paper 深度压缩,加速网络前传_第4张图片

在更新过程中,所有的梯度被分组,相同的颜色求和,再与学习率相乘,最后迭代的时候用共享的质心减去该值。

  1. 量化编码与权值共享,到底对压缩网络参数有多大效果?

    就拿上图为例,量化编码与权值共享

    [压缩前],矩阵为:4*4,每个元素float:32bit 共需:4*4*32 空间
    [压缩后],矩阵为:4*4 ,每个元素需要2bit(编码0-3,00,01,10,11)。加上一个map(4*1*32),共需: 160bit
    压缩比: 4*4*32 /160 =3.2

论文中有公式,但是很难理解,可以直接对着上图理解,来算压缩比

3 Huffman Coding

霍夫曼编码是一个最优的前缀码,通常被用于无损失数据压缩。它用可变长码字去编码源符号。通过每个符号的发生概率驱动,更常见的符号用较少的bits表达。

至于霍夫曼编码的细节原理,以及c++code,我会另写一个博客,本文不做细节讨论。

总结

这个文章非常好,解决了现在的深度学习在资源受限条件下应用不起来的尴尬。
但是,为什么模型压缩了将近40倍,前传的时间却只是提升了几倍呢?正常理解前传的时间也应该有客观的提升。
我在YouTube上看了作者的oral,他指出,这是由于:对于没有压缩的网路而言,Nvidia,或者Intel都有相应的GPU,CPU加速库。但是对于这篇文章的方法,还没有合适的加速库,或者硬件级加速。

4 实验部分

正在进行,敬请期待

你可能感兴趣的:(网络压缩)