【论文笔记】神经网络压缩调研

神经网络压缩调研

    • 背景
    • 现有的深度模型压缩方法
    • NetWork Prunning 网络剪枝
    • 设计结构化矩阵
    • 知识蒸馏
    • 权值共享
    • Parameter Quantization(参数量化)
    • 量化和二进制化
    • 伪量化
    • Architecture Design(Depth Separable Convolution)
    • 分解卷积

背景

 小模型,参数少,容易将ML模型部署在资源有限的设备上,但是直接训练一个好的小网络比较困难

现有的深度模型压缩方法

  • 基于参数修建和共享的方法针对模型参数的冗余性 试图取出冗余和不重要的项
  • 基于低秩因子分解的技术使用矩阵/张量分解来估计深度学习模型的信息参数
  • 基于传输/紧凑卷积滤波器的方法设计页数的卷积滤波器来降低存储和计算复杂度
  • 知识蒸馏方法通过学习一个蒸馏模型,训练一个更紧凑的神经网络来重现一个更大的网络输出

综述论文 :A Survey of Model Compression and Acceleration for Deep Neural Networks

在这里插入图片描述

  • 转移层和参数修剪和共享可以一起使用
  • 模型量化和二值化可以与低秩近似一起使用以实现进一步的加速

NetWork Prunning 网络剪枝

 删减神经网络没有用的参数

  • 过程如下(PPT)叙述一遍
  • 训练一个网络
  • 针对网络的每一个参数评估一下重要性 每一个神经元的重要性
  • 移除不重要的参数或者神经元
  • 微调 重新训练一下 Fine-tune
  • 反复进行多次

在这里插入图片描述

修剪的单位 参数或者神经元

  • 移除若干个权重参数,但是实际操作不好定义 因为结构不对称,而且当Network不规则,不方便使用GPU进行加速
  • 评价weight重要性,我们可以用绝对值衡量,即绝对值越大,weight越重要,或者采用之前介绍的life long learning的想法
  • 评价neuron重要性,我们可以用其输出的结果为0的次数衡量,即输出0越多越不重要。

在这里插入图片描述

  • neuron pruning
    一神经元为单位进行剪枝,通过去除冗余的神经元,简化网络结构。这样得到的网络结构是规则的,相比于Weight pruning,这种方式更好实现,也更容易通过GPU加速。
    在这里插入图片描述

训练一个大的模型,保留比较有用的模型参数 然后得到一个小的模型,这样得到的小模型效果和原始的大模型效果差不多,而不是直接训练一个小的模型

在这里插入图片描述

设计结构化矩阵

 如果一个Mxn矩阵可以使用一个少于mxn的参数来描述,就是一个结构化的矩阵,通常这样的结构不仅能减少内存消耗,还可以通过快速的矩阵-向量乘法和梯度计算显著加快推理和训练的速度

 但是问题是结构的约束会导致精确度的损失,因为约束可能给模型带来偏差,另外一个方面如何找到一个合适的矩阵结构是很困难的,没有理论来支持推导。

知识蒸馏

 首先定义一个比较大的网络Teacher Net,然后训练,那么训练后的网络,比如手写数字识别任务,预测1的结果概率是 1:0.7 7:0.2 9:0.1,在定义一个小的网络Student Net ,然后让他学习Teacher Net,如果让比较小的网络得到和比较大的网络一样的效果比较难train,所以直接按照大的network的训练结果训练小的网络,跟容易train。
在这里插入图片描述

这个Teacher Net不一定是一个巨大的network,也有可能是将多个network组合(ensemble)得到的。但是多个network组合的模型往往比较复杂,在实际应用中,我们可以训练一个Student Net,让结果逼近N Networks的结果,使得模型准确度差不多的情况下,复杂度大大减少。

