train整体流程简介
-
- 目标:生成原向量中心点,残差(向量中心点的差值)向量中心点,部分预计算的距离(因为采用的是pq方式,所以原始向量会分成M个子空间,这里训练的都是子空间的中心点)。
- 残差:向量中心点的差值
- 为什么训练残差向量中心点:因为残差向量更集中,误差更小。
- PQ: 把向量空间划分为M个子空间,在检索时从每个子空间找最邻近的中心点,假如每个子空间有n个中心点,则pq可表达的中点点为n的m次方个。
- 流程
- 把原始向量分成M个子空间,针对每个子空间训练中心点(如果每个子空间的中心点为n,则pq可表达n的M次方个中心点)。
- 查找向量对应的中心点
- 向量减去对应的中心点生成残差向量
- 针对残差向量生成二级量化器。
距离计算方式
339 /** Precomputed tables for residuals
340 *
341 * During IVFPQ search with by_residual, we compute
342 *
343 * d = || x - y_C - y_R ||^2 , x - y_c:表示的残差,y_r:表示残差对应的中心点
344 *
345 * where x is the query vector, y_C the coarse centroid, y_R the
346 * refined PQ centroid. The expression can be decomposed as:
347 *
348 * d = || x - y_C ||^2 + || y_R ||^2 + 2 * (y_C|y_R) - 2 * (x|y_R)
349 * --------------- --------------------------- -------
350 * term 1 term 2