一、概述

量化:

  • 剪枝是删除不重要的权重参数,量化则是减少存储权重的bit,将权重存储在更小的空间中;
  • 权重不需要以高精度方式存储,甚至不应该以高精度方式存储;
  • 如果用简单的量化方式效果并不好,需要一些训练量化参数的计较;

方法:

1、二值化

这是最简单的一种量化方式,就是用0-1两个值代替原来的参数值,往往能达到32倍的压缩程度;该方法能够大大提升模型的训练和推理速度,但性能明显下降;也可以采用一种二值化变体,就是用两个常量(C1和C2)来替代0-1两个值,阈值也可以修改;

缺点:损失精度过多,并且在RNN和LSTM等复杂模型上表现不佳,加剧了梯度消失、爆炸的影响,一般不适用该方式;

2、三元量化

三元量化则是分段为三个,也就是分为两个阈值,也可以根据伯努利分布和参数矩阵以一定的概率分配状态,引入了随机性后鲁棒性较好,可以说是基于概率的三元量化;

3、训练量化

思想是使用K-means聚类对权重进行聚类,其中聚类的数量根据所需的bit决定;为每一个权重创建一个code book,用其进行前向传播,梯度计算并更新每个集群的聚类中心;

二、流程

第一步:对训练过的权值进行聚类,并且用所属的聚类中心替换它们的值;

可以看出,对于16个数值,聚类成了4个数值;

第二步:用新权重向前传递计算梯度,最终对聚类中心进行梯度下降的参数更新;

可以看出,梯度也通过聚类的方式进行更新;

结论:对于参数的保存来说,现在只需要存储集群索引和聚类中心的值就可以了,当然仅仅用这种聚类的方法压缩的程度还不够,结合之后讲解的Huffman编码,可以有效地表示权值,最终模型可以实现大幅度地压缩,并且仅损失较小的精度;

三、优缺点

优点:

  • 量化也可以在训练间和训练后应用;

  • 可以应用于各种类型的神经网络结构;

缺点:

  • 量化的权值使得神经网络更难收敛,为了保证性能,需要较小的学习率;
  • 量化的权值使得反向传播不可行,因为梯度不能通过离散神经元反向传播;需要用近似的方法来估计损失函数相对于离散神经元的梯度;

四、代码案例

import torch
import numpy as np
from sklearn.cluster import KMeans
from scipy.sparse import csc_matrix, csr_matrixdef apply_weight_sharing(model, bits=5):"""Applies weight sharing to the given model"""# 遍历每一层for module in model.children():dev = module.weight.device# 从cuda中将weight取出来weight = module.weight.data.cpu().numpy()shape = weight.shape# 构建稀疏矩阵mat = csr_matrix(weight) if shape[0] < shape[1] else csc_matrix(weight)min_ = min(mat.data)max_ = max(mat.data)# 通过传进来的参数bits,计算聚类中心个数space = np.linspace(min_, max_, num=2**bits)# 这里定义了一个Kmeans训练器kmeans = KMeans(n_clusters=len(space), init=space.reshape(-1,1), n_init=1, precompute_distances=True, algorithm="full")kmeans.fit(mat.data.reshape(-1,1))new_weight = kmeans.cluster_centers_[kmeans.labels_].reshape(-1)mat.data = new_weight# from_numpy的作用就是将numpy转换为tensormodule.weight.data = torch.from_numpy(mat.toarray()).to(dev)

上述代码表示用聚类的方法,通过聚类中心代表聚类的每个数的值,大大减小了计算量;

五、Huffman Encoding(霍夫曼编码)

简介:

量化是对权值的离散化,霍夫曼编码是一种无损的数据压缩方式,根据离散值的出现情况频率存储值,字符的频率越高的在位上存储越少;

利用稀疏矩阵索引大大降低了存储需求,根据实验数据,Huffman编码在保持性能不变的前提下,将模型减少了8倍至18倍;

总结:

霍夫曼编码可以理解成一种数据结构,通过将浮点数转换为二进制文件,达到减少存储量的作用;并且分为编码和解码,类似于深度学习中的特征下采样和上采样,本质上也是减少计算量;

六、总结

Tensorflow官网也提供了模型压缩的参考文档:官方网站
下图为一个量化的总结图:

