十亿级深度学习向量数据集的高效索引
作者来自俄罗斯Yandex
编者的总结
- 核心思路是使用VQ而非PQ避免分段产生各分段之间的互信息损失。
- 技术手段是使用VQ中的RVQ做两层独立聚类,在控制聚类中心数量的基础上尽可能降低量化损失。
- 在二级残差中引入了一个Scale factor (GNO-IMI),但实际提升有限。
- 相比于IVF-RVQ变化不多。
1 Introduction
本文是针对分区量化索引结构IMI提出的改进版本,核心思想是如何更合理地对向量集进行高效聚类,使得聚类后产生的量化向量和原始向量更接近。
之前的算法IMI,是通过分段PQ进行聚类和空间分区,本文作者认为分段是一个不合理的假设,实际的向量表示不会是完全独立的两个子空间。因此IMI在SIFT上(一段数据表示图像一个区域)比在Deep上(DNN输出,无分段含义)表现更好。
因此,本文放弃了分段表示,采用了RVQ(Residual Vector Quantization)的技术进行向量量化,并在查询算法上做出了一些优化。
2 Algorithm
2.1 基本结构
- RVQ有两个码本S和T,各自包含K个D维(原始维度)的codewords,两两组合也就产生了
个聚类中心,即
个cell,数据会被划分到这些cell里去;
- 聚类划分分为两层,首先在第一层进行粗聚类出K个cell(S),然后根据向量到粗聚类中心的距离进行细划分,这些残差向量会细聚类出K个cell(T)
-
如下图中间,绿色点为粗聚类中心,红色点为细聚类中心,注意到每个细聚类中心和粗聚类中心的偏差是固定的(即图中每个粗聚类中心引出来的4条线,方向和长度固定)
image.png - 向量的最终量化表示为
。
2.2 码本训练
- 基本结构:和K-means算法的原理类似,码本(聚类中心)的训练是迭代式完成的。即首先初始化一些聚类中心,再将数据集中点分配到最近的聚类中心上,然后根据分配情况(即,量化损失)重新调整聚类中心。
2.2.1 数据点分配
- 分配过程是在
个聚类中心中选择离数据点最近的聚类中心。一种简单的方式是直接进行暴搜,这样复杂度太高。本文作者提出了一些优化方法:(数据点为
,当前探测的聚类中心是
,暂时忽略
)
- 只针对最近的
个粗聚类下面的
个cell进行评估,更远的直接放弃;
- 如下图,将距离计算公式展开,共4项:
- 第一项是到粗聚类的距离,第一步已经计算好;
- 第二项是fine codeword的模长,可以在分配前预先计算,所有数据点共享;
- 第三项是数据点与find codeword的内积,需要计算;
- 最后一项是course和fine codeword的内积,可以预计算,同第二项。
image.png
- 因此,对于每个数据点,实际只要计算
次粗聚类,找出前
个最近的,然后计算
次细聚类。
相比于
缩小不少。
2.2.2 码本训练
- 在给定数据点分配情况后,仅需要解析方法就可以得到新一轮的码本。解析目标是最小化所有Cell内的量化损失,粗细码本(S和T)分开训练。
- 首先训练细码本T,此时粗码本S固定,仍然忽略
- 如下图,T中每个Codeword训练独立,涉及该Codeword的量化总损失如下
image.png
-
最小化此损失是一个二次函数,得到
image.png 训练粗码本S也是同理。
2.2.3 码本初始化
- 粗码本S:数据集上直接K-means
- 细码本T:残差K-means
- 一般进行10轮迭代,粗cell选择个数
默认为8.
2.3 查询算法
- 查询和数据点分配的结果类似,复杂度也相同。不同的是,查询最后会在
个cell里面选出top-
个最近的Cell进行排序,最后对这L个cell里的向量进行精排。
- 在精排阶段(rerank),仍然没有使用精确距离计算,而是将二级残差做了一次OPQ,通过OPQ的ADC进行精排排序。
2.4 优化:
矩阵与GNO-IMI
-
如下图,细聚类部分还可以再根据每个粗聚类的情况进行优化,即加入一个Scale factor调整细聚类Codeword的长度。
image.png -
此时,每个聚类中心可以通过下式来进行表示:
image.png - 训练过程中,
矩阵仍然是单独训练,解析式如下:
image.png
3. Experiments
- 下左图展示了两个codebook的互信息MI,IMI索引认为两个分段可以相互独立,但实际相关性很强。【编者:意义模糊,未完全理解】
- 下右图展示两个索引的空cell率,由于NO-IMI更自适应的分区方式,其空置率更低。
image.png
-
下表展示了三种索引的量化误差,有15%左右提升,但不确定是大是小。
image.png 粗排阶段精度,代表空间分区质量,看起来提升不错,但
矩阵的提升较小。
image.png
- 全阶段召回,相比IMI提升不少。
image.png