Sparse Composite Quantization
作者: Ting Zhang 、Guo-Jun Qi、Jinhui Tang、Jingdong Wang
关键词: ANNS, 多码本, 稀疏码本, 笛卡尔量化, 量化
发表年份: 201506
相关文献: https://www.notion.so/Composite-Quantization-for-Approximate-Nearest-Neighbor-Search-4e7173ea8e7047b7999f06ca674a371e, https://www.notion.so/Composite-Quantization-02243f706bca472b8bb80968fe70b73e
Abstract
CQ虽然精确度比PQ、CKM高,但计算距离表的运行时成本在实际应用中不可忽略。
SQ 通过建立稀疏字典,加速查询和字典元素之间的距离计算。从而达到搜索精度与CQ相当,计算成本和PQ、CKM几乎相同的效果。
背景介绍和相关工作
看CQ 2014、CQ 2017
问题表示和方法
第三项为常数时,计算成本主要是第一项。建立距离表的计算时间为 : O ( M K D ) O(MKD) O(MKD)。如果 N ≫ K N \gg K N≫K ,则距离表代价可忽略不计。
但在实际应用中,用倒排索引进行搜索,当在重排序时,粗选出的候选数据 N N N 并不比 K D KD KD 大多少,距离表计算成本就不可忽略了。
Property:计算两个向量之间的欧氏距离 ‖ q − c ‖ 2 2 ‖q−c‖^2_2 ‖q−c‖22 ,如果向量 c c c 是非常稀疏的, ‖ q ‖ 2 2 ‖q‖^2_2 ‖q‖22 是已知的,则可以加速。复杂度一般变成 O ( ‖ c ‖ 0 ) O(‖c‖_0) O(‖c‖0),即在非零项的数量上是线性的。
不强制每个字典单词都是稀疏的,而是对所有字典单词施加全局稀疏约束。如:
进而问题归结为下面的最优化问题:
S S S 是一个正常数,表示稀疏度。
最优化方法
两步近似法:
-
第一步:第一步用 L 1 L_1 L1 范数替换 L 0 L_0 L0 范数,把原问题转变为非约束问题:
-
第二步:通过丢弃稀疏项来优化另一个变换问题
并引入新的约束 : c = 0 , ∀ c ∈ C ′ c = 0, ∀c ∈ C^′ c=0,∀c∈C′ ,其中 C ′ C' C′ 是 C = { c m k d ∣ m = 1 , 2... , M ; k = 1 , 2 , ⋅ ⋅ ⋅ , K ; d = 1 , 2 , ⋅ ⋅ ⋅ , D } C=\{ c_{mkd}\ | \ m=1,2...,M;\ k=1,2,···,K;\ d=1,2,···,D \} C={ cmkd ∣ m=1,2...,M; k=1,2,⋅⋅⋅,K; d=1,2,⋅⋅⋅,D} 的子集,使得子集 C / C ′ C / C' C/C′ 只包含 那些绝对值为问题6 的 最优解 C ∗ C^∗ C∗ 中 前 S S S 大 的条目。以确保 C C C 中最多 S S S 个非零项。
可以证明, C ′ C' C′ 的这种构造等价于求解一个约束问题:
本文使用 交替优化算法解决 问题6 和7 —— 迭代交替更新 { y n } \{ y_n \} { yn} 、 ξ \xi ξ 和 C C C 。整个流水线与 CQ2014 Composite Quantization for Approximate Nearest Neighbor Search 中给出的流水线非常相似,差异在于更新 C C C。
(1~8 是解问题6,9~17是解问题7)
本文算法1中 问题6 和7 都是更新顺序都是 1. ξ 2. C 3. { y N } 1.\xi \ \ \ 2.C \ \ \ 3.\{y_N \} 1.ξ 2.C 3.{ yN}
- 更新 { y n } \{ y_n \} { yn} :固定 C 、 ξ C 、\xi C、ξ ,最优化问题分解为 N N N 个子问题:
每个子问题循环求解 M M M 个子向量 { y n m } m = 1 M \{ y_{nm} \}^M _{m =1} { ynm}m=1M :
在 { y n m ′ } m ′ = 1 , m ′ ≠ m M \{ y_{nm'}\} ^M _{m'=1, m'\not= m} { ynm′}m′=1,m′=mM 固定的情况下,检查字典 C m C_m Cm中的所有元素,找到使目标值最小化的元素,相应地将 y n m y_{nm} ynm 的对应项设为1,其他项设为0
- 更新 ξ \xi ξ :固定 { y n } 、 C \{ y_n \} 、 C { yn}、C,则目标函数关于 ξ \xi ξ 的最优解是:
- 为 问题6 更新 C C C:关于 C C C 的目标函数是一个无约束非线性和不可微的优化问题。因此再次使用交替优化技术迭代更新 C C C 中的每个条目:
通过固定 C C C 中除 c m k d c_{mkd} cmkd 之外的所有其他条目来更新 c m k d c_{mkd} cmkd。关于 c m k d c_{mkd} cmkd 的目标函数是一个一元函数,由两个二次项和一个 L 1 L_1 L1 稀疏项组成,可以写成一个最小化问题
用软阈值技术来解决这个问题,得
- 为 问题7 更新 C C C:去掉(9)中的稀疏正则化项,得到最优解
本文用PQ 的解来初始化算法。
惩罚参数 μ μ μ 和正则化参数 λ λ λ 都是通过验证来选择的。使用学习集的一个小子集作为验证集。最佳参数的选择是,当使用验证集作为查询集来搜索真实最近邻时,检索到的{5,10,15,…,100}项的平均搜索召回率是最好的。
细节讨论
特殊的稀疏性约束:
将每个字典向量 c m k c_{mk} cmk 分为 M M M 个子向量
每个子向量的维数 c m k r = s m c^r_{mk}= s_m cmkr=sm,使得 ∑ m = 1 M s m = D ∑^M _{m=1} s_m=D ∑m=1Msm=D 。
将稀疏约束改为更强的约束: { ∥ c m k m ∥ 0 ⩽ s m ; c m k r = 0 , r ≠ m , r = 1 , 2 , . . . , M ∣ m = 1 , 2 , . . . , M ; k = 1 , 2 , . . . , K } \{\parallel c^m _{mk} \parallel _0 \leqslant s_m \ ; \ c^r _{mk}= \bold 0,r\not=m,r=1,2,...,M \ |\ m=1,2,...,M; k =1,2,...,K \} { ∥cmkm∥0⩽sm ; cmkr=0,r=m,r=1,2,...,M ∣ m=1,2,...,M;k=1,2,...,K}
这相当于每个字典 C m C_m Cm 位于不相交的子空间中,意味着SQ退化为PQ。
但在SQ中,当 S = K D S=KD S=KD 时的最优失真误差不大于PQ的误差,因为PQ的最优解是SQ的可行解。这证明SQ通常比PQ产生更好的搜索质量。
CKM通过寻找最优空间旋转并在旋转后的空间上执行PQ来提高向量近似精度。本文方法也可以从优化的空间旋转中受益,只需将目标函数表示为
其中 R R R 为旋转矩阵。
实验
实验分三个部分:
- 在三个中大型数据集上演示了性能。
- 在一个非常大规模的数据集上使用倒排多索引的性能
- 将方法应用于目标检索问题
对比的方法:PQ、CKM、CQ、 SQ1、SQ2
不同稀疏度下,两种具有代表性的方法:
- SQ1 ( S = K D S = KD S=KD)与PQ几乎相同的查询时间
- SQ2 ( S = m i n ( K D + D 2 , M K D ) S = min(KD + D^2, M KD) S=min(KD+D2,MKD))与CKM几乎相同的查询时间。
评估搜索质量的两个标准:查全率(召回率) 和平均查准率(MAP)。
评估搜索效率的两个标准:
- 构建距离查找表所花费的时间与代码长度的比 ——构建成本
- 改变稀疏度S,并报告召回性能与查询成本(包括表构建成本和线性搜索成本)的关系
中大型搜索结果
MINST:
图1(a)和1(b):在不同码长下,SQ1和SQ2 在recall@R和MAP方面的性能优于PQ和CKM。
图1©:为SQ1 (SQ2)构建距离查找表的时间成本非常接近于PQ (CKM),且比CQ的建表成本低很多。
图1(d):不同稀疏度下,SQ1的查询时间成本比SQ2更低,但召回率低些。二者在与PQ和CKM完全相同的查询成本下,召回率更高。二者的召回率不仅比CQ高些,且查询时间少很多。
SIFT 1M:
图2(a)和图2(b):SQ1和SQ2在recall@R和MAP方面始终优于PQ和CKM。
图2©:与PQ和CKM所花费的建表时间差不多。
图2(d):在搜索时间成本完全相同的情况下,SQ的召回率仍然比PQ、CKM高。虽然CQ的召回率高,但也付出了很多时间成本
Tiny 1M:
图3(a)和3(b):SQ始终优于PQ。但在相同码长下,SQ2在召回率和MAP方面的性能略逊于CKM,原因是CKM非常接近CQ(相当于没有稀疏性约束的提出的方法)。
图3(d)显示,在某些稀疏性约束下,SQ2性能与CKM几乎相同。
非常大型搜索结果
采用倒排多索引框架解决了1B个128维SIFT特征向量上的神经网络搜索问题。
- 倒排多索引对数据库向量进行PQ,以生成存储位于簇中的向量列表的单元簇心。
- 引入多序列算法 来有效地产生 按查询和单元质心之间的距离递增排序的 多索引单元序列,目的是检索NN候选。
- 此后,检索到的候选 经常基于它们的短码 被重新排序,例如,通过PQ。本文遵循多D-ADC方案,在重新排序阶段,将压缩编码算法应用于通过索引阶段获得的每个向量与其最近的单元质心之间的残差位移。
本文用倒排多索引的过程具体可看Composite Quantization
将SQ1、SQ2与PQ、CKM和CQ三种方法进行比较,并用它们来训练粗量化器和细量化器。
(T1是有数据库向量重建方案的查询时间,T2是无数据库向量重建但有距离表的方案的查询时间开销)
- 使用距离表,所有方法都得到加速
- SQ1和SQ2的查询代价几乎与最高效的方法PQ相同。
- 考虑T2 的查询开销和召回率的整体性能,SQ2性能最好。