博客地址: https://mzwang.top/
Approximate Nearest Neighbor Search on High Dimensional Data — Experiments, Analyses, and Improvement
Wen Li([email protected]); Nanjing Audit University; University of Technology Sydney;
Ying Zhang([email protected]); University of Technology Sydney;
Yifang Sun([email protected]); The University of New South Wales;
Wei Wang([email protected]); The University of New South Wales;
Mingjie Li([email protected]); University of Technology Sydney;
Wenjie Zhang([email protected]); The University of New South Wales
Xuemin Lin([email protected]); The University of New South Wales
Transactions on Knowledge and Data Engineering(2019數據庫/數據挖掘/內容檢索A類期刊); 2019
儘管目前已有很多近似最近鄰算法,但是它們的性能沒有得到全面的評估和分析。本文對各類近似最近鄰算法進行了一個全面的評估,這樣做的目的有以下三點:
而且,通過實驗和分析,本文提出了一種新的基於近鄰圖的近似最近鄰搜索算法——DPG。該方法在構建k近鄰圖時同時考慮了數據點的距離和數據點的分佈,這不同於之前的NN-Descent和Wang提出的方法。
近鄰圖的構建一般只考慮數據點與它的鄰居點的距離。但是,本文不僅考慮這一點,它還考慮鄰居點的分佈,爲什麼要這樣呢?請看圖1。
圖1中, 和 是 的最近鄰,在2-NN圖中,如果查詢點爲 ,搜索執行到 時是無法繼續收斂到 的最近鄰點 的。 , , , 之間離得很近,可以認爲它們處於同一個集簇,這個時候 和 都在 的鄰居列表中其實作用不大。本文在連邊時不僅考慮距離的遠近,而且還考慮方向的多樣性,從而構建一個多樣化近鄰圖(Diversified Proximity Graph, DPG)。在圖1中,如果 的鄰居是 和 ,那將更有意義。
假設現在有向邊 已經沒了,現在 的鄰居是 和 。另一個問題又發生了, 只有出邊而沒有入邊,因爲 周圍的點距 都挺遠的, 不是這些點前兩個最近鄰點。這將導致 左右兩邊的兩個聚簇其實是不連通的,有研究表明,這一現象在高維數據中更普遍。因此,本文在連邊時添加的邊是雙向邊。
給定點 ,它的最近鄰列表爲 ,在 的最近鄰列表中的兩點 和 的相似性定義爲角度 ,表示爲 。我們的目標就是在 中找一個子集 ,其中 ,使得在 中,任意兩點的夾角的平均值最大,這樣的 中的點與 連邊。
核心選邊過程: 初始化爲 中距 最近的點,接下來就是 次迭代選邊過程,此過程同時考慮距離和分佈兩個因素。在每一次迭代,從集合 中移出一個點到 中,並且移出的這個點是使 中各點對之間的夾角的平均值最小的點(類似於經典的求最短路徑的算法)。這個過程的時間複雜度爲 。
時間複雜度推導過程: 現數據集中一共有 個點,給其中一個點 選邊,它的最近鄰列表 中有 個點,表示爲: ,假設它們已按距 的距離升序排好序。開始時先將 (作爲 )加入集合 ,接着,從 中剩下的 個點裏面選一個 ,使得 最大,因此需要 次計算。 找到後, 裏面還剩下 個點,從其中選一個 ,使得 與 之和最大,因此需要 次計算,……
因此,從
中選擇
個點到
中,需要的總計算次數爲
化簡可得
即爲
因此,給所有點選邊的理論時間複雜度爲
。
值是權衡距離因素和分佈因素的一個重要參數,作者在實驗中得出, 時能夠實現最好的性能。
在實際實施時,本文並不是完全按照上述描述來執行的,因爲上述過程的時間複雜度還是挺高的,作者通過對上述過程近似實施了一個簡化版本,它的時間複雜度爲 。
簡化版本選邊過程: 給 選邊時,爲它的 近鄰列表 中的每個點都設置一個計數器。比如,對於點對 和 ,如果 到 的距離小於 到 的距離,則 的計數器加一,對 中的任意兩個點都執行上述操作。之後,保留 個計數器的值最小的點作爲 的鄰居。這樣做的直覺是: 對於點 ,如果有很多點與之處於同一方向,則 的計數器的值就會很大。這個簡化版本的選邊與HNSW有一點點類似的。
先看一個搜索性能圖
由圖2可見,大部分情況下,HNSW的搜索性能是最優的,本文提出的DPG只在少數情況下是最優。而且,HNSW的性能在各種數據集下是最穩定的。因此,整體而言,HNSW的選邊策略還是更好一些,它的分層結構可能也做出了一些貢獻。
另一方面,DPG性能普遍優於KGraph,特別在召回率區域,這說明了考慮數據分佈因素的必要性。
要構建一個面向相似性搜索的近鄰圖,只考慮距離因素是不行的,如何實施一個數據分佈因素是一個值得考慮的問題。
近鄰圖構建的常用思路: 先提出抽象構建思路,這個過程一般可以很容易的符號化描述,一些性質也可嚴密推導,但一般其構建的時間複雜度較高,因此,會有一個近似的版本,近似版本可與抽象版本實現非常接近的效果(或者稍微差一點),而且近似版本一般還可顯著降低構建的時間複雜度。