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环境下的算法,所以,可能会在这个方面做一些探索。
- exact nn search in hamming space
- 多下标哈希表——Fast Exact Search in Hamming Space with Multi-Index Hashing
- Fast Exact Search in Hamming Spacewith Multi-Index Hashing
- Max space clustering (Hamming)
- How to search the available space in SQL server.
- Analysis of Computational Complexity and Space Complexity (NN algorithem)
- nn
- nn
- nn
- convolution in tensorflow (tf.nn.conv)
- Squeezing space in Latex
- hamming
- hamming
- HAMMING
- Elastic Search Search in Deepth
- [Paper note] LSTM: A Search Space Odyssey
- mtd program in user space
- Free space in Oracle tablespaces
- linux关闭防火墙
- 【codeforces】 464B Restore Cube
- Array(数组)与Json String (Json字符串) 的相互转换
- 打造自己的js库1 -- 脚本动态加载
- 精读《JAVAScript高级程序设计》笔记(一)——基本概念
- exact nn search in hamming space
- JSChart_页面图形报表
- HDU1060 Leftmost Digit
- sizeof
- values-sw600dp 平板电脑中无效【安卓调试】
- LeetCode 17 4Sum
- 设计模式学习笔记-观察者模式
- J2SE学习
- ServletContext