目录
1. 什么是量化
量化可以理解为:从连续到离散,针对parameters(W)、activations(A)使用整数值取代浮点数值,
模型尺寸更小
改进inference时间
减小内存使用
更低的功耗/能量(单位焦耳)
一些GPUs支持
FPGAs和ASICs能够更激进的量化
量化技术的发展:
可量化的对象:输入值、特征值、权重\偏置项、误差\梯度值
量化位宽:1bit、8bit、3/4/6bit、float16、混合bit(不同层不同位宽)
神经网络的量化:高精度(位宽)转化成低精度(位宽),比如float32 -> float16, int8, int4, int2 等,缩小可表示的空间大小(位宽)bit width
2 位宽,高精度浮点数的表示
exponent / integer bits + fraction / precision bits
32位:
8位
64位:
如果我们从FP32减小位宽到FP16,或使用整数INT8,不就节省内存和计算资源了
3. K-means 聚类量化
将参数一维数组进行聚类
所下图所示权重矩阵的所有参数可以聚类为 4 个类别,不同的类别使用不同的颜色表示。
上半部分的权重矩阵可以取聚类中心,并储存在 centroids 向量中,
随后原来的权重矩阵只需要很少的空间储存对应的索引。
下半部是韩松等研究者利用反向传播的梯度对当前centroids 向量进行修正的过程。 注意这里有个根据weight颜色进程group的操作
这种量化过程能大量降低内存的需求,因为我们不再需要储存 FP64 或 FP32 的数据,而只需要储存INT8 或更少占位的数据。
4. 均匀/线性量化(linear quantization)
非对称量化与对称量化
非对称线性量化就是线性缩放肯定是需要bias偏置项的
量化权重为n-bit整数,公式如下:
当然量化之后如果要计算,还需要恢复成原始值进行运算,还原公式:
矩阵相乘-量化加速计算:
对称线性量化(Symmetric linear quantization):
还原公式:
注意这里没有bias
5. Thresholding量化
模型为了去拟合一些离群值或异常样本,很有可能学到一些不太常见的参数,从而使得过拟合,对测试集反而失去很大的精度。我们都知道weights越小越可以防止过拟合,将权重压制到-T到T之间。
这个T是权重里面的两端,一图胜千言:
如何选择合适的 threshold?
标签:权重,--,模型,聚类,线性,量化,92 From: https://www.cnblogs.com/cavalier-chen/p/18281600