Compression Deep Neural Networks With Pruning, Trained Quantization And Huffman Coding

本文主要是介绍Compression Deep Neural Networks With Pruning, Trained Quantization And Huffman Coding,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本次介绍的方法为“深度压缩”,文章来自2016ICLR最佳论文 《Deep Compression: Compression Deep Neural Networks With Pruning, Trained Quantization And Huffman Coding
转自:http://blog.csdn.net/shuzfan/article/details/51383809 (内含多篇可供参考文章)

Introduction

神经网络功能强大。但是,其巨大的存储和计算代价也使得其实用性特别是在移动设备上的应用受到了很大限制。

所以,本文的目标就是:降低大型神经网络其存储和计算消耗,使得其可以在移动设备上得以运行,即要实现 “深度压缩”

实现的过程主要有三步:

(1) 通过移除不重要的连接来对网络进行剪枝

(2) 对权重进行量化,使得许多连接共享同一权重,并且只需要存储码本(有效的权重)和索引;

(3) 进行霍夫曼编码以利用有效权重的有偏分布

具体如下图: 
总体框架

Network Pruning

“剪枝”详细点说也可以分为3步:

(1) 进行正常的网络训练;

(2) 删除所有权重小于一定阈值的连接

(3) 对上面得到的稀疏连接网络再训练

存储稀疏结构时采用的是稀疏压缩行CSR或者稀疏压缩列CSC,假设非0元素个数为a,行或者列数为n,那么我们需要存储的数据量为 2a+n+1。 
以CSR为例,我们存储时采用的是3元组结构,即:行优先存储a个非零数,记为A;a个非零数所在列的列号;每一行第一个元素在A中的位置+非零数个数。

为了进一步压缩,这里不存储绝对位置的索引,而是存储相对位置索引。如果相对索引超过了8,那么我们就人为补0。如下图: 
相对索引编码

Trained Quantization And Weight Sharing

这一部分通过对权重进行量化来进一步压缩网络(量化可以降低表示数据所用的位数)。

通过下图,我们来说明如何对权重进行量化,以及后续又如何对量化网络进行再训练。

量化训练

首先,假设我们输入神经元有4个,输出神经元也是4个,那么我们的weight应该是4x4,同样梯度也是。

然后,我们量化权重为4阶,即上图用4种不同颜色表示。这样的话我们就只需要存储4个码字以及16个2bit的索引。

最后,我们应该如何再训练,即如何对量化值进行更新。事实上,我们仅对码字进行更新。具体如上图的下部分:计算相同索引处的梯度之和,然后乘以学习率,对相应的码字进行更新。

实际当中,对于AlexNet,作者对卷积层使用了8bit量化(即有256个码字),对全连接层使用了5bit量化(即有32个码字),但是却不损失性能

关于如何确定码字:

作者对训练好网络的每一层(即不同层之间权重不共享)的权重进行K-means,聚类中心便是要求的码字。有一点需要注意,K-means聚类时需要初始化聚类中心,不同的初始化方法对最后的聚类结果影响很大,从而也会影响网络的预测精度。这里比较了Forgy(random), density-based, and linear initialization这三种初始化方法。

下图画出了AlexNet中conv3层的权重分布,其中红色线表示概率密度分布PDF,蓝色线表示CDF。显然,剪枝后的网络权重符合双峰分布。图的下方,显示了3种不同初始化方法最后收敛到的聚类中心。

权重分布

有一点我们需要注意:大权重比小权重的作用要大。因此,从上图来看虽然Forgy(random), density-based方法比较好的拟合了数据分布,但是它们忽略了那些绝对值较大的权重,而linear initialization就不会有这个问题。

因此,文章采用线性初始化,实验也证明了其正确性。

下图是finetune前后的码字分布: 
finetune前后

Huffman Coding

Huffman编码按照符号出现的概率来进行变长编码。下面的权重以及索引分布来自于AlexNet的最后一个全连接层。由图可以看出,其分布是非均匀的,因此我们可以利用Huffman编码来对其进行处理,最终可以使的网络的存储减少20%~30%。 
huffman code

Experiment Results

