sgr-interview-300

第 112 题:乘积量化(PQ)的码本训练,k-means的聚类数量选择?

题目

乘积量化(PQ)的码本训练,k-means的聚类数量选择?


完整讲解

一、乘积量化(PQ)概要

将 $d$ 维向量分成 $m$ 段,每段 $d/m$ 维;每段各自用子码本量化,共 $m$ 个子码本、每码本 $k$ 个码字。向量用 $m$ 个码字索引表示,存储从 $d$ 个 float 变为 $m \cdot \log_2 k$ bit,距离用码字间距离表近似,复杂度 $O(m)$ 而非 $O(d)$。

二、码本训练与 k-means

每个子空间独立做 k-means:对第 $j$ 段的所有训练向量 $\boldsymbol{x}j^{(i)}$ 聚类,得到 $k$ 个聚类中心作为该段的码本 $\mathcal{C}_j = {\boldsymbol{c}{j,1},\ldots,\boldsymbol{c}_{j,k}}$。训练数据通常为全量或采样的底库向量,按段切分后各自聚类,无交叉子空间约束。

量化:$\boldsymbol{x}j \mapsto \arg\min{\boldsymbol{c} \in \mathcal{C}_j} |\boldsymbol{x}_j - \boldsymbol{c}|$,即每段找最近码字,用码字索引 $i_j \in [k]$ 表示。查询时用非对称距离(查询未量化)或对称距离(查表)近似 $|\boldsymbol{q} - \boldsymbol{x}|^2$。

三、聚类数量 $k$ 的选择

四、工程要点


面试要点


记忆要点

返回模块 返回总览