论文阅读:Post Tuned Hashing: A New Approach to Indexing High-dimensional Data

1. 方法介绍

Learning to hash是进行高维数据索引的有效方法,它的目标是:学习一个low-dimensional的、similarity-preserving的二进制编码表示,使该其可以代表原高维空间的数据。本文基于Unsupervised hashing method思想,通过探索数据内在特征与属性,来学习二进制码表示。

传统的无监督hashing基本都通过2阶段的范式来实现:

  1. mapping:将高维原始数据投影到低维空间;
  2. binarization:将投影向量二值化,变成一个“二进制”编码。

并且为了保证原有的neighborhood relationships,他们大都选择在投影阶段或者二值化阶段做出优化。

但是,论文指出,尽管他们努力地在某个阶段保证了邻域关系(例如在降维时保证了邻域关系),但是二值化过程不可避免地造成了neighborhood error:即原数据中相邻的数据可能会产生不相似的二进制编码,而不相邻数据可能会产生相似编码。于是论文提出了一个全新的步骤,post-tuning stage,意图使用该方法在二值化后重建邻域关系,减小邻域损失。图1展示了加入新的步骤前后,邻域损失情况。

图1. Toy illustration of the superiority of post-tuning.

值得注意的是,该步骤独立于前两个步骤,因此可以广泛适配传统的2阶段方法。

2. 方法框架分析与推导

下面我们对该方法的理论做一定的阐述与推导:

首先,我们设数据集 XRd×n 包含n个数据,每个数据的维度为d。为了完成无监督hashing的两个阶段,我们可以通过一个线性或非线性的函数 P:RdRm完成高维到低维的投影,再通过一个二值化函数sgn() 将低维向量二值化:

(1)Z=H(X)=sgn(P(X))

其中 sgn:Rm1,1m,其根据每个元素是否大于0进行二值划分。

由于论文指出上述2阶段方法会造成严重的neighborhood error,因此他们定义了该损失函数的表达式:

(2)L=SVF2

其中 SRn×n 是原始数据的邻域关系矩阵,定义为