文章主要在LeNet、AlexNet和VGGNet上做的实验,我这里只列出一部分。 
实验

这篇关于Compression Deep Neural Networks With Pruning, Trained Quantization And Huffman Coding的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050219

相关文章

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

MonoHuman: Animatable Human Neural Field from Monocular Video 翻译

MonoHuman:来自单目视频的可动画人类神经场 摘要。利用自由视图控制来动画化虚拟化身对于诸如虚拟现实和数字娱乐之类的各种应用来说是至关重要的。已有的研究试图利用神经辐射场(NeRF)的表征能力从单目视频中重建人体。最近的工作提出将变形网络移植到NeRF中,以进一步模拟人类神经场的动力学,从而动画化逼真的人类运动。然而,这种流水线要么依赖于姿态相关的表示,要么由于帧无关的优化而缺乏运动一致性

A Comprehensive Survey on Graph Neural Networks笔记

一、摘要-Abstract 1、传统的深度学习模型主要处理欧几里得数据(如图像、文本),而图神经网络的出现和发展是为了有效处理和学习非欧几里得域(即图结构数据)的信息。 2、将GNN划分为四类:recurrent GNNs(RecGNN), convolutional GNNs,(GCN), graph autoencoders(GAE), and spatial–temporal GNNs(S

Deep Ocr

1.圈出内容,文本那里要有内容.然后你保存,并'导出数据集'. 2.找出deep_ocr_recognition_training_workflow.hdev 文件.修改“DatasetFilename := 'Test.hdict'” 310行 write_deep_ocr (DeepOcrHandle, BestModelDeepOCRFilename) 3.推理test.hdev

OpenSNN推文:神经网络(Neural Network)相关论文最新推荐(九月份)(一)

基于卷积神经网络的活动识别分析系统及应用 论文链接:oalib简介:  活动识别技术在智能家居、运动评估和社交等领域得到广泛应用。本文设计了一种基于卷积神经网络的活动识别分析与应用系统,通过分析基于Android搭建的前端采所集的三向加速度传感器数据,对用户的当前活动进行识别。实验表明活动识别准确率满足了应用需求。本文基于识别的活动进行卡路里消耗计算,根据用户具体的活动、时间以及体重计算出相应活

Complex Networks Package for MatLab

http://www.levmuchnik.net/Content/Networks/ComplexNetworksPackage.html 翻译: 复杂网络的MATLAB工具包提供了一个高效、可扩展的框架,用于在MATLAB上的网络研究。 可以帮助描述经验网络的成千上万的节点,生成人工网络,运行鲁棒性实验,测试网络在不同的攻击下的可靠性,模拟任意复杂的传染病的传

Convolutional Neural Networks for Sentence Classification论文解读

基本信息 作者Yoon Kimdoi发表时间2014期刊EMNLP网址https://doi.org/10.48550/arXiv.1408.5882 研究背景 1. What’s known 既往研究已证实 CV领域著名的CNN。 2. What’s new 创新点 将CNN应用于NLP,打破了传统NLP任务主要依赖循环神经网络(RNN)及其变体的局面。 用预训练的词向量(如word2v

【机器学习】生成对抗网络(Generative Adversarial Networks, GANs)详解

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 生成对抗网络(Generative Adversarial Networks, GANs)详解GANs的基本原理GANs的训练过程GANs的发展历程GANs在实际任务中的应用小结 生成对

Show,Attend and Tell: Neural Image Caption Generation with Visual Attention

简单的翻译阅读了一下 Abstract 受机器翻译和对象检测领域最新工作的启发,我们引入了一种基于注意力的模型,该模型可以自动学习描述图像的内容。我们描述了如何使用标准的反向传播技术,以确定性的方式训练模型,并通过最大化变分下界随机地训练模型。我们还通过可视化展示了模型如何能够自动学习将注视固定在显着对象上,同时在输出序列中生成相应的单词。我们通过三个基准数据集(Flickr9k,Flickr

Introduction to Deep Learning with PyTorch

1、Introduction to PyTorch, a Deep Learning Library 1.1、Importing PyTorch and related packages import torch# supports:## image data with torchvision## audio data with torchaudio## text data with t