Arxiv 1607.00653node
咱們將網絡中的特徵學習表示爲最大似然優化問題。 設G = (V, E)
爲給定網絡。 咱們的分析是通用的,適用於任何有向(無向)的帶權(無權)網絡。 設f: V -> R^d
是從節點到特徵表示的映射函數,咱們的目標是爲下游預測任務學習它。 這裏d
是指定咱們的特徵表示的維數的參數。 等價地,f
是大小|V|×d
的參數矩陣 。 對於每一個源節點u ∈ V
,咱們將N[S](u) ⊂ V
定義爲,經過鄰域採樣策略S
生成的節點u
的網絡鄰域。算法
爲了使優化問題易於處理,咱們作出兩個標準假設:網絡
條件獨立性。 咱們經過假設給定源的特徵表示,觀察鄰域節點的似然與觀察任何其餘鄰域節點無關,來對分解似然:架構
特徵空間中的對稱性。源節點和鄰域節點在特徵空間中具備彼此對稱的效果。 所以,咱們將每一個源 - 鄰域節點對的條件似然建模爲 softmax 單元,該 softmax 單元由其特徵的點積參數化:框架
根據上述假設,公式(1)中的目標簡化爲:異步
對於大型網絡,每節點分區函數Z[u] = ∑ exp(f(u)·f(v)), v ∈ V
的計算成本很高,咱們使用負採樣來近似它 [22]。 咱們在定義特徵f
的模型參數上,使用隨機梯度上升優化公式(2)。函數
基於 Skip-gram 架構的特徵學習方法最初是在天然語言的背景下開發的 [21]。 考慮到文本的線性特性,可使用連續單詞上的滑動窗口天然地定義鄰域的概念。 然而,網絡不是線性的,所以須要更豐富的鄰域概念。 爲了解決這個問題,咱們提出了一個隨機程序,它對給定源節點u
的許多不一樣鄰域進行採樣。 鄰域N[S](u)
不只限於直接鄰居,而是根據採樣策略S
能夠具備很是不一樣的結構。學習
咱們將源節點的鄰域抽樣視爲局部搜索的形式。 圖 1 顯示了一個圖表,其中給定源節點u
,咱們的目標是生成(採樣)其鄰域N[S](u)
。 重要的是,爲了可以公平地比較不一樣的採樣策略S
,咱們將鄰域集N[S]
的大小約束到k
個節點,而後爲單個節點u
採樣多個集合。 一般,有兩種極端採樣策略用於生成k
個節點的鄰域集N[S]
:測試
廣度優先採樣(BFS):鄰域N[S]
僅限於做爲源的直接鄰居的節點。 例如,在圖 1 中,對於大小爲k = 3
的鄰域,BFS 採樣節點s[1]
,s[2]
,s[3]
。優化
深度優先採樣(DFS):鄰域包括在距離源節點不斷增長的距離處順序採樣的節點。 在圖 1 中,DFS 採樣s[4]
,s[5]
,s[6]
。
廣度優先和深度優先抽樣表明了他們探索的搜索空間的極端狀況,從而對學習的表示產生了有趣的影響。
特別是,網絡中節點上的預測任務常常在兩種類似行之間穿梭:同質性和結構等價性 [12]。 在同質性假設 [7,36] 下,高度互連且屬於相似網絡集羣或社區的節點應緊密地嵌入在一塊兒(例如,圖 1 中的節點s[1]
和u
屬於同一網絡社區)。 相反,在結構等價假設下 [10],在網絡中具備類似結構角色的節點應緊密地嵌入在一塊兒(例如,圖 1 中的節點u
和s[6]
充當其相應社區的集線器)。 重要的是,與同質性不一樣,結構等價性並不強調連通性;節點在網絡中可能相距很遠,但仍然具備相同的結構角色。 在現實世界中,這些等價概念並非互斥的;網絡一般表現出一些行爲,其中一些節點表現出同質性而其餘節點反映結構等價性。
咱們觀察到,在產生反映上述任一等價性的表示中,BFS 和 DFS 策略起着關鍵做用。特別是,BFS 採樣的鄰域產生與結構等價性緊密對應的嵌入。 直觀地,咱們注意到,爲了肯定結構等價性,一般足以準確地表示局部社區。 例如,能夠經過觀察每一個節點的直接鄰域來推斷基於網絡角色(例如網橋和集線器)的結構等價性。 經過將搜索限制到附近的節點,BFS 實現了這種表示並得到了每一個節點鄰域的微觀視圖。 此外,在 BFS 中,採樣鄰域中的節點傾向於重複屢次。 這也很重要,由於它減小了表示 1 跳節點相對於源節點的分佈的方差。 然而,對於任何給定的k
,它只探索圖的很是小的部分。
對於 DFS 來講則相反,DFS 能夠探索網絡的更大部分,由於它能夠更加遠離源節點u
(樣本大小k
是固定的)。 在 DFS 中,採樣節點更準確地反映了鄰域的宏觀視圖,這對於基於同質性推斷社區是必不可少的。 可是,DFS 的問題在於,不只要推斷網絡中存在哪些節點到節點的依賴關係,並且還要肯定這些依賴關係的確切性質。 這是很難的,由於咱們對樣本大小有限制而且須要探索大的鄰域,這產生高方差。 其次,移動到更大的深度致使複雜的依賴性,由於採樣節點可能遠離源而且可能不太具備表明性。
基於上述觀察,咱們設計了一個靈活的鄰域採樣策略,容許咱們在 BFS 和 DFS 之間平滑插值。 咱們經過開發靈活的偏置隨機遊走過程來實現這一目標,該過程能夠以 BFS 以及 DFS 方式探索鄰域。
形式上,給定源節點u
,咱們模擬固定長度l
的隨機遊走。 令c[i]
表示遊走中的第i
個節點,從c[0] = u
開始。 節點c[i]
由如下分佈生成:
其中π[vx]
是節點v
和x
之間的非歸一化轉移機率,Z
是歸一化常數。
α
偏置咱們的隨機遊走的最簡單方法是基於靜態邊權重w[vx]
(即π[vx] = w[vx]
)對下一節點進行採樣。(若是是未加權的圖w[vx] = 1
。)可是,這不容許咱們考慮網絡結構,並指導咱們的搜索過程,來探索不一樣類型的網絡鄰域。 此外,與 BFS 和 DFS 不一樣,它們是分別適用於結構等價和同質性的極端抽樣範例,咱們的隨機遊走應該適應這些等價概念不是競爭或排他性的事實,而現實世界的網絡一般表現出二者的混合。
node2vec 中隨機遊走過程的示意圖。 遊走剛剛從t
轉換到v
,如今正在評估節點v
的下一步。 邊標籤表示搜索誤差α
。
咱們定義了一個二階隨機遊走,其中有兩個參數p
和q
來指導遊走:考慮一個隨機遊走,它剛剛遍歷邊(t, v)
,如今位於節點v
(圖 2)。 如今,遊走須要決定下一步,因此它評估從v
引出的邊(v, x)
上的轉移機率π[vx]
。 咱們將非標準化轉移機率設置爲π[vx] = α[pq](t, x)·w[vx]
,其中:
而且d[tx]
表示節點t
和x
之間的最短路徑距離。 請注意,d[tx]
必須是{0,1,2}
中的一個,所以,這兩個參數對於引導遊走是必要且足夠的。
直觀地,參數p
和q
控制遊走探索和離開起始節點u
的鄰域的速度。 特別是,這些參數容許咱們的搜索過程(大體)在 BFS 和 DFS 之間進行插值,從而對節點等價的不一樣概念反映出折中。
返回參數,p:參數p
控制當即從新訪問遊走中節點的可能性。 將其設置爲高值(> max(q, 1)
)可確保咱們不太可能在下面兩步中採樣已訪問過的節點(除非遊走中的下一個節點沒有其餘鄰居)。 該策略鼓勵適度探索並避免採樣中的兩跳冗餘。 另外一方面,若是p
較低(<min(q, 1)
),它將使遊走回溯一步(圖 2),這將使遊走「局部」靠近起始節點u
。
出入參數q
。 參數q
容許搜索區分「向內」和「向外」節點。 回到圖 2,若是q> 1
,則隨機遊走偏向於接近節點t
的節點。 咱們的樣本由較小局部性的節點構成,從這個意義上,這樣的遍歷得到相對於遊走中起始節點的底層圖的局部視圖和近似的 BFS 行爲。
隨機遊走的好處。相對於純 BFS / DFS 方法,隨機遊走有幾個好處。隨機遊走在空間和時間要求方面都是計算上有效的。存儲圖中每一個節點的直接鄰居的空間複雜度是O(|E|)
。對於二階隨機遊走,存儲每一個節點的鄰居之間的互連是有幫助的,這致使空間複雜度爲O(a^2 |V|)
,其中a
是圖的平均度,而且一般對於實際小世界網絡。隨機遊走優於傳統的基於搜索的採樣策略的另外一個關鍵優點是時間複雜度。特別是,經過在樣本生成過程當中強制利用圖的連通性,隨機遊走提供了一種方便的機制,經過在不一樣的源節點之間重用樣原本提升有效採樣率。經過模擬長度爲l> k
的隨機遊走,因爲隨機遊走的馬爾可夫性質,咱們能夠一次爲l-k
個節點生成k
個樣本。所以,咱們的有效複雜度是每一個樣本的O(l k(l-k))
。例如,在圖 1 中,咱們採樣長度爲l = 6
的隨機遊走{u, s[4], s[5], s[6], s[8], s[9]}
,這產生N[S](u) = {s[4], s[5], s[6]}
,N[S](s[4]) = {s[5],s[6],s[8]}
和N[S](s[5]) = {s[6], s[8], s[ 9]}
。請注意,樣本重用可能會在整個過程當中引入一些誤差。可是,咱們觀察到它大大提升了效率。
LearnFeatures(Graph G = (V, E, W), Dimensions d, Walks per node r, Walk length l, Context size k, Return p, In-out q) π = PreprocessModifiedWeights(G, p, q) G' = (V, E, π) Initialize walks to Empty for iter = 1 to r do for all nodes u ∈ V do walk = node2vecWalk(G', u, l) Append walk to walks f = StochasticGradientDescent(k, d, walks) return f node2vecWalk(Graph G' = (V, E, π), Start node u, Length l) Inititalize walk to [u] for walk_iter = 1 to l do curr = walk[−1] Vcurr = GetNeighbors(curr, G') s = AliasSample(Vcurr, π) Append s to walk return walk
算法 1:node2vec 算法
node2vec 的僞代碼在算法1中給出。在任何隨機遊走中,因爲選擇起始節點u
而存在隱式誤差。 因爲咱們學習了全部節點的表示,咱們經過模擬從每一個節點開始的固定長度l
的隨機遊走來抵消這種誤差。 在遊走的每一個步驟,基於轉移機率π[vx]
進行採樣。 能夠預先計算二階馬爾可夫鏈的轉移機率π[vx]
,所以,模擬隨機遊走時的節點採樣,可使用別名採樣在O(1)
時間內有效地完成。 node2vec 的三個階段,即用於計算轉移機率的預處理,隨機遊走模擬和使用 SGD 的優化,被順序執行。 每一個階段都是可並行化的,而且是異步執行的,這有助於 node2vec 的總體可擴展性。
node2vec 位於:http://snap.stanford.edu/node2vec。
node2vec 算法提供半監督方法來學習網絡中節點的豐富特徵表示。 可是,咱們常常對涉及節點對而不是單個節點的預測任務感興趣。 例如,在鏈路預測中,咱們預測網絡中的兩個節點之間是否存在鏈路。 因爲咱們的隨機遊走本質上基於底層網絡中節點之間的鏈接結構,所以咱們使用自舉方法,將各個節點的特徵表示擴展爲節點對。
給定兩個節點u
和v
,咱們在相應的特徵向量f(u)
和f(v)
上定義二元運算符,以便生成表示g(u, v)
,使得g: V×V -> R^d'
,其中d'
是該對(u, v)
的表示大小。 咱們但願一般爲任何節點對定義運算符,即便對之間不存在邊,由於這樣作使表示對連接預測有用,其中咱們的測試集包含真邊和假邊(即,不存在的)。 咱們考慮運算符的幾種選擇,使得d'= d
,如表 1 所示。
表 1:用於學習邊特徵的二元運算符的選項。 定義對應於g(u, v)
的第i
個份量。