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 支持虚拟节点+加权, ...
随机推荐
- haproxy安装及日志配置
1.yum安装 yum install haproxy -y 2.配置文件修改,经典配置 vim /etc/haproxy/haproxy.cfg #------------------------- ...
- 求 1+2+3+ …… +n
题目来源: 自我感觉难度/真实难度: 题意: 分析: 自己的代码: def Sum_Solution(n): # write code here if n==1: return 1 else: ans ...
- Linux安装配置apache
Linux安装配置apache 1.获取软件: http://httpd.apache.org/ httpd-2.2.21.tar.gz 2.安装步骤: 解压源文件: 1 tar zvxf ht ...
- Web.config中 mode="RemoteOnly" 跟mode="On" 区别
转载网址:mode="RemoteOnly" 跟mode="On" 区别 <!-- 自定义错误信息 设置 customErrors mode=" ...
- OutputFormat输出过程的学习
花了大约1周的时间,最终把MapReduce的5大阶段的源代码学习结束掉了.收获不少.就算本人对Hadoop学习的一个里程碑式的纪念吧.今天花了一点点的时间,把MapReduce的最后一个阶段.输出O ...
- 详解分布式应用程序协调服务Zookeeper
主从结构:HDFS.Yarn.HBase.storm.spark.zookeeper都存在单点故障问题 hadoop1.x没有解决方案 hadoop2.x利用zookeeper实现HA zookeep ...
- spark-windows(含eclipse配置)下本地开发环境搭建
spark-windows(含eclipse配置)下本地开发环境搭建 >>>>>>注意:这里忽略JDK的安装,JDK要求是1.8及以上版本,请通过 java ...
- POJ 1860&&3259&&1062&&2253&&1125&&2240
六道烦人的最短路(然而都是水题) 我也不准备翻译题目了(笑) 一些是最短路的变形(比如最长路,最短路中的最长边,判环),还有一些就是裸题了. 1860:找环,只需要把SPFA的松弛条件改一下即可,这里 ...
- Nuxt 开发 - 项目初始化
Nuxt是基于Vue的一个应用框架,采用服务端渲染(SSR),可以让用户的Vue单页面应用(SPA)也可以有利于SEO. 项目初始化 参考:https://zh.nuxtjs.org/guide/in ...
- 蓝牙学习笔记二(Android连接问题)
可以通过以下两点加速蓝牙连接: 1.更新连接参数 interval:连接间隔(connection intervals ),范围在 7.5 毫秒 到 4 秒. latency:连接延迟 ... 还有一 ...