Shortlist Selection with Residual-Aware Distance Estimator for K-Nearest Neighbor Search

论文地址

简介

CVPR2016的一篇关于KNN搜索的paper。论文的主要贡献就是提出了关于shortlist计算的算法。在倒排索引的检索过程中,主要经过两步。第一:返回候选集。第二,采用更精确的距离度量风方式进行Rerank。可以这样说,候选集合决定了返回结果的下限,第二步的rerank过程中,才决定了检索的上限。所以,关于倒排索引的改进主要有两个策略。Iverted multi-index就是改进了返回候选集,采用了product quantization的方法,将原始的数据集进行更细的划分,通过和聚类中心的比较,然后返回一个shortlist的候选集,然后从候选集中计算距离,返回最小的K的data。但是如果采用原始的高维向量进行计算,将会占据大量内存和CPU时间。例如测试数据Gist960,960维的数据计算距离将是很耗时耗内存。Rerank又是必要的操作,所以采用hash技术或者是量化的方法改进第二步。其中hash技术包括LSH,spectral hash,ITQ等等。量化的方法包括,PQ, OPQ等等。 在本篇论文中,作者提出了一种新的量化方法对shortlist进行rerank,并通过实验结果证明效果更好。

算法过程

倒排索引进行改进

在传统的倒排索引中,原始的数据集 X=x1,x2,x3,......xn 会经过K-means聚类,生成M个聚类。对于每一个原始的数据,找出离它最近的聚类中心,形成M个Inverted list- L1,L2,L3,.....LM 。在这里计算距离的时候采用欧式距离。
在本篇论文中,作者提出了一种新的距离计算方法。首先计算原始的数据 xi 到距离中心 q(x) 的residual distance。首先定义residual distance 为 rx :

rx=d(x,q(x))

同理,我们定义查询query y 与量化距离中心q(x)的距离为 hy,x :
hy,x=d(y,q(x))

查询query y 与原始的数据x的距离可以写成余弦定理的形式:
d(y,x)2=h2y,x+r2x2hy,xrxcosθ=h2y,x+r2(12hy,xrxcosθ),(1)

θ 是两个向量 yq(x) xq(x) 之间的角度。
我们观察上述公式, (12hy,xrxcosθ) 取决于特定的 x 和特定的y。我们把 (12hy,xrxcosθ) 估算为常量 αK 。现在我们只需要计算 h2y,x r2x 。其中 r2x 是和查询无关的。 h2y,x 是和查询 y 有关的。所以上面的公式可以写成下面这种形式:
d^(y,x)2=h2y,x+αKr2x(2)

我们观察 αK 的值。当 αK 为0时,就是传统的距离度量方式。当两个向量正交的时候, αK 为1,上面的公式就是勾股定理的形式。
但是在实际中,对于任意的向量,并不是所有的向量都会正交。所以,作者提出了一种训练的方法,得到一个和近邻K有关的 αK 。首先从原始的数据集 X 中随机选出Nsdata{ s1,s2,s3,......sNs },然后计算每一个样本 si 的K个最近邻。把样本 si 的第 jth 个邻居记为 nji 。我们通过随机选取的数据来进行评估 αK 的值。但是这样做会出现overfitting。所以需要从每一个 si 中随机选取另外K的data point,记为{ mi1,mi2,mi3,.......miK }。我们通过下面的公式来计算整个数据集的 αK 的值:
αK=12KNsi=1Ns(j=1Kf(si,nij)+j=1Kf(si,mij)),(3)

这里:
f(y,x)=12hy,xrxcosθ=d(y,x)2h2y,xr2x

在训练 αK 的值的时候,需要排除掉数据和聚类中心重合的点,这样做为了避免分母 r2x 为0的情况。这里训练的 αK 是和K相关的,当出现新的K值时候,我们可以简单的使用 αK =1来提前计算。实验表明,当使用训练过的 αK 的时候,比默认的值1准确率提高了20%。

建立Lookup Table

在公式(2)中,我们需要计算 rx=d(x,q(x)) 的值和 hy,x=d(y,q(x)) 的值。但是如果在运行的时候计算,将会耗时耗内存。并且如果原始的数据进行量化以后,无法通过量化的值来获取原始的点。所以提出了一种新的急算方法。由于 rx 是和查询无关的,我们可以在线下计算。在这里提出了一种lookup表结构来加速计算的过程。
首先对于每一个 Li ,我们需要计算原始的数据 xi 到它的中心 ci 的距离,然后按照递增的顺序进行排列。然后遍历每一个 Li ,得到一个最大和最小的距离。

Rm=mind(x,q(x))2,RM=maxd(x,q(x))2

