exact nn search in hamming space

来源:互联网 发布:jsp 收费系统 源码 编辑:程序博客网 时间:2024/05/01 09:24

      今天,大概看完了M. Norouzi即将发表在PAMI上的文章, fast exact search in hamming sapce with multi-index hashing. 看了一整天了,太累了,写点东西总结一下吧。

       之所以要看这篇文章,因为正在筹划的一篇论文跟在hamming space上的nn search有关联。没想到一搜救搜到这篇文章,而对于Norouzi,我并不陌生。毕竟过年前的时候还在看他的ck-means。对于他的文章,还是比较有印象。Norouzi的文章,读起来还是比较舒服的。文章的思路比较简单,但是,可以看出作者具有比较深厚的数学功底。

废话少说。MIH(multi-index hashing)是作者之前的文章的后续工作。Norouzi在ICML11发表了一篇文章,提出了MLH(Minimal Loss Hashing)。这是一种基于hashing的方法,将高维向量映射到hamming space,而hamming距离仍然可以保持高维向量间的欧氏距离。这是当前CV领域比较流行的一种方式。这样做的好处是将几百维甚至更高维数的向量压缩成64-bit或128-bit的比特串。这样可以大大降低nn search的时间。但是,目前CV领域一般在压缩后的二进制编码上进行线性扫描。MIH针对压缩后的二进制编码建立索引结构,可以快速地进行exact nn search。

作者的思路其实很简单,当然也很巧妙。将维度划分成m个不相交的子集,分别为每个子集建立hashing结构。这样做是有大大的好处的。首先,在较低维度里进行nn search,显然更加便利。其次,是利用抽屉原理,可以保证在进行r-nn search时,每个hashing结构上只需进行r/m-nn search。本来维度小,现在半径也小了,自然就快了。每个hashing结构很简单,是将每个二进制直接看做hashing编码或地址编码。

思路很简单,大概一两页就说完了。作者也分析了均与分布下的性能分析,给出了时间和空间复杂度,尤其是每个hashing结构的比特串长度,大大增加了方法的可用性。这一点确实是值得好好学习的。它的一个结论很有意思,就是性能最佳的比特串长度为log n, n是数据集的大小。

实验结果还是很有说服力的,它的存储复杂度虽然比线序扫描大,但跟数据集尺寸仍然是线性关系,因此,具有良好的scalability。比起linear scan,加速比在2~3个数量级在1B的数据集上。这样的结果是相当具有吸引力的。

这篇文章的借鉴意义就在于,除了使用降维方法外,仍然有一个下界方式存在,使得可以进行精确的查询。这样的处理方式或许可以直接应用在高维空间里。此外,这里面的方法所使用的hashing方法感觉太直接了,有可能会浪费存储空间,而且在IO环境下不具有可移植性。因此,会不会有一种方式可以在IO环境下有效。这就需要保证,快速访问候选数据块,并且具有下界保证。如何确定访问顺序和下界的紧凑性会是新的挑战。

因为本人比较关注IO环境下的算法,所以,可能会在这个方面做一些探索。

0 0
原创粉丝点击