最近看了一篇文章,对神经网络进行压缩。方法简单并且十分有效。《Deep Compression: Compressing Deep Neural Networks with Pruning Trained Quantization and Huffman Coding》
文章讨论了深度神经网络的压缩。通过剪枝、量化和哈夫曼编码三个步骤将模型文件的大小压缩了35x-49x。
I. 剪枝
1.将所有小于阈值的链接从网络中删去
2.重新训练整个网络
3.存储稀疏的权值
diff表示与上一个稀疏元素位置之差。由于只用3个bit来编码diff,所以如果两个稀疏元素间隔超过8,就补上一个diff为8的0值权值。最终存储的是黄色高亮的部分。
II. 量化
1.同一范围内的权重分成一组,用一个数代替,组成centriods。
2.对应的每组的所有梯度相加,从centroids上减去
3.分组方式为 k-means clustering,即将n个权值W = {w1, w2, ..., wn} 分成 k 组 C = {c1, c2, ..., ck},并且使得:
III. 哈夫曼编码
由于网络中参数的分布是有偏的,可以通过哈夫曼编码的方式,用更短的码来表示出现更频繁的值。具体方法学过通信原理的都知道,网上也有很多资料,在此不再赘述。