Too big model ?! Deep compress it !

2017 年 6 月 26 日 统计学习与视觉计算组 陈帅

在深度学习的各个领域有很多意义长远的研究,但有一个方向是最有挑战性,所带来的影响也会辐射到深度学习的各种应用,那就是研究深度学习本身。


今天给大家带来的论文是一篇斯坦佛大学 songhan的:

该篇论文是ICLR2016最佳论文,不论是从idea到行文风格,都是难得一见的好文,建议大家去读原文。


论文出发点:

VGG16应该是大家接触深度学习最基础的网络结构之一,从lenet 到 alexnet 再到VGG系列可以说是深度模型不顾一切向深发展的历程,直到VGG系列,大家发现,随着网络参数的增加,模型越来越大,当VGG系列的模型达到1G的时候,大家认识到这种超大的模型严重限制了各种应用,所以在后来的研究中不止再往深发展,而是尝试让模型更小,所以GoogLeNet(请注意我对L的大写,看不懂其中含义请面壁)尝试使用小的卷积核代替大的,在模型更深的时候也保证了参数的大小,后来的resnet将网络加深到了1000层的时候,性能提升了很多,这时,有人提出疑问,我们学习了这么多的参数,真的都有用吗?

拿最基本的全连接来说,两层的网络结构直接进行全连接,但是所有都连接起来真的有用吗?这篇论文告诉你答案! 你网络连接的大多数都是在无用功 useful work!!

好多研究方向都在尝试让网络的训练时间更多,比如师弟以前讲过的对卷积操作做优化,不论是从高性能并行进行加速,还是im2col技巧,都是泡沫,都是泡沫,在这篇卷积网络的论文中,我们压根不做卷积操作。。。


策略:

看题目我们就可以知道这篇论文有三个idea:

  1. Prunes the network:只保留一些重要的连接;

  2. Quantize the weights:通过权值量化来共享一些weights;

  3. Huffman coding:通过霍夫曼编码进一步压缩;

先放一下实验效果镇楼

Pruning:把连接数减少到原来的 1/13~1/9

Quantization:每一个连接从原来的 32bits 减少到 5bits

感受不到效果?这么看:

- 把AlextNet压缩了35倍,从 240MB,减小到 6.9MB

- 把VGG-16压缩了49倍,从 552MB 减小到 11.3MB


网络剪枝:


研究过树系列算法的人应该很知道剪枝操作,这种操作的提出是为了防止过拟合而对所学习的树进行修剪。同样在深度学习里我们有没有可能修剪掉网络里不重要的连接?答案是肯定的。

众所周知,在深度学习里的网络权重代表着一个神经元的重要性,那么权重值灰常低的神经元我们是不是可以不要了?

对,就是这么简单,本论文的剪枝就是这么做的。。

方法:

  1. 正常的训练一个网络;

  2. 把一些权值很小的连接进行剪枝:通过一个阈值来剪枝;

  3. retrain 这个剪完枝的稀疏连接的网络;


Trained Quantization and Weight Sharing

学计算机组成原理的时候大家知道浮点数和整数的存储是不一样的,浮点数需要更多的空间来存储,从上个剪枝策略中我们发现连接可以剪枝,那么权重值本身能不能压缩呢?

答案是可以的,作者的策略是进行聚类,从上图的上侧可以看到权重原本使用浮点数进行存储,现在我们本层的权重进行聚类,比如我们聚成4个类别,代表图中上侧的四种颜色,得到了这个聚类核,原本的矩阵我们不再存权重,而是存聚类核的索引,这样在存储上都是存储的int类型,而网络所有的权重共享聚类结果,所以我们在例子中我们原本需要32bit存储权重,16层就需要32*16,而这样做,我们只需要2*16+8  8是聚类中心!!

看起来也挺简单的。。

这么设计权重怎么更新?

看上图的下侧,所有传回来的梯度按聚类中心分组,然后组内相加,得出一个梯度中心,然后在用这个梯度中心和权重中心按学习率相减就完成了一次更新。超赞。

