【Graph Embedding】: node2vec算法

論文“node2vec: Scalable Feature Learning for Networks”發表在kdd2016,文章提出了一個新的graph embedding

論文地址:https://www.kdd.org/kdd2016/papers/files/rfp0218-groverA.pdf

作者提供的代碼地址:http://snap.stanford.edu/node2vec/

微信將node2vec用於廣告lookalike的應用:微信的廣告投放策略

算法“node2vec”。算法定義了一個圖中節點鄰域的靈活概念,並設計了一個帶偏置的隨機遊走過程,用於有效的探索不同的鄰域。作者認爲在探索鄰域時的靈活性是學習出更豐富節點表示的關鍵。

其實node2vec算法算是deepwalk的一個擴展,如果將節點採樣問題看成一種局部搜索的形式的話,那麼deepwalk中的隨機遊走,有點類似於鄰域的深度優先搜索。而node2vec通過引入兩個參數來控制隨機遊走,做到來相當於深度優先搜索和廣度優先搜索的結合,可以自由控制鄰域探索的方式,再針對提取的鄰域利用SGD進行優化。。

本文提出了一個用於大尺度網絡特徵表示的半監督算法node2vec。利用二階的隨機遊走策略來採樣節點的鄰域節點。

 

特徵學習框架(Feature learning framework)

將特徵學習問題定義爲最大似然優化問題,定義網絡G(V,E),令f: V\rightarrow R^d是我們要學習的函數f,表示節點到特徵表示的一個映射函數。d是embedding的維度。f就是我們學習出來的embedding矩陣。對於每個節點u\in V,定義N_S(u)\subset V作爲節點u通過鄰域採樣策略S生成的鄰域節點。

優化目標:最大化在節點u的條件下,出現其鄰域節點的對數概率,節點u用其由函數f生成的embedding向量表示,所以優化目標爲:

                                             

爲了簡化優化問題,做了兩個標準假設:

1.條件獨立。假設節點u的鄰域節點之間出現的概率相互獨立,那麼優化目標就可以變成:

                                          

2.特徵空間對稱性。即節點與節點之間是對稱,所有的節點都在同一個空間下面。既然在同一個特徵空間下面,那麼我們可以把節點與其鄰域節點的條件似然概率定義成softmax形式,如:

                                          

有了寫兩個假設,再把這兩個公式帶回原來的優化目標中,就能得到新的目標函數:

                                           

這裏的Z_u=\sum_{v\in V}exp(f(u)\cdot f(v))是歸一化因子,這裏就可以用上神經網絡裏面針對softmax的常用套路了,做負採樣。

然後根據這個目標函數,直接利用skip-gram來學習embedding向量。其實這裏和deepwalk的後半部是一樣的,關鍵是怎麼從graph中採樣session出來給skip-gram訓練。

採樣策略

爲了比較不同的抽樣策略S,限制節點的鄰域Ns爲k個節點,然後爲節點u採樣多個集合。常用的鄰域節點採樣方法:

廣度優先採樣(BFS):鄰域節點的採樣限制爲和目標節點直接鏈接的節點。

深度優先採樣(DFS):鄰域節點的採樣按從源節點距離越來越遠的順序進行採樣。

nodel2vec

文章設計了一個靈活的採樣策略用於平衡BFS和DFS,即利用帶偏置的隨機遊走策略來,該方式可以BFS和DFS的方式探索鄰近區域。

隨機遊走(Random Walks)

先給出定義:給定一個源節點u,確定好隨機遊走的長度爲l。用c_i表示隨機遊走中的第i個節點,以c_0=u開始,那麼節點c_i生成方式爲:

                                        

其中\pi_{vx}是節點v和節點x之間的未歸一化的轉移概率,Z是歸一化因子。

搜索偏置

最簡單的隨機遊走方法就是讓\pi_{vx}=w_{vx},就是按邊的權重分配等價的概率來選擇下一個節點。但是這樣就沒發做鄰域探索。所以作者提出了一個二階的隨機遊走策略,利用兩個參數p和q來控制遊走。

                                            

如上圖,假設現在經過隨機遊走,節點從t經過邊(t,v)到來v,那麼當前節點爲v,遊走策略需要確定下一個節點走哪裏,這裏設置未歸一化轉移概率爲\pi_{vx}=\alpha_{pq}(t,x)\cdot w_{vx},其中

                                                        

這裏的d_{tx}指的是節點t和節點x的最短路徑距離,且d_{tx}的範圍是{0,1,2}中的一個,因此這兩個用於知道遊走的參數是十分必要的。

返回參數p(Return parameter p).返回參數p,參數p是控制下一個節點是否選擇上一節點的概率,所以該參數的需要設置一個較大的值,確保我們小概率的採樣一個已經訪問過的節點,除非下一個節點沒有其他鄰域節點了。

內外參數q(In-out parameter q).參數q控制下一個遊走的節點是靠近原來的節點還是遠離原來的節點。如果q>1,那麼隨機遊走偏向於靠近原始節點t,q<1則相反。

隨機遊走的優勢。隨機遊走在空間和時間上都是比較有效的

算法的整個流程

                                      

這裏預先計算了轉移概率,並用alias採樣算法可以在O(1)時間內完成採樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章