深度压缩

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 R6 集群“双主”故障解决案例

    实际工作中,可能会碰到集群脑裂的情况,在脑裂时,会出现双 primary情况.这时,需要用户介入,人工判断哪个节点的数据最新,减少数据丢失. 一.测试环境信息 操作系统: [kingbase@node ...

  2. linux中cd后自动 ls的设置

    根据不同的shell设置不太一样.常见的有bash csh两种.可以用echo $SHELL来查询当前是哪一种. bash设置是在用户的home下打开.bashrc在里面加上如下: cd() { bu ...

  3. LFS(Linux From Scratch)构建过程全记录(五):交叉工具链的构建

    写在前面 本文将详细讲述如何构建工具链 前置知识 在LFS-BOOK中,我们需要学习一些关于"交叉编译"的内容,详见书本 安装Binutils-2.39 我们cd到sources文 ...

  4. 2、String类

    String类 String 对象用于保存字符串,也就是一组字符序列 字符串常量对象是用双引号括起来的字符序列,例如:"你好"."12.07"."bo ...

  5. avue常用场景记录

    接手的一个项目使用的是avue这个傻瓜式的专门给后端人员用的框架,文档不够友好,使用起来各种蛋疼(咱专业前端基本上不使用).为此,专门记录一下.当前avue版本2.8.12,如果要切换avue的版本, ...

  6. Kubernetes 日志:搭建 EFK 日志系统

    Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch.Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案. Elasticsearch 是一个 ...

  7. 5.第四篇 Etcd存储组件高可用部署

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483792&idx=1&sn=b991443c ...

  8. 迁移阿里云上的ECS操作说明

    背景: 1.公司测试服务器快要到期了,但是续费太贵,就想用另一个阿里云账号下的服务器作为测试服务器. 2.测试服务器原在阿里云账号A下,要迁移到阿里云账号B下 3.该测试服务器有一个系统盘和俩数据盘 ...

  9. 第六章:Django 综合篇 - 4:django-admin和manage.py

    目录 一.Django内置命令选项 check dbshell diffsettings flush makemigrations migrate runserver shell startapp s ...

  10. 为什么同行业,同个软件,有些 ERP 成功,有的失败了?

    企业的差异性是各类系统部署必须正视的关键问题!同行业,同个软件,有些 ERP 成功,有的失败,基本上是企业差异性没有得到重视的,所以一点也不应该感到奇怪.规模不同.行业不同.发展阶段不同.生产模式不同 ...