原文地址:【原创】LSH和p-stable LSH
作者:咖啡猫
一、原始LSH
LSH主要用来解决高维空间中点的近似最近邻搜索问题,即Approximate Nearest Neighbor。LSH将原始空间中的点嵌入到Hamming空间中,即原始空间中点的表达形式转换成Hamming空间中点的表达形式,原始空间中的距离度量转换成Hamming空间中的距离度量。这样,原始空间的e-NNS(定义见下文)问题就转变成Hamming空间中的e-KNN问题了。LSH方法提高了空间使用率,其搜索时间与维度线性相关的,与空间规模次指数相关,大大缩短了搜索时间。适用于解决不需要精确解,只需要得到近似解的问题。
1)若空间中两点p和q之间的距离D(p,q)<r1,则Pr(h(p)=h(q))>p1
2)若空间中两点p和q之间的距离D(p,q)>r2,则Pr(h(p)=h(q))<p2
条件在r1 < r2,p1 > p2的条件下有意义。
通俗来讲,就是距离较近的点映射到同一个位置的概率大,距离较远的点映射到同一个位置的概率小。这对下面将点集映射得到候选结果集的操作很重要,能保证得到的候选结果集是可用的。
定义一系列Hash函数h1,h2,…,hn,随机选取其中的k个函数组成函数g(x),不妨设选的是h1到hk,则g(x)=(h1(x),h2(x),…,hk(x)),像这样选取L个的g函数:g1(x),g2(x),…,gl(x),每个函数对应一个哈希表。对于原始空间中的每一个点p,通过每个g函数分别映射到L个哈希桶中。这样,每个点都会在L个哈希表的某个哈希桶中出现。查询时,给定了查询子q,利用L个g函数同样对q进行映射,将与q落在同一个哈希桶中的点作为候选结果集,计算q与候选结果集中的点之间的距离,并从中选出1个或K个距离最近的点。
简单的讲,就是讲原始的点集按距离分成不同的类,查询与q距离较近的点集时,只需比较和q在同一类中的点集,而不需要比较全部点集。从而节省了搜索时间。
因为许多符号不好打,并且内容较多,如果有需要详细步骤的,请参考:
里面包括算法步骤和算法分析。
LSH是用局部敏感的方法解决近似最近邻搜索的问题。在原始的LSH方法中,通过将原始空间嵌入到Hamming空间中,将d维空间转换成d'=Cd维的Hamming空间(C是指原始空间中点的坐标的最大值,具体情况参见上一部分中的第4节-算法步骤),使用(r,(1+e)r,1-r/d',1-(1+e)r/d')-敏感哈希函数来解决(r,e)-Neighbor问题。而后来提出的p-stable LSH算法中,不需要将原始空间嵌入到Hamming空间中,可以直接在欧几里得空间下进行局部敏感哈希运算。
p-stable LSH应用在d维lp-norm下的欧几里得空间中,0<p<=2。p-stable LSH是LSH的进化版本,要解决的问题相同,而使用的方法和应用环境不同。因此,下面重点介绍p-stable LSH的应用环境,对于LSH的细节参见第一部分。
p-stable LSH使用的(R,cR,p1,p2)-敏感哈希中,c=1+e,并且不失一般性,设R=1。下面的工作主要是确定在1(即R)和c(即cR)下的p1与p2。
p-stable LSH之所以会叫这个名字,是因为该算法应用到p-stable distribution(p-稳定分布)的概念。下面给出的就是p-稳定分布的概念:
Def 1 : 一个分布D称为p-稳定分布,如果对于任意n个实数v1,v2,…,vn和符合D分布的n个独立同分布随机
变量X1,X2,…,Xn,都存在一个p>=0,使得变量和具有相同的分布,此处X是一个符合D分布的随机变量。
p-stable分布有一个重要的应用,就是可以估计给定向量v在欧几里得空间p-norm下长度,记为||v||p。方法是对于取定的d维向量v,从p-稳定分布中抽取d个随机变量组成d维向量a,计算a与v的点积a.v(点积的概念是将向量对应位置的元素相乘后所有乘积之和),根据p-stable的定义,由于a.v=
,因此a.v与||v||pX是同分布的(X是p-
stable分布的一个随机变量)。选取若干个向量a,计算多个
a.v的值,称为向量
v的“概略(sketch)”,利用
v的“sketch”可以用来估算||
v||p的值。
在p-stable LSH中,
a与
v的点积
a.v不用来估计||
v||p的值,而是用来生成哈希函数族,且该哈希函数族是局部敏感的(即空间中距离较近的点映射后发生冲突的概率高,空间中距离较远的点映射后发生冲突的概率低)。大体方法是将一条直线分成等长且长度为r的若干段,给映射到同一段的点赋予相同的hash值,映射到不同段的点赋予不同的hash值。(
a.v1-
a.v2)是映射后的距离,而其值与||
v1-
v2||pX同分布,因此,原始距离(
||
v1
-
v2
||p)较小时,映射后的距离也小,因此使用点积来生成哈希函数族可以保持局部敏感性。
从哈希函数族中随机选取一个哈希函数,现在估计两个向量
v1和
v2在该哈希函数下映射后发生冲突的概率。定义符合p-stable分布的随机变量绝对值的概率密度函数为fp(t),设c=||
v1-
v2||p,则
a.v1-
a.v2与cX同分布,X为p-stable分布下的随机变量。给出概率的计算公式如下,之后会有详细分析。
因为|
a.v1-
a.v2|=||
v1-
v2||p|X|=c|X|,X为p-stable分布下的随机变量,|X|的概率密度函数为fp(t)。若要向量
v1和
v2映射后发生冲突,需要满足如下条件:
v1和
v2通过与
a进行点积运算分别映射到一段长度为r线段后,再通过加b运算,能使映射后的点在同一条线段上。
以下是对该概率公式正确性的证明:
设点
a.v1在点M处,点
a.v2在点N处,此处设N点在靠近Q的位置。
在加b后,
因为b>0,因此加b后点会后移。不失一般性,设r=1,则有以下两种情况:
(1)若映射到同一条线段上,不妨设为线段PQ(P为前端点,Q为后端点),设|MN|=t,|NQ|=m,则若要保证加b后点M和点N仍在同一条线段中,则要满足0<b<=m(此时加b后M,N仍在线段PQ中),或者t+m<=b<r(此时加b后点M,N落入下一条线段中)。
(2)若映射到不同线段上,但|MN|<r(此时必在相邻线段中),不妨设相邻两条线段为PQ和QR,设|MQ|=m,则|QN|=t-m,则若要保证加b后点M和点N仍在同一条线段中,则要满足m<b<r-(t-m)。
1、概述
2、相关概念
(1)哈希桶(Hash Bucket):哈希表中同一个位置可能存有多个元素,以应对哈希冲突问题。这样,哈希表中的每个位置表示一个哈希桶。
(2)e-NNS问题:对于一个查询子q,返回空间中的一个点p,使得d(q,p) <= (1+e)d(q,P),d(q,p)表示查询子与空间中点p的距离,d(q,P)表示查询子距空间点集P中最近点之间的距离。
(3)局部敏感:称一个函数族H={h:S->U}是(r1,r2,p1,p2)局部敏感的,如果满足下面两个条件(D为空间距离度量,Pr表示概率):
3、算法思想
4、算法步骤(L1准则下的欧几里得空间嵌入Hamming空间中)
二、
p-stable LSH
1、背景介绍
2、概念解释
3、局部敏感哈希函数
(一)b对映射后点的影响
(二)点积对映射后点的影响
在上概率公式中,对于给定的r,概率p(c)是关于c的单调递减函数。即,c=||
v1-
v2||越大,映射后发生冲突的概率就越小,这符合局部敏感哈希函数的要求。因此,所选取的哈希函数族是局部敏感哈希函数族,并且是(r1,r2,p1,p2)-敏感的,其中p1=p(1),p2=p(c),r2/r1=c。c>1时,满足p1>p2,r1<r2。
以上就是对p-stable LSH的讨论,它通过涉入稳定分布和点积的概念,实现了LSH算法在欧几里得空间下的直接应用,而不需要嵌入Hamming空间。p-stable LSH中,度量是欧几里得空间下的lp准则,即向量
v1与
v2的距离定义为||
v1-
v2||p,然后通过设定的哈希函数将原始点映射到直线的等长线段上,每条线段便相当于一个哈希桶,与LSH方法类似,距离较近的点映射到同一哈希桶(线段)中的概率大,距离较远的点映射到同一哈希桶中的概率小,正好符合局部敏感的定义。
{
转载或引用请注明原文地址,谢谢!}