然后将区间 [Rm,RM] 平均的划分为Z份。其中每一份的距离为 ΔR=(RMRm)/Z 。然后我们定义第j-th区间上界值为 Rj=Rm+jΔR
我们定义一个lookup表。 W(i,j) 储存每一个倒排索引 Li ,距离平方小于 Rj 的数目。如下所示:
W(i,j)=|{x|d(x,ci)2<Rj,xLi}|,(4)

|.| 代表集合中的数目。这个lookup表有 O(MZ) 的空间复杂度,并且M和Z都是和数据集无关的。

Shortlist computation

好吧,这里又开始定义了。首先将查询 y 和中心ci的距离平方记为: h2i=d(y,ci)2 。然后又引入了一个新的函数 w(y,i,t) 来表示在Inverted list Li 中的数据点与查询 y 的距离小于t的数目。

w(y,i,t)=|{x|d^(y,x)2<t,xLi}|=|{x|h2y,x+αKr2x<t,xLi}|(Eq(2)=|{x|h2i+αKr2x<t,xLi}|,(q(x)=ci)=|{x|αKr2x<th2i,xLi}|=|{x|r2x<(th2i)αK,xLi}|,(5)

推导到最后,发现和公式(4)的格式很像,这就对了。当 (th2i)/αK Rj 取代的时候,这就和 W(i,j) 有关了。我们利用建立的 W(i,j) 。可以替换公式(5):
w(y,i,t)=W(i,(th2i)/αKRmΔR),(6)

对于每一个查询在距离t以后的所有的点可以计算为 Ki=1w(y,i,t) 。因为 W(i,j) 是非单调递减的,所以随着t增加, w(y,i,t) 也是非单调递减的。由于这个简单的属性,我们可以使用二分搜索的方法。二分搜索的范围为 [minh2i+αKRm,maxh2i+αKRM] 。当 T<Ki=1w(y,i,t) 满足条件时,搜索终止。

Inverted Multi-index

对于inverted Multi-index的具体介绍,可以参考博客。在数据集中的数据x_在第K个子空间的部分,在第K个子空间量化后的值为 qk(xk)=argminckid(xk,xki) 。首先定义距离 rx,k=d(xk,qk(xk)) hk,i=d(yk,cki)
对数据进行进一步处理,第k个中心的 ith 聚类的数据为: Xki={xk|qk(xk)=cki} ,根据距离 rx,k Xki 。然后根每一个聚类 Xki 划分为P分 Xki,1,Xki,2,Xki,3,.......Xki,P ,根据 Rki,j :

Xki,j={xk|Rki,j1rkx,i<Rki,j,xXki}

这里边界值 Rki,.j 平均的将数据划分为P部分。其中 Rki,0 Rki,P 被设置为子空间最小和最大的距离。这种做法和传统倒排索引的做法相同。
Inverted multi-index划分为 kth 个子空间。我们用同样的方法训练 αK,1 αK,2 。我们将 ith 聚类也分为 kth 个子空间。 Xki={xk|qk(xk)=cki} 。对于每一个子聚类,划分为P个部分 Xki,1,Xki,2,.......Xki,P
Xki,j={xk|Rki,j1<rkx,i<Rki,j,xkXki}

残差距离边界 Rki,jP R_{i,0}^k R_{i,P}^k$分别代表子空间距离的最小最大值。

在计算距离的时候,如果按照公式(2)的计算方式,那么将会是如下这种形式:

d^(y,x)2=d(y1,q1(x1)2+αK,1r2x,1+d(y2,q2(x2)2+αK,2r2x,2(8)

因为Inverted Multi-index的List长度为 k2 。所以存储 r2x,k 的值不太现实。Inverted Multi-Index的索引长度随着划分的数目增多,指数增加,所以需要提出了一种新的代替residual distance的一种方法。作者提出了一种用平均距离代替的方法如下所示:
r¯k,i,j=rx,k|Xki,j|

替换以后公式(8)新的距离就写成了如下的形式:
d¯(y,x)2=h21,i1+αK,1r¯21,i1,j1d¯21,i1,j1+h22,i2+αK,2r¯1,i2,j2d¯22,i2,j2

当新的查询到的时候,首先计算query和聚类中心 h21,i h22,i 距离。然后我们取出预先计算好的 αK,k r¯2k,i,j d¯2k,i,j=h2k,i+αK,kr¯2k,i,j 2M r¯2k,i,j 的值进行排序。一旦排序以后,我们同样可以采用multi-sequence algorithm用一个优先级队列来获取T长度shortlist。计算过程如下图所示:
这里写图片描述

我们可以从返回的shortlist中进一步处理。

总结

总结论文的过程就是定义一些更精确的距离度量方式来重新rerank。但是这样的做法会导致计算时间的方法,所以作者又将距离公式进行预先处理。使尽可能多的在线下计算,建立起线上计算与线下计算的关系来提高计算的时间效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值