关于只是蒸馏的一个小技巧,就算是在softmax函数的基础上对每一个输出的结果加上一个temperature,这样会对最后最后的预测结果进行一个平滑的处理,使得Student Net更好训练

 基于知识蒸馏方法可以令更深的模型降低计算成本,但是只能用于具有Softmax损失函数分类任务,这阻碍应用,但是另一个缺点是太严格,性能比不上其他方法,老师和学生可以是不同的网络结构,比如BERT蒸馏到BiLSTM网络,但是一般相似网络结构,蒸馏的效果会更好。

权值共享

 ALBert,十二层共用一套参数,从而使得参数量降低到原来的1/12.这个方案对于模型压缩得作用很大,但是对于推理加速则收效甚微,因为共享权值并没有带来计算量得减少

Parameter Quantization(参数量化)

 参数量化,称之为参数压缩,这种方法主要是对weigth在存储量上减少的一类方法,

  • 对于weight的精度可能不需要太高就可以获得一个比较好的效果,比如从64->32 其实就是减少减少数据的存储位数

  • 权重聚类:将神经网络所有的weight按照值得大小进行划分,数值差不多的聚集在一起,然后对每一个类取一个值,替换里面所有的权值,相当于每一个堆只用一个值就可以存储,这样存储得数据量大大减少

  • 采用哈夫曼编码,比较常见得东西使用比较少的bit描述,不常见得东西使用比较多得bit描述,但是平均起来存储得数据量大大减少。

在这里插入图片描述

量化和二进制化

在这里插入图片描述

 网络量化通过减少表示每一个权重所需要的比特数目来压缩原始网络

  • Vanhoucke使用8比特参数量化可以在准确率损失极小的同时实现大幅加速
  • Han S提出了一整套完整的深度网络的压缩流程:
  • 首先修建不重要的连接,重新训练稀疏连接的网络
  • 然后使用权重共享量化连接的权重,
  • 再对量化之后的权重和码本进行霍夫曼编码,以进一步降低压缩率
  • 修剪、量化、和霍夫曼编码

修建减少了需要编码的权重数量,量化和霍夫曼编码减少了用于对每个权重编码的比特数。对于大部分元素为0的矩阵可以使用稀疏表示,进一步降低空间冗余,且这种压缩机制不会带来任何准确率

伪量化

 保存模型每一层的时候,使用低精度来保存每一个网络参数,同时保存拉伸比例scale和对应的浮点数zeroPoint,然后在推理阶段,使用如下公式来还原网络参数32bit

在这里插入图片描述

存储的时候使用低精度进行量化,但是推理的时候还原为正常的高精度,为量化只能实现模型压缩,但是不能加速模型

Architecture Design(Depth Separable Convolution)

 CNN减少参数量得结构化设计,深度可分离卷积 PPT 介绍这部分 逐层卷积 逐点卷积

对于CNN,假设输入有两个channel,对应的filter也就是两个channel,假设有四个filter,每一个filter都是3 *3 的,那么输出也有四个channel,卷积层一共包含3 * 3 * 2 * 4 = 72个参数

在这里插入图片描述

深度可分离卷积:Depthwise Convolution

  • 有几个channel 就有几个filter
  • 每一个filter只管一个channel
  • 每一个filter在一个channel上进行convolution 卷积操作 生成一个channel
  • channel和channel之间的关系没法体现出来

Depthwise Convolution首先经过第一次卷积运算,DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。所以一个三通道的图像经过运算后生成了3个Feature map(如果有same padding则尺寸与输入层相同为5×5),

在这里插入图片描述

PointWise Convolution

在这里插入图片描述

  • 每一个filter扫描所有的channel 得到一个新的channel

Pointwise Convolution的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M为上一层的通道数。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map
在这里插入图片描述

对于深度可分离卷积DepthWise Separable Convolution 使用DepthWise Convolution和 PointWise Convlution 进行结合 ,用来提取特征feature map

相比常规的卷积操作,它的参数数量和运算成本比较低

神经网络压缩的几种方法,并不是互斥的,可以先使用一个方法,再接着使用剩余的一个或者几个方法,直到满足压缩条件

