Spherical Hashing,球哈希
1. Introduction
在传统的LSH、SSH、PCA-ITQ等哈希算法中,本质都是利用超平面对数据点进行划分,但是在D维空间中,至少需要D+1个超平面才能形成一个封闭、紧凑的区域。而球哈希方法利用超球面(hypersphere)对数据进行划分,在任何维度下,只需要1个超球面便可形成一个封闭的区域。利用球哈希方法,每个区域内样本的最大距离的平均值会更小,说明各个区域的样本是更紧凑的。这样更符合邻近的含义,更适合在进行相似搜索时使用。
2. Binary Code Embedding Function
球哈希的函数族\(H(x) = (h_1(x), h_2(x), h_3(x), ... h_L(x))\)。L为哈希编码的位数,其中每个哈希函数事实上就是一个超球面,每个超球面将空间划分为球内和球外两部分。哈希函数如下:

其中,\(p_k\)和\(t_k\)分别为球心和半径,\(d(p_k, x)\)表示点x与球心\(p_k\)之间的欧式距离。如果点到球心的距离大于半径,则编码为-1,否则编码为1。
为了比较基于超平面的区域和基于超球面的区域,不同紧凑性对结果的影响,论文作了如下两个实验:

左图中的Y轴表示在相同的编码下的哈希空间里,数据点中最大距离的平均值,X轴为不同的码长。实验结果曲线表明了基于超球面形成的区域更加紧凑,利用较少的码长便可对原始数据进行很好的编码;右图的Y轴为在相同的编码下,所对应的原始空间中数据点的最大距离,X轴为两个数据点的编码中,相同比特位均为+1的个数。实验结果除了超球面区域紧凑性的验证之外,还表明了如果两个数据点具有越多的相同特征,那么这两个数据点距离越近(越相似)。
对于右图的实验结果,个人直观的理解便是假设有类别A具有a、b、c三个特征,如果数据\(x_1\)和\(x_2\)均具有这三个特征(对应比特位均为+1),那么我们大致可以判定\(x_1\)和\(x_2\)均属于类别A;但是如果\(x_1\)和\(x_2\)均不具有这三个特征(对应比特位均为-1),那么我们只能确定\(x_1\)和\(x_2\)均不属于类别A,但是无法得出\(x_1\)和\(x_2\)是否属于同类的结论。
3. Distance between Binary Codes
传统的哈希方法使用汉明距离作为衡量数据点中距离的方法,但是汉明距离无法对区域紧凑性进行很好的表征。因此,在球哈希方法中,使用了新的距离度量方法Shpherical Hamming distance,SHD:

其中,分子为两个编码中对应比特位不同的个数,分母则为对应比特位均为+1的个数。显然,当两个数据对应比特位均为+1的个数越多时,其对应的SHD距离越小,反之则越大,很好得体现了利用了基于超球面的区域紧凑型的特点。
4. Independence between Hashing Functions
球哈希方法中同样也对哈希函数的平衡性和独立性进行了限制。
平衡性:

独立性:

具体的图示如下:

5. Iterative Optimization
在初始化时,从原始数据集中生成一个m大小的子集S,在子集S中随机选择C个数据点作为初始球心,初始球心的选择应该能大致反应数据集在空间中的分布情况,以减少后边的优化开销。在球心选择后,根据平衡性和独立性的限制便可得到半径。之后,球哈希函数训练可分为两个阶段。
第一阶段:根据平衡性的限制,调整球心,使得\(O_{i,j}\)的值尽可能接近\(4/m\)。在此过程中,定义了两个球心的作用力如下所示:

为了满足平衡性的条件,当两个球的重合过多时,应产生排斥力将其分开;当两个球距离过远时,应产生吸引力使得互相靠近。而上述公式的原理便是通过利用\((O_{i,j} - m/4)\)和\((p_i - p_j)\)的符号正负关系实现排斥力和吸引力。而分母中的\(4/m\)是为了保证力的大小不受数据集大小m的影响。
第二阶段:当球心通过作用力更新位置完毕后,我们通过独立性的限制来调整半径\(t_k\)的大小。
在第一阶段中,理想情况是\(O_{i,j}\)的均值和标准差分别为\(m/4\)和0,但是这样容易产生过拟合,因此我们对均值和标准差设定了两个阈值——10%和15%,在这两个阈值下,算法具有最优的表现。
综述,整个球哈希算法的过程如下所示:

