可加性2的N次幂(APoT)量化,感觉容易被量化二字迷惑,其实用离散化更好,就是之前连续的浮点数被固定的level的浮点数替代,并且间隔(interval)是非均匀(non-uniform)的。
非均匀量化的好处是因为weights和activations数值分部都是“钟形”曲线,越靠近mean值的地方数据越密越小,也需要更细粒度的表示,如下图:
均匀量化 vs 非均匀量化:
文中给出的PoT公式如下:
所以b=4,离散值为{ {0, pm2^{-7}, pm2^{-6}, pm2^{-5}, pm2^{-4}, pm2^{-3}, pm2^{-2}, pm2^{-1}, pm1} }。量化的意思是把weights和activations中的浮点值用这17个值替代,但还是浮点数。不过上面的浮点数比较特殊是2的N次幂,所以硬件上可以通过移位取代乘法来加速。
这个跟韩松当年用kmeans来聚类 2^{N} 个浮点数不一样。这些浮点数是根据的公式生成的。
根据PoT的公式,bitwidth加大,只会增加零值附近的表示精度,很浪费。所以原文把数据表示成多个PoT的加法。公式如下:
如果b=4, k=2, n=2得到2个PoT,如下:
p0 in left{ {0, 2^{0}, 2^{-2}, 2^{-4}} right}, p1 in left{ {0, 2^{-1}, 2^{-3}, 2^{-5}} right}, gamma = 2alpha/3
所以得到16个离散值如下{0.0000, 0.3333, 0.6667, 0.0833, 0.0208, 1.0000, 0.7500, 0.6875, 0.1667,0.5000, 0.2500, 0.1875, 0.0417, 0.3750, 0.1250, 0.0625}。
如果按照之前的PoT公式,最细粒度的浮点数是 pm2^{-2^{4-1} + 1} = pm2^{-7} 。
2.2 RCF(重参数化的截断函数)
相较于直接把 w直接截断到[ -alpha,alpha ],利用下面的函数截断。
好处是不仅当|w| > alpha 有梯度,|w| <= alpha 也有梯度,具体如下:
2.3 权重归一化
weight跟clipping value alpha 联合训练比较困难,就是把weight先进行归一化处理,剪去均值除以标准差。
所以非均匀量化,权重激活还是浮点值,计算时没有特殊的硬件支持是不会有加速的。
上一篇
下一篇