深度压缩

DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN CODING:用剪枝、训练量化和霍夫曼编码压缩深度神经网络

这篇论文是Stanford的Song Han的 ICLR2016 的 best paper

1 Abstract

  • 论文想解决的问题?

    神经网络的计算密集性以及内存密集性使得其在嵌入式设备上难以部署

  • 论文如何解决该问题?

    • 通过剪枝减少连接数量

    • 通过量化权重增加共享权重

    • 应用哈夫曼编码

  • 应用结果

    • 减少AlexNet、VGG-16在ImageNet上的训练所需内存,不掉精度

    • 允许将模型装入片上静态存储器,而不是片外动态存储器

    • 有效应用于受带宽限制的移动应用

    • 在cpu、gpu、移动gpu上更快的分层速度和能源效率

2 Introduction

  • 研究背景

3 Network Pruning 网络剪枝

  • 剪枝过程 先正常训练学习连接性,然后将权重低于阈值的连接删除(剪枝),最后重新训练网络学习剩余稀疏连接的最终权重。

    根据作者之前的论文,阈值(threshold)的计算方式为:


     s是参数,称为灵敏度,std为层权重参数的标准差

  • 存储方式
    补充知识:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵

    对于稀疏矩阵来说,采用二维数组的存储方法既浪费大量的存储单元用来存放零元素,又要在运算中花费大量的时间来进行零元素的无效计算。所以必须考虑对稀疏矩阵进行压缩存储。

    通过压缩稀疏行(CSR) 或者压缩稀疏列(CSC)格式,来存储剪枝后的稀疏结构。CSR实现细节:Compressed Sparse Row(CSR)——稀疏矩阵的存储格式 - 知乎 (zhihu.com)

  • 为了进一步压缩

4 训练量化和权重共享

TRAINED QUANTIZATION AND WEIGHT SHARING

  • 通过减少表示权重的比特位数量,网络量化和共享权重将更大程度的压缩被修剪后的网络。通过让多个连接共享相同的权重来限制需要存储的有效权重的数量,然后对这些共享权重进行微调。

  • 权重被量化为四个箱(颜色),同一个箱的所有权重共享一个权值,因此对于每个权重,只需要将一个小索引存储到共享权重表中。在更新期间,所有梯度都按颜色分组并相加在一起,乘以学习率并被上次迭代的共享质心减去从而得到新的共享质心。

  • 压缩率计算

    n为连接数,k为簇数,b为每个连接所占位数

    比如上图,原本有4x4=16个连接每个占32位,16个权重值,将其分为4簇,则n=16,b=32,k=4则 r = 16 x 32 ÷ (16 x log4 + 4 x 32) = 3.2

  • 权重初始化 质心初始化影响聚类质量,从而影响网络的预测精度。作者采用以下三种方法:

    (1)Forgy 随机初始化

    (2)基于密度初始化

    (3)线性初始化:初始化在原始权重的[min,max]之间线性间隔质心。与前两种方法相比,该初始化方法对权重的分布是不变的,并且是最分散的。

实验表明线性初始化效果最佳。

  • 前馈和反向传播

一维k均值聚类的中心是共享权值。在查找权值表的前向阶段和后向传播阶段存在一个间接层。为每个连接存储共享权重表的索引。在反向传播过程中,计算每个共享权的梯度,并用于更新共享权。

质心梯度计算公式:

L表示损失,Wij表示权重,I表示Wij的质心索引,Ck表示层的第k个质心,指示符函数

  • 哈夫曼编码

Huffman Coding 是一种非常常用的无损编码技术。它按照符号出现的概率来进行变长编码。上图的权重以及权值索引分布来自于AlexNet的最后一个全连接层。由图可以看出,其分布是非均匀的、双峰形状,因此我们可以利用Huffman编码来对其进行处理,最终可以进一步使的网络的存储减少20%~30%。

5 实验

6 代码

我将模型剪枝进行了简单的复现,采用的是百分比取阈值的方式

项目连接:DeepLearning/神经网络剪枝 at main · NongGX/DeepLearning (github.com)

参考:

(9条消息) DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN_落地生根1314的博客-CSDN博客

