[deep compression] compressing deep neural networks 论文学习

来源:互联网 发布:prezi 5.2.3 for mac 编辑:程序博客网 时间:2024/05/22 05:21

deep compression 深度压缩 ICLR2016
论文地址:https://arxiv.org/abs/1510.00149

deep compression 分为三步,针对fully connected layer压缩:
(1) network pruning
(2) weight sharing
(3) huffman coding


1,network 剪枝

剪枝过程看作是最小化loss的过程:

这里写图片描述

这里的L是损失函数,里面是权重W和二值mask的点积,这里的二值mask表示的是参数w重要与否,比如w1是重要的权重参数,所以h1=1,反之h1=0.

那么怎么知道这个w的重要性呢?!

这里写图片描述

论文中说设置了threshold,这个阈值是w的绝对值平均值(the average absolute value), a=threshold, b=threshold+t ( t 是很小的实数 a small margin t ).

这个式子这样想比较容易理解:将a和b看成同一个阈值,实际上它们相差非常小,只是一个很小很小的t, 看成同一个threshold影响不大。所以这里实际上就两种情况,一种大于threshold, 表示这个w是重要的,另一种是小于threshold, 表示这个w不重要,可有可无,可以修剪掉。W采用拉格朗日和梯度下降机制来更新:

这里写图片描述

反复剪枝,观察loss的变化,如果loss上升,证明这个剪枝不明智,重新修剪,流程图如下:

这里写图片描述

修剪w之后, 权值分布分成大于零和小于零两部分,论文中没有解释为什么需要修剪成w这样分布,是不是大于零的表示这个w对loss有着正影响,小于零的表示负影响,但是为什么要这样分别考虑影响?说明吧负影响的剪掉?!

这里写图片描述


2,权值共享

论文中认为,权值相差很小的w没有必要单独使用不同的权重值,这些相差很小的w群体可以共享一个average weight。此处用k均值聚类算法,但是K均值算法有个bug是初始化会严重影响聚类效果,所以这里采用了Forgy, Density-based 和 Linear 三种方法来对比初始化权值的效果, 并且选择了13 聚类数。

这里写图片描述


3,Huffman 编码

用于最后的硬压缩,减小parameters memory


总体流程图:

这里写图片描述


experimental result

这里写图片描述

这里写图片描述

这里写图片描述

阅读全文
0 0
原创粉丝点击