Spherical Hashing,球哈希的更多相关文章
- double hashing 双重哈希
二度哈希(rehashing / double hashing) 1.二度哈希的工作原理如下: 有一个包含多个哈希函数(H1……Hn)的集合.当我们要从哈希表中添加或获取元素时,首先使用哈希函数H1. ...
- Consistent hashing —— 一致性哈希
原文地址:http://www.codeproject.com/Articles/56138/Consistent-hashing 基于BSD License What is libconhash l ...
- hash环/consistent hashing一致性哈希算法
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的 ...
- 哈希学习(2)—— Hashing图像检索资源
CVPR14 图像检索papers——图像检索 1. Triangulation embedding and democratic aggregation for imagesearch (Oral ...
- Hashing图像检索源码及数据库总结
下面的这份哈希算法小结来源于本周的周报,原本并没有打算要贴出来的,不过,考虑到这些资源属于关注利用哈希算法进行大规模图像搜索的各位看官应该很有用,所以好东西本小子就不私藏了.本资源汇总最主要的收录原则 ...
- 一致性哈希算法(consistent hashing)(转)
原文链接:每天进步一点点——五分钟理解一致性哈希算法(consistent hashing) 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网 ...
- 从NLP任务中文本向量的降维问题,引出LSH(Locality Sensitive Hash 局部敏感哈希)算法及其思想的讨论
1. 引言 - 近似近邻搜索被提出所在的时代背景和挑战 0x1:从NN(Neighbor Search)说起 ANN的前身技术是NN(Neighbor Search),简单地说,最近邻检索就是根据数据 ...
- 一致性哈希算法学习及JAVA代码实现分析
1,对于待存储的海量数据,如何将它们分配到各个机器中去?---数据分片与路由 当数据量很大时,通过改善单机硬件资源的纵向扩充方式来存储数据变得越来越不适用,而通过增加机器数目来获得水平横向扩展的方式则 ...
- 一致性哈希java实现
值得注意的点 哈希函数的选择 murmur哈希函数 该函数是非加密型哈希,性能高,且发生哈希碰撞的概率据说很低 md5 SHA 可以选择guava包,提供了丰富的哈希函数的API 支持虚拟节点+加权, ...
随机推荐
- Odoo进销存业务思路浅析
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9307485.html 一:采购业务(进) 1:根据采购对象和性质,采购业务主要分为四类: 生产性采购:采购企 ...
- Node.js实战(一)之概述
, 一.Node.js介绍 Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进 ...
- JVM内存管理及GC机制
一.概述 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露 ...
- [转]OpenCV2.4.12 开启OpenGL启用三维可视化支持
OpenCV默认情况下是不支持OpenGL的,如果要使OpenCV支持OpenGL,则需要重编译,具体步骤如下: 注意事项:从The OpenCV Reference ManualOpenCV参考手册 ...
- python面试一:python2与python3的区别一
1.默认编码方式不同:py3用的是utf-8,变量名更为广泛.2.去除<>改用!=3加入as 和with关键字4./除法默认数据类型不同 py2 5/3=1 py3 5//3=15.去掉了 ...
- Unable to start a VM due to insufficient capacity
今天cloudstack中的一个普通用户创建虚拟机时,总是报错:Unable to start a VM due to insufficient capacity ,看management and a ...
- iOS开发之使用UIView-Positioning简化页面布局
使用过代码布局的人可能会有这样的感觉,给控件设置frame的时候比较繁琐.最 近在Github上看到有一个UIView的一个分类UIView-Positioning,这个分类提供了一些属性,比如lef ...
- Scala--特质
一.为什么没有多重继承 c++允许多重继承 Java不允许多重继承,类只能继承一个超类,可以实现任意数量的接口. 如何继承这两个抽象基类? Scala提供“特质”而非接口:特质可以同时抽象方法和具体方 ...
- 将jar文件加到Maven的local repository中
对于Maven项目来说,日常使用的多数第三方java库文件都可以从Maven的Central Repository中自动下载,但是如果我们需要的jar文件不在Central Repository中,那 ...
- 20155308《网络对抗》Exp4 恶意代码分析
20155308<网络对抗>Exp4 恶意代码分析 实践说明 实践目标 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件: ...