向量数据库

乘积量化 PQ 与 OPQ

核心索引算法约 30 分钟kp-012

前置知识

一句话定义

乘积量化(PQ, Product Quantization)把 d 维向量切成 m 段,每段用一个 256 码字的小码本编码成 1 字节,整向量只存 m 字节(3072 维 float32 → 96 字节是 32 倍压缩);距离用查表法 ADC 近似——十亿级向量内存检索的奠基算法。

为什么重要

PQ 回答了向量压缩的"极限问题":当 SQ 的 4 倍压缩仍不够时,如何做到 16~64 倍仍保持可用召回。IVF-PQ(IVFADC)是 FAISS 支撑十亿级检索的经典结构,也是理解所有"码本类"方法(OPQ、AQ、残差量化)的原型。二进制量化(kp-031)则是它思想在 1 bit 端的延伸。

前置知识

kp-011(SQ——"量化"思想的入门形态)、kp-003(L2 距离);聚类概念(与 kp-007 的 k-means 同源)。

核心概念

原理与机制

建库:对每段独立跑 k-means 得 256 质心;每向量的每段找最近码字,记录索引。查询(ADC):

1. 预计算距离表 LUT[j][c] = ‖q_j - c_j‖²  (j=1..m 段, c=0..255)
2. 对每个库向量 x(码 x_1..x_m):
   d̂(q,x) = Σ_j LUT[j][ x_j ]        ← 仅 m 次查表加法

误差性质:估计距离与真距离之差由各子空间量化误差构成(平方误差可加),m 越大每段维度越低、单段失真越大但字节越多——m 是"内存换召回"的总闸。典型配置:d=768、m=48~96、每段 16~8 字节压缩到 48~96 字节。

OPQ 的动机:原始维度切分后各段方差差异大(相关维度挤在同段),量化误差不均。OPQ 交替优化"旋转矩阵 R"与"各段码本",最小化整体量化误差;FAISS 中通常先做 OPQ 旋转再进 IVF-PQ。

参数影响分析:

参数↑ 的收益↑ 的代价经验
m召回升(每段维度高、失真小)存储与查表成本线性升m ∈ d/16 ~ d/4
每段码字 2561 字节对齐、SIMD 友好再大破坏字节对齐一般固定 256

公式或模型

存储: m 字节/向量 (通常 = d/8 ~ d/16)
压缩率: d×4 / m  (768 维、m=96 时 32 倍)
误差: E‖x-x̂‖² = Σ_j E‖x_j - c_{x_j}‖²  (各段可加, OPQ 最小化它)

图示

768 维向量 x = [x1..x8|x9..x16| … |x761..x768]   ← 切 m=96 段, 每段8维
每段: 8 维 ──最近码字──► 1 字节索引 (0..255)
码:   [37][201][0][99] … [12]     共 96 字节
查询: 预算 LUT(96×256) → 每库向量 96 次查表求和 ≈ d̂ 距离

实例或案例

十亿级图片特征检索(FAISS 论文场景):30 亿条 128 维。fp32 需 1.5 TB 无法单机;IVF(nlist≈1M) + PQ(m=16, 16 字节/向量) 后原始向量约 48 GB,配合 IVF 剪枝单机可服务,recall@1 约 0.6~0.7,再用"取回原始向量精排"把可用召回拉起——PQ 的定位从来是"粗排 + 精排"管线里的粗排腿。

直观类比

描述一个人不记全部特征,而是"发型选图册第 37 页、体型选第 201 页、穿搭选第 0 页"——每页是 256 选 1 的小抄(码本), comparing 两人就逐页比对小抄差异(查表)。OPQ 相当于先重新组织"测量维度",让每页小抄的信息量最均衡。

常见误区

  1. "PQ 距离可以当精确分数用"——d̂ 只保证排序趋势,绝对值有系统偏差;做阈值判断或打分展示必须用精排后的真实距离。
  2. "m 越大越好"——每段维度小于 4 后码本覆盖急剧变差,且字节成本线性上涨;过大还会让训练集不足(每段码本也要样本喂饱)。
  3. "PQ 能替代 HNSW"——二者解决不同端:PQ 压内存、图管导航;生产组合是"图/IVF 导航 + PQ 表示",不是二选一。

自测题

  1. 1024 维向量、目标 64 字节/向量,m 取多少?每段几维?
  2. 答:m=64,每段 1024/64=16 维;每段码本 256×16 维,需保证训练样本量充足。

  3. ADC 为什么是"非对称"距离计算?
  4. 答:查询侧用原始浮点向量、库侧用量化码字,两侧表示不对称;对称版(SDC)两侧都用码字,精度更低但可离线预计算。

  5. OPQ 在 PQ 之前加了一步什么?为什么有效?
  6. 答:学一个正交旋转让各子空间方差均衡、减少段间信息冗余,直接降低可加的量化误差,同等 m 下召回更高。

与其他知识点的关系

kp-007 的 IVF 提供剪枝、本篇提供压缩,合成 IVFADC;kp-026 的成本账里 PQ 是"十亿级可单机"的关键项;kp-031 把量化推到 1 bit 极端并用理论界补救。

延伸阅读

Ge, He, Ke, Sun, "Optimized Product Quantization"(IEEE TPAMI 2014)——OPQ 旋转优化与码本联合训练的原始论文。

相关知识点