天天看點

《第9章-基于GNN的圖表示學習》學習筆記

第9章-基于GNN的圖表示學習

圖表示學習是圖學習領域中十分熱門的研究課題,而GNN的出現又給圖表示學習帶來了新的模組化方法。

9.0 端到端學習是一種強大的表示學習

與傳統的特征工程不同,端到端(end-to-end)學習将原始資料作為輸入,直接将任務學習的結果作為輸出。

網絡的前部主要進行表示學習,自動提取特征;網絡後部主要進行任務學習。端到端學習可以看作是表示學習和任務學習的組合,但兩部分并不是割裂的,它們是聯合優化的。

低層的網絡主要提取低層特征,高層的網絡主要提取抽象的、與任務有關的特征。低層次的特征更加通用,可以基于這個特性進行遷移學習,針對某些特定的任務對某些模型進行微調,已達到針對特定任務的良好效果。

9.1 圖表示學習

圖表示學習(graph embedding)又可以稱為網絡表示學習(network embedding),或者稱為網絡嵌入,主要目标是将圖資料轉化成低維稠密的向量化表示,同時確定圖資料中的某些性質在向量空間中也能夠得到對應。

圖資料的表示可以是節點層面的、邊層面的和全圖層面的,其中節點表示學習一直是圖表示學習的主要對象。如果能夠将圖資料表示成包含豐富結構和屬性資訊的向量,那麼後續的任務學習就能夠得到更好的效果。

由于圖資料自身非線性結構的特點,再加上圖資料本身包含着豐富的結構資訊,圖表示學習就顯得十分重要,主要展現在兩個方面:

(1)友善計算機處理

(2)為之後的任務學習奠定基礎

《第9章-基于GNN的圖表示學習》學習筆記

圖表示學習從方法上來說可以分為3類:

(1)基于分解的方法

(2)基于随機遊走的方法

(3)基于深度學習的方法

類别 主要思想 代表模型 優點 缺點
基于分解的方法 對結構資訊進行矩陣分解 - - 具有很高的計算複雜度
基于随機遊走的方法 将随機遊走所産生的序列看作是句子,節點看作是詞,類比詞向量Skip-gram等模型的學習方法 DeepWalk、Node2Vec等 将圖轉化為序列,實作了大規模圖的學習 ①圖本身的結構資訊沒有充分利用 ②很難融合屬性資訊進行表示學習
基于深度學習的方法 主要是使用基于GNN的方法進行表示學習 GraphSAGE、GAE、DGI等 ①融合結構和屬性資訊進行表示學習 ②可以将表示學習和任務學習有機結合 ③能夠适應大規模圖 在模型深度、過平滑問題等方面仍面臨挑戰

9.2 基于GNN的圖表示學習

依據損失函數(Loss Function)的不同,基于GNN的無監督圖表示學習方法可分為2類:

(1)基于重構損失的GNN

(2)基于對比損失的GNN

9.2.1 基于重構損失的GNN

主要思想類似于自編碼器(AE),将節點之間的鄰接關系進行重構學習,并将重構的矩陣與原矩陣進行相似度對比,來更新參數。是以,這類方法也叫作圖自編碼器(GAE)。

Z = G N N ( A , X ) A ^ = σ ( Z Z T ) Z=GNN(A,X) \\[2ex] \hat A=\sigma(ZZ^T) Z=GNN(A,X)A^=σ(ZZT)

其中 Z Z Z是所有節點的表示矩陣, A ^ \hat A A^是重構後的鄰接矩陣,重構損失定義如下,

L o s s r e c o n = ∣ ∣ A ^ − A ∣ ∣ 2 Loss_{recon}=||\hat A-A||^2 Lossrecon​=∣∣A^−A∣∣2

為了防止過平滑的問題,需要加入一些噪聲,迫使模型學習到有用的資訊:

(1)将 X X X增加随機噪聲或置零

(2)将 A A A删除适當比例的邊或修改邊的權重

接下來,是比較重要的變分圖自編碼器(VGAE)。說實話,我暫時還看不懂,nb就完事了,什麼時候看懂了再寫吧。。。

9.2.2 基于對比損失的GNN

對比損失通常會設定一個評分函數 D ( ⋅ ) D(\cdot) D(⋅),用來提高正樣本的得分、降低負樣本的得分。

類比詞向量的學習,在圖中,節點看作是詞,如何定義節點的“上下文”就成為一個值得研究的問題。目前為止共有3中定義方式:

(1)鄰居作為上下文

(2)子圖作為上下文

