模型压缩-方案(三):模型量化【通过减少表示每个权重所需的“比特”数来压缩原始网络】【建立一种浮点数据和定点数据间的映射关系,可以有效的降低模型计算强度、参数大小和内存消耗,但往往带来巨大的精度损失】

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

一、量化综述

Neural Network模型一般都会占用很大的磁盘空间,比如AlexNet的模型文件就超过了200 MB.模型包含了数百万的参数,绝大部分的空间都用来存储这些模型的参数了。这些参数是浮点数类型的,普通的压缩算法很难压缩它们的空间。

一般模型的内部的计算都采用了浮点数计算,浮点数的计算会消耗比较大的计算资源(空间和cpu/gpu时间),如果在不影响模型准确率的情况下,模型内部可以采用其他简单数值类型进行计算的话,计算速度会提高很多,消耗的计算资源会大大减小,尤其是对于移动设备来说,这点尤其重要。由此引入量化技术。

对量化的实现是通过把常见操作转换为等价的八位版本达到的。涉及的操作包括卷积,矩阵乘法,激活函数,池化操作,以及拼接。对模型可以压缩到1/4。

在这里插入图片描述
对量化的实现是通过把常见操作转换为等价的八位版本达到的。涉及的操作包括卷积,矩阵乘法,激活函数,池化操作,以及拼接。对模型可以压缩到1/4。

我们发现模型属于同一层的参数值会分布在一个较小的区间内,比如-10, 30之间,我们可以记下这个最小值和最大值,在采用8位数量化(可以有其他选择)的情况下,可以把同一层的所有参数都线性映射(也可以采用非线性映射进一步压缩空间)到区间[-10, 30]之间的255个8位整数中的最接近的一个数,例如如下映射:

QuantizedFloat
0-10.0
25530.0
12810.0
这样模型文件的大小就基本压缩到了原来的25%,而且在加载的时候可以恢复到原来的数值,当然恢复的数值跟压缩之前会有差异,但事实证明,模型对这种压缩造成的噪音表现的很健壮。

满足第一个需求就这么简单,模型不需要改变,需要改变的是模型的存储和加载部分;但是要解决第二个问题就不这么简单了,事实证明,模型内部的计算如果都采用8位整形数来计算的话,模型的表现会相差很大,原因是模型的训练过程中,需要计算梯度,然后运用一定的学习算法,不断的更新参数,每次的更新量可能是很小的。所以模型的训练过程需要高精度的浮点型数值的。那么模型的预测过程是否可以使用整形数值代替呢?事实证明是可行的。

图1 原始的计算图
在这里插入图片描述
图2 量化后的计算图:
在这里插入图片描述




模型量化
一文搞懂模型量化
模型量化详解
深度学习之模型压缩(剪枝、量化)
模型量化了解一下?
模型量化
模型量化详解
Pytorch量化(torch.quantization)
轻松学Pytorch之量化支持
Pytorch 量化感知训练详解
Pytorch量化感知训练-代码示例
量化感知训练_HAWQ:基于 Hessian 的混合精度神经网络量化
PyTorch模型量化工具学习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值