分解卷积

  • 使用两个串联得小卷积核来代替一个大的卷积核。inceptionV2中创造性的提出了两个3x3的卷积核代替一个5x5的卷积核,在效果相同的情况下,参数量仅为原先的3x3x2/5x5 = 18/25
  • 使用两个并联的非对称卷积核来代替一个正常卷积核,inceptionV3中将一个7x7的卷积拆分成一个1x7和一个7x1的卷积,卷积效果相同的情况下,大大减少了参数量,同时还提高了卷积的多样性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/51731.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

matlab Tabel操作

https://zhuanlan.zhihu.com/p/104266351 Table数据类型的引用要三点要注意: 1){}–花括号(curly braces),()–小括号(parentheses), .–圆点(dot)对Table类型数据的作用…

Qt实现思维导图锦集

序号简述文章导航1思维导图树形结构、不重叠且均匀分布、支持折叠和展开核心树2菜单按钮风格、菜单提示风格、侧滑菜单、侧滑功能窗口UI设计3支持JPEG、PNG、XML、JSON、PDF、SVG格式文件数据导入导出4支持撤销回撤功能、显示节点操作流程、点击可跳转历史撤销回撤5思维导图横向…

AB 压力测试

服务器配置 阿里云Ubuntu 64位 CPU1 核 内存2 GB 公网带宽1 Mbps ab -c100 -n1000 http://127.0.0.1:9501/ -n:在测试会话中所执行的请求个数。默认时,仅执行一个请求。 -c:一次产生的请求个数。默认是一次一个。 ab -c 100 -n 200 ht…

opencv-25 图像几何变换04- 透视 cv2.warpPerspective()

什么是透视? 透视是一种几何学概念,用于描述在三维空间中观察物体时,由于视角的不同而产生的变形效果。在现实世界中,当我们从不同的角度或位置观察物体时,它们会呈现出不同的形状和大小。这种现象被称为透视效果。 透…

list与sort()

运行代码: //list与sort() #include"std_lib_facilities.h" //声明Item类 struct Item {string name;int iid;double value;Item():name(" "),iid(0),value(0.0){}Item(string ss,int ii,double vv):name(ss),iid(ii),value(vv){}friend istre…

【计网】TCP在可靠传输中都干了啥

文章目录 1、概述2、校验和3、序列号和确认应答机制4、重传机制4.1、介绍4.2、超时重传4.3、快速重传 5、滑动窗口协议5.1、介绍5.2、发送方的滑动窗口5.3、接收方的滑动窗口 6、流量控制7、拥塞控制7.1、介绍7.2、慢开始7.3、拥塞避免7.4、快重传和快恢复 1、概述 TCP 是面向…

lib-flexible修改配置适配更多不同分辨率

找到设置宽度的地方 然后根据你的屏幕最大多大呀&#xff0c;最小多小呀设置一下 if (width / dpr < 1980) { width 1980 * dpr; } else if (width / dpr > 5760) { width 5760 * dpr; }

https://app.hackthebox.com/machines/Sau

https://app.hackthebox.com/machines/Sau https://app.hackthebox.com/machines/Sau1.info collecting └─$ nmap -A 10.10.11.224 -T4 Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-30 15:36 HKT Nmap scan report for 10.10.11.224 (10.10.11.224) Host is up (…

全局ip代理安全吗? 手机设置全局代理方法详解

全局IP代理并不一定是安全的&#xff0c;因为全局IP代理会将所有网络流量都通过代理服务器进行转发&#xff0c;包括敏感信息和隐私数据。如果代理服务器受到黑客攻击或存在安全漏洞&#xff0c;可能会导致数据泄露和其他安全问题。因此&#xff0c;在使用全局IP代理时&#xf…

Spring Boot实践四 --集中式缓存Redis

随着时间的积累&#xff0c;应用的使用用户不断增加&#xff0c;数据规模也越来越大&#xff0c;往往数据库查询操作会成为影响用户使用体验的瓶颈&#xff0c;此时使用缓存往往是解决这一问题非常好的手段之一。Spring 3开始提供了强大的基于注解的缓存支持&#xff0c;可以通…