怎么聚类?

就用k-means! 

注意,在网络中一个层是共享一个聚类中心的,但是在不同层之间不共享,不过 you can try it..

当然还有一些细节上的东西,比如k-means对聚类点初试点是非常敏感的,大家可以看到虽然这个聚类中心可以学习更新,但是初始化对其有很大的影响呢?

作者做了一个小实验:

用了五种初始化的方法,感觉属于k-means的东西,有时间可以深入的搞一下。


哈夫曼编码:

作者调取了最后全连接层权重的分布进行了统计,注意,权重都被我们聚类的一个中心了,所以最后的全连接层的分布的范围就是我们聚类的数目,从最终的结果发现,这个分布很。。l朴素? 好吧就用这个词了,就像一个高斯可以用一个高斯分布进行量化一样,而对于这种分布可以用哈夫曼进行编码,原文:

这个哈夫曼编码具体编码。有点弄不懂,大家讨论。


一大波实验来袭:




总结:

这篇论文非常棒,但是需要很强的工程实现。

登录查看更多
0

相关内容

【Google】监督对比学习,Supervised Contrastive Learning
专知会员服务
75+阅读 · 2020年4月24日
神经网络的拓扑结构,TOPOLOGY OF DEEP NEURAL NETWORKS
专知会员服务
33+阅读 · 2020年4月15日
【MIT深度学习课程】深度序列建模,Deep Sequence Modeling
专知会员服务
78+阅读 · 2020年2月3日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
28+阅读 · 2020年1月16日
Deep Compression/Acceleration:模型压缩加速论文汇总
极市平台
14+阅读 · 2019年5月15日
总结-空洞卷积(Dilated/Atrous Convolution)
极市平台
41+阅读 · 2019年2月25日
博客 | CIFAR10 数据预处理
AI研习社
11+阅读 · 2018年10月12日
深度学习面试100题(第31-35题)
七月在线实验室
8+阅读 · 2018年7月16日
深度学习面试100题(第6-10题)
七月在线实验室
7+阅读 · 2018年7月9日
【发展历程】从LeNet-5到DenseNet
GAN生成式对抗网络
3+阅读 · 2017年11月20日
从LeNet-5到DenseNet
AI研习社
9+阅读 · 2017年11月18日
[深度学习] AlexNet,GoogLeNet,VGG,ResNet简化版
机器学习和数学
20+阅读 · 2017年10月13日
【深度】Deep Visualization:可视化并理解CNN
专知
11+阅读 · 2017年9月30日
深度撕裂的台湾:Semantics-Preserving Hash
我爱读PAMI
4+阅读 · 2017年3月29日
Arxiv
8+阅读 · 2018年1月19日
VIP会员
相关资讯
Deep Compression/Acceleration:模型压缩加速论文汇总
极市平台
14+阅读 · 2019年5月15日
总结-空洞卷积(Dilated/Atrous Convolution)
极市平台
41+阅读 · 2019年2月25日
博客 | CIFAR10 数据预处理
AI研习社
11+阅读 · 2018年10月12日
深度学习面试100题(第31-35题)
七月在线实验室
8+阅读 · 2018年7月16日
深度学习面试100题(第6-10题)
七月在线实验室
7+阅读 · 2018年7月9日
【发展历程】从LeNet-5到DenseNet
GAN生成式对抗网络
3+阅读 · 2017年11月20日
从LeNet-5到DenseNet
AI研习社
9+阅读 · 2017年11月18日
[深度学习] AlexNet,GoogLeNet,VGG,ResNet简化版
机器学习和数学
20+阅读 · 2017年10月13日
【深度】Deep Visualization:可视化并理解CNN
专知
11+阅读 · 2017年9月30日
深度撕裂的台湾:Semantics-Preserving Hash
我爱读PAMI
4+阅读 · 2017年3月29日
Top
微信扫码咨询专知VIP会员