标量量化(Scalar Quantization)
FP32 -> FP16,FP16 -> INT8
以 FP16 -> INT8 为例,将 FP16 的数值映射为 INT8 的范围。如果 tensor 中存在离群值(远大于平均的值),在 de-Quantized
之后可能导致其他值消失(接近 0)。解决方法是把这部分离群值拎出来,不量化,按照原有精度处理。
乘积量化(Production Quantization)
将原向量拆分成若干子向量,找到子向量距离最近的 cluster
(聚类)对应的标识。由这些标识构成量化后的向量。
以上图为例,假设绿色为 0,蓝色为 1,红色为 2,则量化后的向量为:
[0, 1, 1, 2]。
二进制量化与 RaBitQ
https://zhuanlan.zhihu.com/p/7193968541
二进制量化直接将向量的每一维度映射到一个 bit(0 或 1),常见的做法就是将大于 0 的维度设置为 1,否则则为 0。然而这种做法虽然极大地压缩了空间,但是也会显著影响召回率。
RabitQ 通过将向量进行归一化,将其放入一个单位高维球中,这个单位高维球中有一个 D
维的超正方体(D
为向量维度)。靠近哪个顶点,就被划定为这个顶点,以这个顶点对应的向量作为量化结果。