同時考慮距離因素和分佈因素的多樣化近鄰圖DPG——TKDE頂刊論文閱讀筆記

博客地址: 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

作者擬解決的主要問題

儘管目前已有很多近似最近鄰算法,但是它們的性能沒有得到全面的評估和分析。本文對各類近似最近鄰算法進行了一個全面的評估,這樣做的目的有以下三點:

  1. 各個領域的算法和數據集可能會"並行提出"。某一領域的解決方案可能已在另一領域中存在,而不必重複開發。而且,不同領域的算法很少能放在一起比較的。
  2. 忽略了評估標準和設置。一個近似最近鄰算法可從各個角度來評估。比如,搜索時間、搜索質量、索引尺寸、可擴展性(關於數據集的規模和維數)、魯棒性(數據集、查詢負載和參數設置)、可更新性,調參工作量等。
  3. 現存結果的差異。同一個算法不同的實施結果差別很大,我們需要一個一致性的比較結果。

而且,通過實驗和分析,本文提出了一種新的基於近鄰圖的近似最近鄰搜索算法——DPG。該方法在構建k近鄰圖時同時考慮了數據點的距離和數據點的分佈,這不同於之前的NN-DescentWang提出的方法。

論文主要研究內容

  1. 對現存一些主要的近似最近鄰算法做一個全面的評估。
  2. 分析造成各種算法在不同情況下的優劣的原因。
  3. 構建一個更有效的基於近鄰圖的近似最近鄰算法。

論文使用的方法

動機案例

近鄰圖的構建一般只考慮數據點與它的鄰居點的距離。但是,本文不僅考慮這一點,它還考慮鄰居點的分佈,爲什麼要這樣呢?請看圖1。

圖1 考慮鄰居點分佈的作用示例

圖1中, a 3 a_3 a 4 a_4 p p 的最近鄰,在2-NN圖中,如果查詢點爲 q q ,搜索執行到 p p 時是無法繼續收斂到 q q 的最近鄰點 b b 的。 a 1 a_1 a 2 a_2 a 3 a_3 a 4 a_4 之間離得很近,可以認爲它們處於同一個集簇,這個時候 a 3 a_3 a 4 a_4 都在 p p 的鄰居列表中其實作用不大。本文在連邊時不僅考慮距離的遠近,而且還考慮方向的多樣性,從而構建一個多樣化近鄰圖(Diversified Proximity Graph, DPG)。在圖1中,如果 p p 的鄰居是 a 3 a_3 b b ,那將更有意義。

假設現在有向邊 p , a 4 \langle p, a_4 \rangle 已經沒了,現在 p p 的鄰居是 a 3 a_3 b b 。另一個問題又發生了, p p 只有出邊而沒有入邊,因爲 p p 周圍的點距 p p 都挺遠的, p p 不是這些點前兩個最近鄰點。這將導致 p p 左右兩邊的兩個聚簇其實是不連通的,有研究表明,這一現象在高維數據中更普遍。因此,本文在連邊時添加的邊是雙向邊

DPG的構建過程

給定點 p p ,它的最近鄰列表爲 L L ,在 p p 的最近鄰列表中的兩點 x x y y 的相似性定義爲角度 x p y \measuredangle xpy ,表示爲 θ ( x , y ) \theta (x,y) 。我們的目標就是在 L L 中找一個子集 S S ,其中 S = k \lvert S \rvert = k ,使得在 S S 中,任意兩點的夾角的平均值最大,這樣的 S S 中的點與 p p 連邊。

核心選邊過程: S S 初始化爲 L L 中距 p p 最近的點,接下來就是 k 1 k-1 次迭代選邊過程,此過程同時考慮距離和分佈兩個因素。在每一次迭代,從集合 L S L \setminus S 中移出一個點到 S S 中,並且移出的這個點是使 S S 中各點對之間的夾角的平均值最小的點(類似於經典的求最短路徑的算法)。這個過程的時間複雜度爲 O ( k 2 K n ) O(k^2 K n)