Sij={1if d(xi,xj)<ϵ1otherwise

d() 衡量了原始数据空间的欧氏距离。而 V 是二值化空间的邻域关系矩阵,定义为

(3)Vij=(bibj)/m

其中,bi 是数据 xi 的二值化向量。可以看到Vij 是值域为-1到1的离散变量。那么通过式(3),损失函数可以改写为:

(4)L=S1mBTBF2

其中 B1,1m×n是n个数据的二值化向量矩阵。

结合公式(1)和公式(4),很容易得到在传统方法中,B=H(x)。现在,作者希望通过加入第3个步骤,即Post Tuned Hashing (PTH),来实现二值化向量的重建。具体而言,论文将定义一个新的变换 R:1,1m1,1m,使得重建后的二值向量能够最小化损失:

(5)PTH(X)=R(H(X))

对于这个新的变换,论文设计了一个二值(-1,1)的矩阵post-tuning matrix,表示为 URm×n,通过学习这个矩阵来使损失最小化。这样,公式(4)可以进一步写为

(6)minQ(U)=Sγ(UZ)T(UZ)F2

为了清楚地推导论文的优化算法,这里对于步骤做了细化的分析:

(7)UZ=[u11u12u1nu21u22u2num1um2umn][z11z12z1nz21z22z2nzm1zm2zmn]=[u11z11u12z12u1nz1nu21z21u22z22u2nz2num1zm1um2zm2umnzmn]
(8)Sγ(UZ)T(UZ)=Sγ[u11z11u21z21um1zm1u12z12u22z22um2zm2u1nz1nu2nz2numnzmn][u11z11u12z12u1nz1nu21z21u22z22u2nz2num1zm1um2zm2umnzmn]=Sγ[k=1muk1zk1uk1zk1k=1muk1zk1uk2zk2k=1muk1zk1uknzknk=1muk2zk2uk1zk1k=1muk2zk2uk2zk2k=1muk2zk2uknzknk=1muknzknuk1zk1k=1muknzknuk2zk2k=1muknzknuknzkn]
(9)[(UZ)T(UZ)]ij=k=1mukizkiukjzkj

根据上面的详细推导,我们的目标函数可以写为

(10)minQ(U)=Sγ(UZ)T(UZ)F2minUij[Sijγk=1mukizkiukjzkj]2

我们也可以统计U的第p行的部分:

(11)ij[Sijγk=1mukizkiukjzkj]2=ij[Sijγ(upizpiupjzpj+k=1,kpmukizkiukjzkj)]2=x=upizpiupjzpjset A=k=1,kpmukizkiukjzkjij[Sijγ(x+A)]2=ijSij22γSij(x+A)+γ2(x+A)2=delete without xij2γSijx+γ2x2+2γ2Ax

所以一次项,即文章中的linear terms,可以表示为

(12)ij2γSijx+2γ2Ax=2ijupizpiupjzpj[γSijγ2(k=1,kpmukizkiukjzkj)]

论文设 Z 的第p行的数据为 zp,其转置(即column向量)为 zp,设 Q=zpzpT , 设 (UZ)p 是将公式(1)的第p行删除的新矩阵,设 O=[(UZ)p]T[(UZ)p] ,我们可以轻易地将公式(5)改写为

(13)2γijupiQij(SijγOij)upj

值得指出,Qij=zpizpj=Qji,Oij=k=1,kpmukizkiukjzkj=Oji,Sij=Sji (详见论文公式(4)),那么如果我们设 C=Q(SγO) ,那么 C 就是对称矩阵。因此公式6可以进一步化简:

(14)2γijupicijupj

其中,每一个涉及upq的量均可以表示为:

(15)2γi=q,jupqcqjupj2γi,j=qupiciqupq=4γkupkcqkupq=4γk=1,kqnupkcqkupq+

对于每一个元素 upq ,最小化损失函数公式(6)即最小化公式(15)。我们可以将 upq 前面的系数当成是权重,那么为了最小化损失,当权重为负时,我们希望 upq=1 ,权重为正时反之。

更新与优化策略

论文提供了一种更新策略:

update the current entry if its coefficient is larger than a fixed threshold η.

这个策略可以按照矩阵U内的元素顺序进行依次更新,减小了算法复杂度。并且,在一行元素更新时,矩阵 C并不需要更新,这是因为C受到 U所有元素的影响,对一行数据的改变不敏感。

论文提供了一种剪枝策略:

Only tune the elements whose projection results (value before binarization) are close to 0, or smaller than a threshold δ.

即,我们只调整那些投影后值与0接近的元素(因为0是二值化的一个阈值),因为这些元素更有可能被二值化为不正确的值。这有效减少了post-tuning的复杂度,并且缓解了过拟合。

结合这两种策略,最终的优化算法如下图所示:

图2. Post-tuning Algorithm

Out-of-Sample Post-Tuning

由于是无监督学习方法,故方法必须兼容新的数据 qX。与K近邻的思想类似,新来的数据 q 理应与原来的数据 X产生联系。因此,我们称原来的数据为skeleton points。这样,完整的post-tuning应该包含以下2个任务:

  1. post-tuning skeleton points X
  2. post-tuning out-of-sample q.

与公式(6)类似的,我们建立如下损失:

(16)minR(uq)=Sq1m(uqzq)TBF2s.t.uq{1,1}m

其中:

  • SqR1×nqX的邻域关系矩阵;
  • uqR1×m:即 qpost-tuning matrix
  • zqR1×m:即 q 经过二值化后的向量;
  • B=(UZ)Rm×nX经过post-tuning的新二值化向量。

总之上式衡量了hashing前后 qX 的邻域关系。论文也提到,由于post-tuning完全独立于前面2个步骤,因此这里的skeleton points( X )在实践中并不是全部训练集,而是选择少部分数据点以提高效率。数据点数量的选择和最终方法效果的关系可从下图得出

图2. Post-tuning Algorithm

适量的数据点即可达到性能上限。太多的数据点不仅不能提高性能,还会消耗过多空间/时间资源。