圖上的機器學習系列-聊聊struc2vec

前言


本篇繼續我們的Graph Embedding之旅。以往我們生成的節點向量保留的一個特徵是節點之間的距離,基於隨機遊走的這一類方法生成的節點距離往往是圖上空間位置上的相近。現實世界中,網絡中的節點往往還有一個特徵就是其在網絡結構上的位置角色,類似於下圖中u,v這兩個節點,它們在結構上的作用很相似,但如果基於隨機遊走的方法來進行embedding表示,無法將其映射爲相似的賬號。對傳統複雜網絡領域有所瞭解的同學也會聯想到邊介數、點介數這樣的特徵,它們刻畫的也是節點或邊在整個網絡中的作用與影響力。

因此,今天我們將要介紹的這個struc2vec方法要刻畫的就是這類節點的向量化表達,參考的論文爲《struc2vec: Learning Node Representations from Structural Identity》。

----廣告時間,歡迎關注本人公衆號

算法思路消化


事實上,struc2vec可歸屬爲deepwalk一類的方法,其最核心的方法仍然是先生成節點的序列,然後使用SkipGram來進行向量化求解。到目前爲止,我們看到deepwalk發佈以來,node2vec,metapath2vec,struc2vec都是遵循了其基本思想!也許這就是影響力吧,能對後人產生深遠的影響,這種價值真是挺大的。話說回來,這些方法的差異點無非在於生成節點序列化的過程怎麼操作,以便實現不同的關注重點。下面讓我們帶着問題來消化一下struc2vec。

struc2vec怎樣度量節點的相似性?
創新性來了,本方法將節點之間的相似性進行了分層(hierarchy),用下面的計算方法來定義了第k層(也叫第k跳距離上)上u,v兩個節點的相似性。

其中s()是一個排過序的度數序列,例如第k跳的路徑上依次經過了v1,v2…vk節點,其節點度數分別爲d1,d2…dk,排序後的序列爲d1’,d2’…dk’,那麼s() = (d1’, d2’… dk’)。那麼計算上面的相似性的任務就依賴於g這個函數怎樣計算不同節點度序列的距離。
作者採用了一種叫做Dynamic Time Warping的方法。

最後,值得一提的是,作者說雖然論文中採用了這種相似性計算方法,但如果使用者有其它的方法,也是可以採用本論文的框架來計算的。這就使得該方法有了一定的可定製性。

struc2vec怎樣設計隨機遊走的策略,以便得到它自己的節點序列?
爲了讓生成的節點序列能捕捉到節點的結構性特徵,作者同樣設計了一個很巧妙的構思——構造一個分層的加權圖。我根據論文的內容畫了一個示意圖如下所示:

不同層級的邊權重也有一個定義:

生成這個分層的圖,最終還是爲了生成節點的隨機遊走序列。因爲這裏有不同的layer,所以遊走的過程會有幾種:保留在本layer內遊走,向上到k+1層,向下到k-1層。與前人的思想類似,設計幾種遊走的概率值(基於邊的權重):
1)首先以概率q留在同一個layer內,然後在該層上進行下述概率遊走:

2) 以概率q來跨層,且向上、向下的概率也不同:

struc2vec使用skipgram的過程有什麼不同嗎?
有了節點序列後,以往的方法就是直接使用word2vec中的skipgram方法了!那本文的struc2vec有什麼不同嗎?
答案是:並沒有!所以,如果你之前看懂了deepwalk,那麼這個問題就已經轉變成已有的知識了。看吧,這就是知識的積累性,知道的越多,面臨新問題時需要的增量知識其實是遞減的。

 小結


struc2vec致力於刻畫節點在網絡結構上的相似性,採用了與deepwalk一致的思想。但爲了生成節點的隨機序列,本方法先構造了一個分層的圖,通過定義節點之間的相似度來刻畫邊的權重,然後基於權重進行隨機遊走。最後也使用了skipgram進行節點向量化表示。

參考資料


1. 提出struc2vec的論文《struc2vec: Learning Node Representations from Structural Identity》

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