(3)全圖作為上下文

不論是何種定義方式,我們都可以定義一個通用的損失函數,

L o s s v i = − l o g ( D ( z i c ) ) + l o g ( D ( z i c ‾ ) ) Loss_{v_i}=-log(D(z_ic))+log(D(z_i\overline c)) Lossvi​​=−log(D(zi​c))+log(D(zi​c))

其中 c c c為上下文的表示向量, c ‾ \overline c c為非上下文的表示向量。

1、鄰居作為上下文

通過損失函數模組化節點和鄰居節點之間的關系,GraphSAGE中就使用了這種思路。主要思想類似于DeepWalk,将随機遊走時與中心節點 v i v_i vi​一起出現在固定視窗内的節點 v j v_j vj​視為鄰居。

Z = G N N ( A , X ) L o s s v i = l o g ( 1 − σ ( z i T z j ) ) + E v n ∼ p n ( v j ) l o g ( σ ( z i T z v n ) ) Z=GNN(A,X) \\[2ex] Loss_{v_i}=log(1-\sigma(z_i^Tz_j))+E_{v_n\sim p_n(v_j)}log(\sigma(z_i^Tz_{v_n})) Z=GNN(A,X)Lossvi​​=log(1−σ(ziT​zj​))+Evn​∼pn​(vj​)​log(σ(ziT​zvn​​))

其中 p n ( v j ) p_n(v_j) pn​(vj​)是節點出現機率的負樣本分布。由于此方法不需要重構出 A ^ \hat A A^之後再最小化損失,是以省去了 O ( n 2 ) O(n^2) O(n2)的空間複雜度。

2、子圖作為上下文

鄰居作為上下文強調的是節點之間的共現關系,但是有時候距離遠的節點的結構未必沒有相似之處,如此一來就缺乏對節點結構相似性的捕捉。

《第9章-基于GNN的圖表示學習》學習筆記

Z = G N N ( A , X ) , Z c o n t e x t = G N N c o n t e x t ( A , X ) c i = R e a d o u t ( { Z c o n t e x t [ j ] , ∀ v j 是 v i 的 上 下 文 錨 點 } ) L o s s v i = l o g ( 1 − σ ( z i T c i ) ) + l o g ( σ ( z i T c j ∣ j ≠ i ) ) Z=GNN(A,X),Z_{context}=GNN_{context}(A,X) \\[2ex] c_i=Readout(\{Z_{context}[j],\forall v_j是v_i的上下文錨點\}) \\[2ex] Loss_{v_i}=log(1-\sigma(z_i^Tc_i))+log(\sigma(z_i^Tc_{j|j\ne i})) Z=GNN(A,X),Zcontext​=GNNcontext​(A,X)ci​=Readout({Zcontext​[j],∀vj​是vi​的上下文錨點})Lossvi​​=log(1−σ(ziT​ci​))+log(σ(ziT​cj∣j​=i​))

其中一共用到2個GNN。一個用來在 K K K階子圖上提取其特征向量 Z Z Z,另一個提取每個節點作為上下文錨點時的表示向量 Z c o n t e x t Z_{context} Zcontext​,使用讀出機制來聚合上下文錨點的表示向量 c i c_i ci​。

3、全圖作為上下文

DGI模型實作了節點與全圖之間的對比損失的學習機制。

《第9章-基于GNN的圖表示學習》學習筆記

Z = G N N ( A , X ) , Z ‾ = G N N ( A c u r r u p t , X c u r r u p t ) s = R e a d o u t ( { z i , ∀ v i ∈ V } ) L o s s v i = l o g ( 1 − D ( z i , s ) ) + l o g ( D ( z ‾ i , s ) ) Z=GNN(A,X),\overline Z=GNN(A_{currupt},X_{currupt}) \\[2ex] s=Readout(\{z_i,\forall v_i\in V\}) \\[2ex] Loss_{v_i}=log(1-D(z_i,s))+log(D(\overline z_i,s)) Z=GNN(A,X),Z=GNN(Acurrupt​,Xcurrupt​)s=Readout({zi​,∀vi​∈V})Lossvi​​=log(1−D(zi​,s))+log(D(zi​,s))

其中 ( A c u r r u p t , X c u r r u p t ) (A_{currupt},X_{currupt}) (Acurrupt​,Xcurrupt​)為加噪聲構造的負采樣樣本。将正負樣本送入同一個GNN中進行學習。使用讀出機制得到全圖的向量表示 s s s。

總結

一刷結束,看看論文再準備二刷。

繼續閱讀