【模型压缩】(三)——量化相关推荐

  1. 韩松老师模型压缩--三步剪枝法学习笔记

    韩松老师模型压缩–三步剪枝法学习笔记 Learning both Weights and Connections for Efficient Neural Networks Abstract 神经网络 ...

  2. 浅谈模型压缩之量化、剪枝、权重共享

    之前陆陆续续看了许多模型压缩相关的文章,自己业务中也接触过一些相关的客户,今天周末没事做,把模型压缩相关的内容整理一下做个分享.可能更多地从科普的角度去介绍,因为我也不是专业做这方面技术的研究. 首先 ...

  3. 闲话模型压缩之量化(Quantization)篇

    1. 前言 这些年来,深度学习在众多领域亮眼的表现使其成为了如今机器学习的主流方向,但其巨大的计算量仍为人诟病.尤其是近几年,随着端设备算力增强,业界涌现出越来越多基于深度神经网络的智能应用.为了弥补 ...

  4. 深度学习模型压缩(量化、剪枝、轻量化结构、batch-normalization融合)

    "目前在深度学习领域分类两个派别,一派为学院派,研究强大.复杂的模型网络和实验方法,为了追求更高的性能:另一派为工程派,旨在将算法更稳定.高效的落地在硬件平台上,效率是其追求的目标.复杂的模 ...

  5. 模型压缩:量化、剪枝和蒸馏

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 编者荐语 近年来,BERT 系列模型成了应用最广的预训练语言模型, ...

  6. 模型压缩之量化入门笔记||量化基本公式的理解||量化过程可视化||LSQ公式理解

    文章目录 公式介绍 量化零点 z z z 在离散化过程中的作用 量化尺度 s s s 在离散化过程中的作用 量化尺度 s s s 和量化零点 z z z 联合作用 公式介绍   本人初入模型量化的坑, ...

  7. 系统学习深度学习(二十九)--模型压缩

    参考:https://blog.csdn.net/wspba/article/details/75671573 若有不对,欢迎指正,先谢了 目前,通常意义上的网络模型压缩,主流思路有两个方向,一个是设 ...

  8. 深度学习模型压缩与加速

    深度神经网络在人工智能的应用中,包括语音识别.计算机视觉.自然语言处理等各方面,在取得巨大成功的同时,这些深度神经网络需要巨大的计算开销和内存开销,严重阻碍了资源受限下的使用.模型压缩是对已经训练好的 ...

  9. 【视频课】深度掌握模型剪枝+模型量化+知识蒸馏3大核心模型压缩技术理论!...

    前言 欢迎大家关注有三AI的视频课程系列,我们的视频课程系列共分为5层境界,内容和学习路线图如下: 第1层:掌握学习算法必要的预备知识,包括Python编程,深度学习基础,数据使用,框架使用. 第2层 ...

最新文章

  1. linux dns 添加mx,linux dns配置
  2. 2021年10个激动人心的工程里程碑
  3. android闪退日志收集
  4. 芯片开发者46%年收入达30万元,7纳米制程以内开发者30%超50万元
  5. imp.load_module(#39_pywrap_tensorflow_internal#39
  6. 基于 Flink 的严选实时数仓实践
  7. NEO versus Ethereum: Why NEO might be 2018’s strongest cryptocurrency
  8. Lintcode--6(767)--翻转数组
  9. 树、二叉树、二叉搜索树_检查二叉树是否为BST(二叉搜索树)
  10. error: Microsoft Visual C++ 14.0 is required.
  11. Elizabeth Taylor【伊丽莎白·泰勒】
  12. Java中String.split和StringUtils.split性能比较
  13. mysql字符串处理函数left()、length()使用
  14. 人生需要积极勇敢的去面对
  15. 近些年deep learning在推荐系统的应用
  16. DEDE友情链接修改
  17. 联想笔记本使用Driver Booster更新驱动触控板失效解决方案
  18. PHP连接msSQL数据库方法
  19. 批处理修改网关和dns服务器,[转载]使用批处理自动修改IP地址网关和DNS
  20. 有一个小于500的三位数abc,对于这三个数,甲乙丙丁有如下说法:.......................请问2a+b-c等于多少?

热门文章

  1. 5个让你爱上做计划的计划管理软件,每一个都非常好用!
  2. TRW破解计量器具管理系统MEMS2.0
  3. 软件破解初级实例教程(附工具附图)
  4. 蚂蚁金服原副总裁漆远加盟复旦大学,任人工智能院长
  5. 微信公众号文章已经获授权加入白名单了,为什么系统还是自动替换成原文章?
  6. 【Envi】基于单窗算法的地表温度反演实验操作记录
  7. 银行接口开发记录(招商银行,工商银行,建设银行)
  8. 腾讯云Windows Server 2012 R2安装wamp2.5提示缺少msvcr100.dll文件的解决方案
  9. eyoucms自媒体新闻资讯类网站模板
  10. 远程办公利器——利用cpolar内网穿透在家远程公司内网电脑