第9章-基于GNN的圖表示學習
圖表示學習是圖學習領域中十分熱門的研究課題,而GNN的出現又給圖表示學習帶來了新的模組化方法。
9.0 端到端學習是一種強大的表示學習
與傳統的特征工程不同,端到端(end-to-end)學習将原始資料作為輸入,直接将任務學習的結果作為輸出。
網絡的前部主要進行表示學習,自動提取特征;網絡後部主要進行任務學習。端到端學習可以看作是表示學習和任務學習的組合,但兩部分并不是割裂的,它們是聯合優化的。
低層的網絡主要提取低層特征,高層的網絡主要提取抽象的、與任務有關的特征。低層次的特征更加通用,可以基于這個特性進行遷移學習,針對某些特定的任務對某些模型進行微調,已達到針對特定任務的良好效果。
9.1 圖表示學習
圖表示學習(graph embedding)又可以稱為網絡表示學習(network embedding),或者稱為網絡嵌入,主要目标是将圖資料轉化成低維稠密的向量化表示,同時確定圖資料中的某些性質在向量空間中也能夠得到對應。
圖資料的表示可以是節點層面的、邊層面的和全圖層面的,其中節點表示學習一直是圖表示學習的主要對象。如果能夠将圖資料表示成包含豐富結構和屬性資訊的向量,那麼後續的任務學習就能夠得到更好的效果。
由于圖資料自身非線性結構的特點,再加上圖資料本身包含着豐富的結構資訊,圖表示學習就顯得十分重要,主要展現在兩個方面:
(1)友善計算機處理
(2)為之後的任務學習奠定基礎

圖表示學習從方法上來說可以分為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(zic))+log(D(zic))
其中 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−σ(ziTzj))+Evn∼pn(vj)log(σ(ziTzvn))
其中 p n ( v j ) p_n(v_j) pn(vj)是節點出現機率的負樣本分布。由于此方法不需要重構出 A ^ \hat A A^之後再最小化損失,是以省去了 O ( n 2 ) O(n^2) O(n2)的空間複雜度。
2、子圖作為上下文
鄰居作為上下文強調的是節點之間的共現關系,但是有時候距離遠的節點的結構未必沒有相似之處,如此一來就缺乏對節點結構相似性的捕捉。
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−σ(ziTci))+log(σ(ziTcj∣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模型實作了節點與全圖之間的對比損失的學習機制。
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。
總結
一刷結束,看看論文再準備二刷。