【深度神经网络压缩】Deep Compression (ICLR2016 Best Paper) - 知乎 (zhihu.com)

【DL论文精读笔记】 深度压缩的更多相关文章

  1. 【深度学习 论文篇 02-1 】YOLOv1论文精读

    原论文链接:https://gitee.com/shaoxuxu/DeepLearning_PaperNotes/blob/master/YOLOv1.pdf 笔记版论文链接:https://gite ...

  2. [置顶] 人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)

    这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...

  3. 论文学习笔记 - 高光谱 和 LiDAR 融合分类合集

    A³CLNN: Spatial, Spectral and Multiscale Attention ConvLSTM Neural Network for Multisource Remote Se ...

  4. GoogLeNetv3 论文研读笔记

    Rethinking the Inception Architecture for Computer Vision 原文链接 摘要 卷积网络是目前最新的计算机视觉解决方案的核心,对于大多数任务而言,虽 ...

  5. GoogLeNetv2 论文研读笔记

    Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 原文链接 摘要 ...

  6. GoogLeNetv1 论文研读笔记

    Going deeper with convolutions 原文链接 摘要 研究提出了一个名为"Inception"的深度卷积神经网结构,其目标是将分类.识别ILSVRC14数据 ...

  7. GoogLeNetv4 论文研读笔记

    Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning 原文链接 摘要 向传统体系结构中引入 ...

  8. [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding

    [论文阅读笔记] LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding 本文结构 ...

  9. [论文阅读笔记] Structural Deep Network Embedding

    [论文阅读笔记] Structural Deep Network Embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 现有的表示学习方法大多采用浅层模型,这可能不能 ...

  10. DL论文

    题目:Accurate Image Super-Resolution Using Very Deep Convolutional Networks(2016CVPR) 摘要:文中提出了一种高精度处理单 ...

随机推荐

  1. KingbaseES 两表关联Update的两种写法与性能

    熟悉oracle 的人都知道,对于两表的关联更新,其执行计划主要有 Filter 和 Outer Join 两种方式.对于大批量数据的update,Join方式明显是更优的选择.KingbaseES ...

  2. Docker_构建_运行总结

    样例: 构建镜像 build-image-fim-backend.sh echo "开始构建 fim-backend 镜像..." cp -rp ../target/fim-bac ...

  3. Ansible_playbook

    前言 连接https://galaxy.ansible.com下载相应的roles # 列出已安装的galaxy ansible-galaxy list # 安装galaxy ansible-gala ...

  4. flutter系列之:flutter中常用的ListView layout详解

    目录 简介 ListView详解 ListView中的特有属性 ListView的构造函数 ListView的使用 总结 简介 ListView是包含多个child组件的widget,在ListVie ...

  5. WinUI 3 踩坑记:第一个窗口

    本文是 WinUI 3 踩坑记 的一部分,该系列发布于 GitHub@Scighost/WinUI3Keng,文中的代码也在此仓库中,若内容出现冲突以 GitHub 上的为准. WinUI 3 应用的 ...

  6. 新渲染引擎、自定义设计和高质量用户体验的样例应用 Wonderous 现已开源

    探索世界奇观,并体验 Flutter 的强大之处. Flutter 的愿景是让你能够在空白画布上绘制出不受限制的精美应用.最近,通过与 gskinner 团队的通力合作,我们打造了一个全新的移动应用 ...

  7. Kubernetes Operator: Operator

    Operator 就可以看成是 CRD 和 Controller 的一种组合特例,Operator 是一种思想,它结合了特定领域知识并通过 CRD 机制扩展了 Kubernetes API 资源,使用 ...

  8. Elasticsearch: Ngrams, edge ngrams, and shingles

    Ngrams和edge ngrams是在Elasticsearch中标记文本的两种更独特的方式. Ngrams是一种将一个标记分成一个单词的每个部分的多个子字符的方法. ngram和edge ngra ...

  9. Traefik 2.0 实现灰度发布

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247484478&idx=1&sn=238390dc ...

  10. Fluentd部署详解

    Fluentd系统配置项 https://www.cnblogs.com/sanduzxcvbnm/p/13920972.html Fluentd自身日志 https://www.cnblogs.co ...