1. 程式人生 > >雜湊學習演算法之一:ANN背景介紹

雜湊學習演算法之一:ANN背景介紹

一、由ANN進入Hash

NN,即最近鄰(nearest neighbor),定義在一個數據集X中,查詢點q的最近鄰是NN(q)=argmin dist(q,x) 其中x∈X。直接的表示,即為KNN查詢,也就是需要找到K個最近鄰。一個點x和查詢點q的距離取決於具體的查詢問題。例如:d維空間的資料集,和歐式距離的場景。
在低維空間時,這些情況都可以得到有效解決(比如k-d tree演算法)。然而,在大規模高維資料時,有些演算法的計算消耗甚至比線性消耗還要大。所以,ANN(Approximate nearest neighbors)近似最近鄰查詢被提出,主要是從兩個方面實現近鄰查詢。

  1. error-constrained nn
    誤差約束最近鄰查詢,包括(1+ε)-approximate 最近鄰查詢、R-near neighbor近鄰查詢
  2. time-constrained nn
    時間約束最近鄰查詢,是限制查詢時間。它的目標是實現返回的k個最近鄰點儘可能的與實際近鄰點相似,同時查詢代價儘可能小。

那這和我們研究的雜湊演算法有什麼關係呢?雜湊是在ANN中廣泛應用的一種解決方案。雜湊方法是將參考點和查詢點對映到目標物件,ANN從而轉換為對目標物件或者一部分原始參考點的處理。

二、Hash執行ANN查詢

第一部分中最後提到經雜湊函式轉換後,得到的目標物件,即為Hash碼。

2.1 hash函式

雜湊函式定義為y=h(x),其中h(.)是雜湊函式,y是雜湊碼。y可能是一個整數,也可能是一個二進位制值:1或0、1或-1。
在實際應用中,一般是使用多個雜湊函式計算複合雜湊碼,y=h(x),其中h=[h1,h2,h3…hM]^T ,y=[y1,y2,y3…yM]^T。

2.2 應用ANN

一般hash在ANN應用中,有兩種基本的方法:雜湊表查詢(hash table lookup)和雜湊碼排序(hash code rank)。

  • hash table lookup
    雜湊表查詢是減少距離計算的數量。它採用雜湊桶的資料結構,每一個參考點被放置到一個桶h(x)中,每一個桶可由一個雜湊碼找到。常規的雜湊演算法是儘可能的降低碰撞率,而雜湊表的目標
    :儘可能的將鄰近點的碰撞率最大化,同時遠距離點的碰撞率最小化。在找到查詢點對應的雜湊桶後,需要對桶內所有的參考點,計算原始特徵的距離,重排序後得到最近鄰點。
    為提高召回率,一般有兩種方式:1.單表雜湊 單張雜湊表,需訪問多個雜湊桶。2.多表雜湊 構造多張雜湊表。(詳細解釋參見下一節)
  • hash code ranking
    雜湊碼排序是一種窮盡檢索。它的執行辦法是:依據查詢點和引用點的雜湊碼比較他們之間的距離,獲得最近的候選列表。接著重排序,使用原始特徵對候選項進行距離計算,獲得最近鄰點。

基於LSH的雜湊表查詢在實際中較少採用,而基於量化的雜湊表查詢被廣泛應用獲得較粗的候選列表。雜湊碼排序由於遍歷所有的候選列表,在查詢效率上不及雜湊表查詢。兩者各有優缺點。
一種常用的方法是:首先使用倒排索引獲得較小的候選列表(可視為雜湊表),使用更長的雜湊碼計算查詢點到候選列表的距離,從而提供前幾個候選項,最後在原始空間上重排序候選項。