一、概述
近鄰搜索在計算機科學中是一個非常基礎的問題,在信息檢索、模式識別、機器學習、聚類等領域有着廣泛的應用。如果在d維空間中,我們有n個數據點,采用暴力搜索尋找最近鄰的時間復雜度為O(dn)。當前我們的數據量越來越大,因此我們需要一些新的數據結構來查找最近鄰,使得任意給定一個數據就能快速找到近鄰數據點。早期的研究在低維空間取得了較好的效果,但是在高維空間時間復雜度卻依然接近O(dn),這就是維度災難帶來的問題。近些年,提出的近似計算的方法可以克服維度災難問題,其中最著名的就是Locality Sensitive Hashing(局部敏感哈希),簡稱LSH。
LSH是近似最近鄰問題的一種隨機化算法,其運算速度明顯快於其它現有方法,特別是在高維空間。LSH的基本思想是從LSH函數族中隨機選擇哈希函數,將每個數據點哈希到哈希表中;在查找最近的鄰居時,LSH只掃描與查詢點具有相同哈希索引的點。
二、定義與算法流程
1)定義:
For r1≤ r2 and p2≤p1,a hash family H is(r1,r2,p1,p2)-sensitive if for all x,y ∈Sd-1:
- if ||x-y||2 ≤ r1, then PrH[h(x)=h(y)] ≥ p1
- if ||x-y||2 ≥ r2, then PrH[h(x)=h(y)] ≤ p2
h是hash famlily中的一個hash函數,我們主要關注r1=R,r2=cR這種情況,稱作(R,c)-NN search,通過學習參數ρ來衡量一個哈希方案的敏感度:
什么樣的哈希函數才是符合局部敏感的呢?
如果距離近的點發生哈希碰撞的概率大於距離遠的點就屬於局部敏感哈希,也就是該哈希函數對數據點之間的距離是敏感的,局部相近的點能夠盡可能hash到一個桶內。結合上述定義通俗來講,兩個點如果距離不大於r1就認為是相近的;如果距離最小是r2=c*r1(c>1)就認為是較遠的,c就是上述遠與近的間隔。hash函數的質量由兩個關鍵參數表示:p1是近距離點發生哈希碰撞的概率,p2是遠距離點發生碰撞的概率。p1和p2之間的間隙決定了哈希函數對距離變化的“敏感度”,此屬性可以由上述ρ參數來表示,ρ<1且越小越好,通常可以表示為距離間隙c的函數。
2)算法查找流程:
1、根據LSH設計好的hash函數族中,隨機抽取k個hash函數,構建g(x)=(h1(x),...,hk(x))哈希表
2、采用1方式,構造L個哈希表,g1(x),...,gL(x),每個g(x)可以稱之為一個桶。
3、假設有n個數據已經存放於L個哈希表中,隨機給查詢q,從L個桶中查找,只要與q存在一個桶的數據都認為是近似近鄰數據,可以抽出來,假設有m個。
4、從m個數據中,再分別精確計算與q的距離,從而找出所需要的k個近鄰數據。
注:可以設置k=nρ,L=ln(1/p1*n),從而保證算法以不變的概率來解決(R,c)-NN問題。
近年來,設計良好的局部敏感哈希函數和基於LSH的高效近鄰搜索算法的問題引起了人們的廣泛關注,都將研究重點放在查找效率盡可能高的情況下而且能達到更小的ρ。
三、相關工作
理論方面, Andoni和Indyk之前給出了可以證明的基於LSH的單位球面上歐氏距離的最近鄰搜索算法,此算法最有名。具體來講, 該算法的關鍵參數ρ = 1/(2c2-1),查詢時間為O(nρ),空間復雜度為O(n1+ρ),算法的核心是一種稱為球面的LSH方案,簡稱SLSH,適用於單位向量。該算法的關鍵特性是能夠以一定概率區分開距離在 r1=√2/c、r2=√2之間的數據點。不幸的是,該算法不具備實際操作性,理論算法太過於復雜了,簡單的計算一個hash函數,都比掃描106個點的數據時間復雜度高。
在實際應用方面,Charikar工作中引入的超平面LSH雖然具有較差的理論保證,但在實踐中效果良好。由於超平面LSH算法可以非常高效地執行,因此它是基於LSH的近鄰算法中的標准hash函數,其實現比線性掃描實際數據提高了多個數量級。
上述LSH理論與實踐之間的差異提出了一個重要的問題:是否存在一個對局部敏感的hash函數,該函數具有最優的理論保證,且在實踐中比超平面LSH效果更好呢?Andoni和Indyk證明了有一個局部敏感的散列函數族可以同時達到這兩個目的。具體地說,該hash函數與他們早期提出的SLSH理論相匹配,結合一些附加技術后,給出了比超平面LSH更好的實驗結果,這就是cross-polytope LSH。
四、Cross-polytope(正軸體)
正軸體(Cross-polytope)是一類在任意維均存在的凸正多胞體,正軸體的表面由若干個單形(Simplex)組成,單形的個數為2n。如二維正軸體(2-orthoplex,即正方形)的表面由4條線段組成;三維正軸體(3-orthoplex,即正八面體)的表面由8個等邊三角形面組成;四維正軸體(4-orthoplex,即正十六胞體)的表面由16個正五胞體組成。
n維正軸體的頂點有2n個,均為坐標形如(±1,0,0,…)的點。如二維正軸體(即正方形)的4個頂點的坐標分別為(±1,0)、(0,±1);三維正軸體(即正八面體)的6個頂點的坐標分別為(±1,0,0)、(0,±1,0)、(0,0,±1);四維正軸體(即正十六胞體)的8個頂點的坐標分別為(±1,0,0,0)、(0,±1,0,0)、(0,0,±1,0)、(0,0,0,±1)。
五、Cross-polytope LSH
Cross-polytope LSH嚴格意義上來說就是SLSH的一種。之前的LSH方案考慮的都是Rd空間中任意的一點,SLSH考慮的是嵌入Rd空間的單位(d-1)球面上的任意點。SLSH使用隨機旋轉的規則多面體來分割單位超球的表面,在隨機旋轉多面體之后,散列函數h(x)被定義為分配給最接近x的頂點。換句話說,SLSH的hash函數像Voronoi圖一樣划分單位超球面的表面。目前已知的有三種規則多面體,分別是Simplex,Orthoplex (Cross polytope),Hypercube (Measure polytope)。
所以Cross-polytope LSH也是主要研究單位球面上歐幾里德距離的LSH,這是一個重要的特殊情況,有幾個原因:首先,球面情況在實際中有很多相關性可以利用,比如球面的歐幾里德距離與角距離或者余弦相似度有很高的相關性;此外,在理論方面,從整個歐氏空間中的最近鄰搜索變成到球面搜索,簡化了問題。
1、定義hash函數
假設A∈Rdxd是服從高斯分布N(0,1)的隨機矩陣(該矩陣相當於一個隨機旋轉),為了hash一個數據點x,采取下面公式:
ei∈Rd是第i個標准基向量,也就是cross-polytope上頂點,x轉換為單位向量后在球面上隨機旋轉,最后找到離得最近的正軸體頂點就是其hash值,比如三維的如果離頂點(1,0,0)近,hash值就是1;離(0,1,0)近,hash值就是2。因為每個軸都有正負,所以hash值的值域就是[1,2d],d是數據點的維度。
在當前hash函數定義下,其關鍵參數指標如下:
查詢時間復雜度為O(d·nρ),空間復雜度為O(n1+ρ+dn)。
2、使cross-polytope LSH實用化
1)偽隨機旋轉
根據上面定義,cross-polytope LSH還不太實用,主要瓶頸在於隨機旋轉的采樣、存儲和應用。特別是,要將隨機高斯矩陣與向量相乘,我們需要與d2成比例的時間,這對於高維的d是不可行的。為了解決這個問題,這里使用偽隨機旋轉,利用下面的線性轉換方法代替隨機高斯矩陣:
其中H是Hadamard變換,Di是隨機對角±1矩陣。顯然,這是一個正交變換,可以存儲在O(d)空間中,並使用快速的Hadamard變換在時間O(d logd)中求值。目前還不知道如何從數學上嚴格證明為何這種偽隨機旋轉和完全隨機旋轉那樣效果好,但經驗計算表明,只有兩種HDi的應用是不夠的,當d趨於無窮時候,三種HDi的應用幾乎等同於真正的隨機旋轉。
2)特征散列
對於輸入向量x,如果是稀疏的,非零項遠遠小於特征維度,可以在進行隨機旋轉之前采用特征散列實現維度縮減。利用一個線性映:x->Sx,對稀疏向量進行維度縮減。S是隨機稀疏矩陣d' X d,每一列只有一個均勻采樣±1非零項,則計算開銷變為O(S+d'logd')。
3、多探尋方案(Multiprobe scheme for the cross-polytope LSH)
多探尋方案方法主要針對基本LSH方法需要查詢大量哈希表來保證搜索質量的缺點進行的優化,在保證相同時間效率的情況下,Multi-Probe比基本的LSH方法減少了一個數量級的哈希表數量。標准的LSH數據結構只考慮hash表的一個維度,也就是hash值。對於單一的cross-polytope哈希,可選散列值的順序很簡單,結合上面的定義,hash值其實選取的就是隨機旋轉后x絕對值最大的所在維度,正負軸的合在一起,所以取值共有d個。而多探尋方案從多維度來考慮,最大值所在維度沒有發生hash碰撞,次大值所在維度應該是發生碰撞的第二概率,所以多探尋方案同時考慮了多個維度,對所有維度的絕對值從大到小排序,這就產生了多探測序列。
如果有多個hash函數,假設是k個,如何融合這些探測序列呢?原論文中考慮了呆查詢點q與p的多個維度的概率,公式如下:
A代表的隨機高斯旋轉矩陣,x代表旋轉后的q,h(p)代表p的標准hash值,rv代表x各維度絕對值從大到小排序后第v個值。我個人理解是在k個hash函數中,分別計算h(p)與x其中任意一個維度相等的概率,得到概率后論文中提到用大根堆進行排序,具體的可以看原論文,目前沒有特別明白這一塊。
LSH主頁:http://www.cs.columbia.edu/~andoni/LSH/
參考論文:
1、Practical and Optimal LSH for Angular Distance
2、Spherical LSH for Approximate Nearest Neighbor Search on Unit Hypersphere
3、Fast Cross-Polytope Locality-Sensitive Hashing