時間複雜度推導過程: 現數據集中一共有 n n 個點,給其中一個點 p p 選邊,它的最近鄰列表 L L 中有 K K 個點,表示爲: v 1 , v 2 , , v K v_1, v_2, \cdots, v_K ,假設它們已按距 p p 的距離升序排好序。開始時先將 v 1 v_1 (作爲 s 1 s_1 )加入集合 S S ,接着,從 L L 中剩下的 K 1 K-1 個點裏面選一個 s 2 s_2 ,使得 s 1 p s 2 \measuredangle s_1 p s_2 最大,因此需要 K 1 K-1 次計算。 s 2 s_2 找到後, L L 裏面還剩下 K 2 K-2 個點,從其中選一個 s 3 s_3 ,使得 s 1 p s 3 \measuredangle s_1 p s_3 s 2 p s 3 \measuredangle s_2 p s_3 之和最大,因此需要 2 ( K 2 ) 2(K-2) 次計算,……

因此,從 L L 中選擇 k k 個點到 S S 中,需要的總計算次數爲
i = 1 k 1 i ( k i ) \sum_{i=1}^{k-1} i(k-i)
化簡可得
k ( k 1 ) 2 K k ( k 1 ) ( 2 k 1 ) 6 \frac{k(k-1)}{2} K - \frac{k(k-1)(2k-1)}{6}
即爲
O ( k 2 K ) O ( k 3 ) = O ( k 2 K ) O(k^2 K) - O(k^3)=O(k^2 K)
因此,給所有點選邊的理論時間複雜度爲 O ( k 2 K n ) O(k^2 K n)

K K 值是權衡距離因素和分佈因素的一個重要參數,作者在實驗中得出, K = 2 k K=2k 時能夠實現最好的性能。

在實際實施時,本文並不是完全按照上述描述來執行的,因爲上述過程的時間複雜度還是挺高的,作者通過對上述過程近似實施了一個簡化版本,它的時間複雜度爲 O ( K 2 n ) O(K^2 n)

簡化版本選邊過程: p p 選邊時,爲它的 K K 近鄰列表 L L 中的每個點都設置一個計數器。比如,對於點對 u u v v ,如果 v v u u 的距離小於 v v p p 的距離,則 v v 的計數器加一,對 L L 中的任意兩個點都執行上述操作。之後,保留 k k 個計數器的值最小的點作爲 p p 的鄰居。這樣做的直覺是: 對於點 x x ,如果有很多點與之處於同一方向,則 x x 的計數器的值就會很大。這個簡化版本的選邊與HNSW有一點點類似的。

論文的創新點

  1. 實踐了更全面的對近似最近鄰搜索算法進行評估的方法;
  2. 近鄰圖構建時把選邊過程的約束總結爲兩個因素,並分析說明數據分佈因素對構建一個面向近似最近鄰搜索的近鄰圖的重要性;
  3. 提出了按角度選邊這種數據分佈因素的具體實施方式;
  4. 提出了能夠和按角度選邊實現近似效果的簡化版本實施數據分佈因素的選邊方式。

論文的結論

先看一個搜索性能圖


圖2 搜索性能比較

由圖2可見,大部分情況下,HNSW的搜索性能是最優的,本文提出的DPG只在少數情況下是最優。而且,HNSW的性能在各種數據集下是最穩定的。因此,整體而言,HNSW的選邊策略還是更好一些,它的分層結構可能也做出了一些貢獻。

另一方面,DPG性能普遍優於KGraph,特別在召回率區域,這說明了考慮數據分佈因素的必要性。

我的觀點或思考

要構建一個面向相似性搜索的近鄰圖,只考慮距離因素是不行的,如何實施一個數據分佈因素是一個值得考慮的問題。

近鄰圖構建的常用思路: 先提出抽象構建思路,這個過程一般可以很容易的符號化描述,一些性質也可嚴密推導,但一般其構建的時間複雜度較高,因此,會有一個近似的版本,近似版本可與抽象版本實現非常接近的效果(或者稍微差一點),而且近似版本一般還可顯著降低構建的時間複雜度。