【圖機器學習】cs224w Lecture 10 - PageRank

WineChocolate發表於2020-05-20

轉自本人:https://blog.csdn.net/New2World/article/details/106233258

將網際網路視為圖的話,它必定存在結構上的一些規律。首先回顧一下強連通子圖 (strongly connected component, SCC),如果一個有向圖的子圖內任意節點可以互相到達,那麼這就是一個 SCC。而包含節點 A 的 SCC 必滿足 \(SCC(A)=Out(A)\cap In(A)\) 其中 Out 和 In 分別表示從 A 出發能到達的點以及能到達 A 的點。
在 2000 年的一篇網際網路分析論文中顯示,當時網際網路節點大概 2 千萬左右,連結數在 15 億上下。對於隨機點的 Out 和 In 大概都覆蓋了半個網際網路,即 1 千萬個點,由這個隨機點得到的 SCC 覆蓋了 1/4 個網際網路。由此我們可以大致畫出網際網路的構成關係圖。

SCC structure

PageRank

搜尋引擎的工作就是根據我們提供的關鍵詞對如此大規模的網頁進行相關性排序的過程,然後將最相關的多條連結返回給使用者。然而網際網路如此之大,我們提供的關鍵詞並不精確,當同時存在多條完美匹配的記錄時怎樣儘可能返回更優質的連結成為了曾經的一道難題。當時在 Stanford 就讀的 Google 創始人之一 Larry Page 和他的小夥伴提出了 PageRank —— 一種網頁評分的迭代策略。因此 PageRank 中的 Page 實際上是人名。
PageRank 的思想很簡單,把網頁間的連結視為一種均勻的投票機制。比如節點 v 有三個外鏈,且其自身的初始“票權”為 1。那麼迭代開始後,v 會將自己的票平分給三個外鏈,即每個外鏈能得到 1/3。同理如果 v 是其它節點的外鏈,那 v 也會得到其它節點平分後的票。一直這麼迭代下去直到收斂就是 PageRank 的核心過程。或者另一種解釋是通過 random walk 來理解。如果當前我們位於節點 v,那麼我們可以等概率的轉移到 v 指向的所有鄰接節點。當轉移足夠多次後會達到一個類似 MDP 中的穩定狀態,表示在任意時間點我們位於各個節點的概率。
Talk is cheap, show me the 'math'. \(r\) 為權重,\(d\) 為出度。

\[r_j = \sum_{i\rightarrow j}\frac{r_i}{d_i} \]

寫成矩陣的形式為 \(r = M \cdot r\),其中 \(M_{ij}\) 表示 j 到 i 的權重,也就是說 \(M\) 的每一行其實是入度,這與鄰接矩陣恰好相反。
回過頭看看這個矩陣表示 \(r = M\cdot r\),是不是很像特徵值的定義?也就是說,當滿足 \(r = M\cdot r\) 時,\(r\)\(M\) 的(主)特徵向量,且對應的特徵值為 1,而這個 \(r\) 就是一個 stationary 的權重分佈。
雖然這個問題看似可以通過解線性方程組的方式得到解析解,然而這樣做忽略了一個重要的前提:網路的規模。要解決一個有千萬甚至上億個變數的方程組,時間開銷不是玩笑……

Power iteration

  1. 初始化:\(r\)
  2. 迭代:\(r^{(t+1)}=M\cdot r^{(t)}\)
  3. 停止:\(|r^{(t+1)}-r^{(t)}|_1<\epsilon\)

Problems

目前為止 PageRank 很完美,然而它遇到兩種情況時會出現 bug。

  1. Dead ends:沒有 out-link 的節點,這種節點會導致整個系統的權重洩漏。(不收斂)
  2. Spider traps:對於一個節點群,所有的 out-links 都指向群體內部節點。這種情況會導致這個節點群吸收掉整個系統中的所有權重。(收斂得到的結果並非我們想要的)

上述兩個問題可由隨機跳轉方法解決

  1. 遇到 dead ends 時以概率 1 跳轉到其它任意節點。
  2. 系統判斷進入 trap 後,以概率 p 轉移到其它任意節點。

而 Google 將這隨機跳轉和 PageRank 統一起來,通過設定概率 \(\beta\) 來控制迭代過程。以 \(\beta\) 的概率規規矩矩地迭代;以概率 \(1-\beta\) 的概率跳轉到任意節點。

\[r_j = \sum_{i\rightarrow j}\beta\frac{r_i}{d_i}+(1-\beta)\frac1N \]

通常來說 \(\beta=0.8\ 0.9\),即平均 5 次迭代後跳轉。不過這麼做的前提是 dead ends 已經被提前處理掉了,比如直接刪除 dead ends,或在 dead ends 處以概率 1 進行跳轉。在實際運算中,並不會將 \((1-\beta)/N\) 直接加到矩陣裡去。因為加上 \((1-\beta)/N\) 後會破壞 \(M\) 稀疏矩陣的性質,這樣會耗費大量儲存空間。因此一般先計算 \(\beta M\cdot r\) 然後對得到的 \(r\) 向量的每一項加上 \((1-\beta)/N\)
下面給出 PageRank 的偽碼

PageRank pseudocode

沒有 dead ends 的情況下,系統不會出現權重洩漏的情況。一旦出現 dead end,權重洩漏會導致 \(\sum_jr_j^{new}<1\),因此上面的偽碼中通過記錄權重和 S 來彌補洩漏。而這裡必定有 \((1-S)/N \geq (1-\beta)/N\)

Personalized PageRank

現在考慮另一個問題,計算機領域如此多大大小小的會議以及投各個會議的大牛們,如何通過各研究者投的會議來推斷哪些會議涉及的領域相似。

conference

其實這個問題也是一個相關性排序的問題,只不過出發點固定為了你想查詢的那個會議。還是通過 random walk 的思想來解決。比如要查詢 ICDM,那從 ICDM 出發能通過 Philip S. Yu 到達 KDD, SDM 和 AAAI,通過 Ning Zhong 到達 IJCAI。問題是如果“走到頭”了怎麼辦?這裡就不能隨機跳了,因為很有可能會跳到毫不相關的會上去。因此這裡使用的是 random walk with restart,顧名思義走不動了就回到起點,即 ICDM 然後重新開始。就這樣不停的 random walk 就能得到到達各個會議的次數,根據次數排序就是相關度排序了。而且這種方法能同時查詢多個會議。


總結一下,PageRank 實質其實就是一個 random walk 的過程,而幾種不同的 PageRank 的區別僅在於跳轉後落點的概率 S。

  1. PageRank:\(S=[1/N, 1/N, 1/N,..., 1/N]\)
  2. Personalized:\(S=[0.1, 0, 0.1,..., 0.2, 0,..., 0.3]\) (反正和為 1)
  3. Random Walk with Restart:\(S=[0, 0, 0, 1, 0,..., 0]\)

相關文章