【Leetcode】62.不同路径

一、题目 1、题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例1: 输入:m = 3, n = 7 输出:…

AD21原理图的高级应用(六)原理图设计片段的使用

&#xff08;六&#xff09;原理图设计片段的使用 Altium Designer 的片段功能可以很方便地重复使用一些单元模块,其中包括原理图的电路模块、PCB(包括布线)和代码模块。例如在工程中需要设计电源模块,而别的工程中又恰好有比较完善的电源模块,这时就可以通过片段功能重复地使用…

京东技术专家首推:Spring 微服务架构设计,GitHub 星标 128K

前言 本书提供了实现大型响应式微服务的实用方法和指导原则&#xff0c;并通过示例全面 讲解如何构建微服务。本书深入介绍了 Spring Boot、Spring Cloud、 Docker、Mesos 和 Marathon&#xff0c;还会教授如何用 Spring Boot 部署自治服务&#xff0c;而 无须使用重量级应用服…

03_使用execle表生成甘特图

背景 每次排期都需要话很多时间 很可能排期还不对头 这时候需要一个表能看到 1.什么时候项目结束 开始 转阶段 2.当前手上的活能不能做完 当前阶段手上有多少活 3.产品经理每次修改完计划迅速排期 甘特图生成 execle表生成 1.需要使用亿图创建甘特图 2.把当前的甘特图数据进…

TextClamp for Vue3.0(Vue3.0的文本展开收起组件)

呦&#xff01;大家好&#xff0c;好久没有更新博客了&#xff0c;最近实现了一个一直想自己完成的一个东西&#xff0c;就是文本的展开收起组件&#xff0c;以前项目需要用到&#xff0c;自己实现一个又太繁琐&#xff0c;所以那个时候都是用的别人的轮子&#xff0c;现在自己…

在Ail Linux中手动配置IPv6

第一步&#xff0c;登录阿里云服务器控制台&#xff0c;在“概览”页面找到对应实例&#xff0c;然后单击实例ID。 第二步&#xff0c;在“实例详情”页面中的“网络信息”栏目中&#xff0c;可以发现“IPv6 地址”中没有数据&#xff0c;然后单击“专有网络”的专有网络ID。 第…

Pandas进阶修炼120题-第三期(金融数据处理,51-80题)

目录 往期内容&#xff1a;第一期&#xff1a;Pandas基础&#xff08;1-20题&#xff09;第二期&#xff1a;Pandas数据处理&#xff08;21-50题&#xff09; 第三期 金融数据处理51.使用绝对路径读取本地Excel数据方法一&#xff1a;双反斜杠绝对路径方法二&#xff1a;r 拓展…

TypeScript算法题实战——剑指 Offer篇(5)

目录 一、平衡二叉树1.1、题目描述1.2、题解 二、数组中数字出现的次数2.1、题目描述2.2、题解 三、数组中数字出现的次数 II3.1、题目描述3.2、题解 四、和为s的两个数字4.1、题目描述4.2、题解 五、和为s的连续正数序列5.1、题目描述5.2、题解 六、翻转单词顺序6.1、题目描述…

大数据技术之Hive2

目录标题 3、Hive 数据类型3.1 基本数据类型&#xff1a;3.2 集合数据类型&#xff1a;3.3 类型转化 4、DDL数据定义4.1 创建数据库4.2 查询数据库4.3 创建表4.4 管理表4.5 外部表4.6 管理表与外部表的相互转换4.7 分区表4.7.1 分区表基本操作4.7.2 分区表注意事项 4.7 修改表4…

小程序picker 在苹果手机不兼容 bug,按month时在iPhone 显示不正确及自动定位时间问题

如下图&#xff1a;点击弹出时间列表&#xff1a;日历控件点击选择显示1年1月 解决: 加上起始时间字段 <picker mode"date" value"{{date}}" start"1970-09-01" end"2030-09-01"></picker> 问题二&#xff1a; 还是&a…