本文作爲第2部分,主要根據原始論文介紹幾篇基礎的工作,主要包括GNN,GCN及變體,DCNN,Tree-LSTM,包括模型的詳解和模型訓練,以及模型評價。
1. The Graph Neural Network Model
這篇論文是第一個提出Graph Neural Network模型的論文,它將神經網絡使用在圖結構數據上,並細述了神經網絡模型了結構組成、計算方法、優化算法、流程實現等等。論文後面還對模型的複雜度進行了評估,以及在現實任務上進行了實驗和比較(比較算法爲NL、L、FNN)。該報告暫時主要關注模型設計部分和實驗結果部分,忽略複雜性評估部分 。
圖領域應用
對於圖領域問題,假設函數τ \tau τ 是將一個圖G G G 和圖中的一個節點n n n 轉化爲一個實值向量的函數
τ ( G , n ) ∈ R m
\tau(G,n)\in{R^m}
τ ( G , n ) ∈ R m 那麼監督學習的任務就在於從已知樣本中學習得到這樣的函數。
圖領域的應用主要可以分爲兩種類型:專注於圖的應用(graph-focused)和專注於節點的應用(node-focused) 。對於graph-focused的應用,函數τ \tau τ 和具體的節點無關,(即τ ( G ) \tau(G) τ ( G ) ),訓練時,在一個圖的數據集中進行分類或迴歸。對於node-focused的應用,τ \tau τ 函數依賴於具體的節點n n n ,即τ ( G , n ) \tau(G,n) τ ( G , n ) ,如下:
圖 (a) 是一個化學分子結構,能夠使用圖 G G G 進行表示,函數τ ( G ) \tau(G) τ ( G ) 可能用於估計這種化學分子對人體有害的概率,因此,我們並不關注分子中具體的原子(相當於節點),所以屬於graph-focused應用。
圖 (b) 是一張城堡的圖片,圖片中的每一種結構都由節點表示,函數τ ( G , n ) \tau(G,n) τ ( G , n ) 可能用於預測每一個節點是否屬於城堡(圖中的黑點)。這種類型屬於node-focused應用。
GNN模型詳述
GNN模型基於信息傳播機制,每一個節點通過相互交換信息來更新自己的節點狀態,直到達到某一個穩定值 ,GNN的輸出就是在每個節點處,根據當前節點狀態分別計算輸出。
有如下定義:
一個圖G G G 表示爲一對( N , E ) (\boldsymbol{N}, \boldsymbol{E}) ( N , E ) ,其中,N \boldsymbol{N} N 表示節點集合,E \boldsymbol{E} E 表示邊集。
n e [ n ] ne[n] n e [ n ] 表示節點n n n 的鄰居節點集合
c o [ n ] co[n] c o [ n ] 表示以n n n 節點爲頂點的所有邊集合
l n ∈ R l N \boldsymbol{l}_{n} \in \mathbb{R}^{l_{N}} l n ∈ R l N 表示節點n n n 的特徵向量
l ( n 1 , n 2 ) ∈ R l E \boldsymbol{l}_{\left(n_{1}, n_{2}\right)} \in \mathbb{R}^{l_{E}} l ( n 1 , n 2 ) ∈ R l E 表示邊( n 1 , n 2 ) (n_1,n_2) ( n 1 , n 2 ) 的特徵向量
l \boldsymbol{l} l 表示所有特徵向量疊在一起的向量
注 :原論文裏面l \boldsymbol{l} l 表示label,但論文中的label指的是features of objects related to nodes and features of the relationships between the objects
,也就是相關特徵,所以這裏一律使用特徵向量翻譯。
論文將圖分爲positional graph和nonpositional graph,對於positional graph,對於每一個節點n n n ,都會給該節點的鄰居節點u u u 賦予一個position值ν n ( u ) \nu_{n}(u) ν n ( u ) ,該函數稱爲injective function,ν n : n e [ n ] → { 1 , … ∣ N ∣ } \nu_{n} : \mathrm{ne}[n] \rightarrow\{1, \ldots|\mathbf{N}|\} ν n : n e [ n ] → { 1 , … ∣ N ∣ } 。
假設存在一個圖-節點對的集合D = G × N \mathcal{D}=\mathcal{G} \times \mathcal{N} D = G × N ,G \mathcal{G} G 表示圖的集合,N \mathcal{N} N 表示節點集合,圖領域問題可以表示成一個有如下數據集的監督學習框架
L = { ( G i , n i , j , t i , j ) ∣ G i = ( N i , E i ) ∈ G ; n i , j ∈ N i ; t i , j ∈ R m , 1 ≤ i ≤ p , 1 ≤ j ≤ q i } \mathcal{L}=\left\{\left(\boldsymbol{G}_{i}, n_{i, j}, \boldsymbol{t}_{i, j}\right)| \boldsymbol{G}_{i}=\left(\boldsymbol{N}_{i}, \boldsymbol{E}_{i}\right) \in \mathcal{G}\right.;n_{i, j} \in \boldsymbol{N}_{i} ; \boldsymbol{t}_{i, j} \in \mathbb{R}^{m}, 1 \leq i \leq p, 1 \leq j \leq q_{i} \}
L = { ( G i , n i , j , t i , j ) ∣ G i = ( N i , E i ) ∈ G ; n i , j ∈ N i ; t i , j ∈ R m , 1 ≤ i ≤ p , 1 ≤ j ≤ q i } 其中,n i , j ∈ N i n_{i, j} \in \boldsymbol{N}_{i} n i , j ∈ N i 表示集合N i ∈ N \boldsymbol{N}_{i} \in \mathcal{N} N i ∈ N 中的第j j j 個節點,t i , j \boldsymbol{t}_{i, j} t i , j 表示節點n i j n_{ij} n i j 的期望目標(即標籤)。
節點n n n 的狀態用x n ∈ R s \boldsymbol{x}_{n} \in \mathbb{R}^{s} x n ∈ R s 表示,該節點的輸出用o n \boldsymbol{o}_{\boldsymbol{n}} o n 表示,f w f_{\boldsymbol{w}} f w 爲local transition function ,g w g_{\boldsymbol{w}} g w 爲local output function ,那麼x n \boldsymbol{x}_{n} x n 和o n \boldsymbol{o}_{\boldsymbol{n}} o n 的更新方式如下
x n = f w ( l n , l c o [ n ] , x n e [ n ] , l n e [ n ] ) o n = g w ( x n , l n )
\begin{array}{l}{\boldsymbol{x}_{n}=f_{\boldsymbol{w}}\left(\boldsymbol{l}_{n}, \boldsymbol{l}_{\mathrm{co}[n]}, \boldsymbol{x}_{\mathrm{ne}[n]}, \boldsymbol{l}_{\mathrm{ne}\left[n\right]}\right)} \\ {\boldsymbol{o}_{n}=g_{\boldsymbol{w}}\left(\boldsymbol{x}_{n}, \boldsymbol{l}_{n}\right)}\end{array}
x n = f w ( l n , l c o [ n ] , x n e [ n ] , l n e [ n ] ) o n = g w ( x n , l n ) 其中,l n , l co [ n ] , x n e [ n ] , l n e [ n ] \boldsymbol{l}_{n}, \boldsymbol{l}_{\operatorname{co}[n]}, \boldsymbol{x}_{\mathrm{ne}[n]}, \boldsymbol{l}_{\mathrm{ne}[n]} l n , l c o [ n ] , x n e [ n ] , l n e [ n ] 分別表示節點n n n 的特徵向量、與節點n n n 相連的邊的特徵向量、節點n n n 鄰居節點的狀態向量、節點n n n 鄰居節點的特徵向量。
假設x , o , l , l N \boldsymbol{x}, \boldsymbol{o}, \boldsymbol{l}, \boldsymbol{l}_{N} x , o , l , l N 分別爲所有的狀態、所有的輸出、所有的特徵向量、所有節點的特徵向量的疊加起來的向量,那麼上面函數可以寫成如下形式
x = F w ( x , l ) o = G w ( x , l N )
\begin{array}{l}{\boldsymbol{x}=F_{\boldsymbol{w}}(\boldsymbol{x}, \boldsymbol{l})} \\ {\boldsymbol{o}=\boldsymbol{G}_{\boldsymbol{w}}\left(\boldsymbol{x}, \boldsymbol{l}_{\boldsymbol{N}}\right)}\end{array}
x = F w ( x , l ) o = G w ( x , l N ) 其中,F w F_{\boldsymbol{w}} F w 爲global transition function ,G w G_{\boldsymbol{w}} G w 爲global output function ,分別是f w f_{\boldsymbol{w}} f w 和g w g_{\boldsymbol{w}} g w 的疊加形式。
根據Banach的不動點理論,假設F w F_{\boldsymbol{w}} F w 是一個壓縮映射函數,那麼式子有唯一不動點解,而且可以通過迭代方式逼近該不動點
x ( t + 1 ) = F w ( x ( t ) , l )
\boldsymbol{x}(t+1)=F_{\boldsymbol{w}}(\boldsymbol{x}(t), \boldsymbol{l})
x ( t + 1 ) = F w ( x ( t ) , l ) 其中,x ( t ) \boldsymbol{x}(t) x ( t ) 表示x \boldsymbol{x} x 在第t t t 個迭代時刻的值,對於任意初值,迭代的誤差是以指數速度減小的,使用迭代的形式寫出狀態和輸出的更新表達式爲
x n ( t + 1 ) = f w ( l n , l c o [ n ] , x n e [ n ] ( t ) , l n e [ n ] ) o n ( t ) = g w ( x n ( t ) , l n ) , n ∈ N
\begin{aligned} \boldsymbol{x}_{n}(t+1) &=f_{\boldsymbol{w}}\left(\boldsymbol{l}_{n}, \boldsymbol{l}_{\mathrm{co}[n]}, \boldsymbol{x}_{\mathrm{ne}[n]}(t), \boldsymbol{l}_{\mathrm{ne}[n]}\right) \\ \boldsymbol{o}_{n}(t) &=g_{\boldsymbol{w}}\left(\boldsymbol{x}_{n}(t), \boldsymbol{l}_{n}\right), \quad n \in \boldsymbol{N} \end{aligned}
x n ( t + 1 ) o n ( t ) = f w ( l n , l c o [ n ] , x n e [ n ] ( t ) , l n e [ n ] ) = g w ( x n ( t ) , l n ) , n ∈ N GNN的信息傳播流圖以及等效的網絡結構如下圖所示
根據上圖所示,頂端的圖是原始的Graph,中間的圖表示狀態向量和輸出向量的計算流圖,最下面的圖表示將更新流程迭代T T T 次,並展開之後得到等效網絡圖。
網絡的學習算法設計
GNN的學習就是估計參數w \boldsymbol{w} w ,使得函數φ w \varphi_{\boldsymbol{w}} φ w 能夠近似估計訓練集
L = { ( G i , n i , j , t i , j ) ∣ G i = ( N i , E i ) ∈ G ; n i , j ∈ N i ; t i , j ∈ R m , 1 ≤ i ≤ p , 1 ≤ j ≤ q i }
\mathcal{L}=\left\{\left(\boldsymbol{G}_{i}, n_{i, j}, \boldsymbol{t}_{i, j}\right)| \boldsymbol{G}_{i}=\left(\boldsymbol{N}_{i}, \boldsymbol{E}_{i}\right) \in \mathcal{G}\right.;n_{i, j} \in \boldsymbol{N}_{i} ; \boldsymbol{t}_{i, j} \in \mathbb{R}^{m}, 1 \leq i \leq p, 1 \leq j \leq q_{i} \}
L = { ( G i , n i , j , t i , j ) ∣ G i = ( N i , E i ) ∈ G ; n i , j ∈ N i ; t i , j ∈ R m , 1 ≤ i ≤ p , 1 ≤ j ≤ q i } 其中,q i q_i q i 表示在圖G i G_{i} G i 中監督學習的節點個數,對於graph-focused的任務,需要增加一個特殊的節點,該節點用來作爲目標節點,這樣,graph-focused任務和node-focused任務都能統一到節點預測任務上,學習目標可以是最小化如下二次損失函數
e w = ∑ i = 1 p ∑ j = 1 q i ( t i , j − φ w ( G i , n i , j ) ) 2
e_{\boldsymbol{w}}=\sum_{i=1}^{p} \sum_{j=1}^{q_{i}}\left(\boldsymbol{t}_{i, j}-\varphi_{\boldsymbol{w}}\left(\boldsymbol{G}_{i}, n_{i, j}\right)\right)^{2}
e w = i = 1 ∑ p j = 1 ∑ q i ( t i , j − φ w ( G i , n i , j ) ) 2 優化算法基於隨機梯度下降的策略,優化步驟按照如下幾步進行
按照迭代方程迭代T T T 次得到x n ( t ) x_{n}(t) x n ( t ) ,此時接近不動點解:x ( T ) ≈ x \boldsymbol{x}(T) \approx \boldsymbol{x} x ( T ) ≈ x
計算參數權重的梯度∂ e w ( T ) / ∂ w \partial e_{\boldsymbol{w}}(T) / \partial \boldsymbol{w} ∂ e w ( T ) / ∂ w
使用該梯度來更新權重w \boldsymbol{w} w
這裏假設函數F w F_{\boldsymbol{w}} F w 是壓縮映射函數,保證最終能夠收斂到不動點。另外,這裏的梯度的計算使用backpropagation-through-time algorithm 。
爲了表明前面的方法是可行的,論文接着證明了兩個結論
理論1(可微性):令F w F_{\boldsymbol{w}} F w 和G w G_{\boldsymbol{w}} G w 分別是global transition function和global output function,如果F w ( x , l ) F_{\boldsymbol{w}}(\boldsymbol{x}, \boldsymbol{l}) F w ( x , l ) 和G w ( x , l N ) G_{\boldsymbol{w}}\left(\boldsymbol{x}, \boldsymbol{l}_{\boldsymbol{N}}\right) G w ( x , l N ) 對於x \boldsymbol{x} x 和w \boldsymbol{w} w 是連續可微的,那麼φ w \varphi_{\boldsymbol{w}} φ w 對w \boldsymbol{w} w 也是連續可微的。
理論2(反向傳播):令F w F_{\boldsymbol{w}} F w 和G w G_{\boldsymbol{w}} G w 分別是global transition function和global output function,如果F w ( x , l ) F_{\boldsymbol{w}}(\boldsymbol{x}, \boldsymbol{l}) F w ( x , l ) 和G w ( x , l N ) G_{\boldsymbol{w}}\left(\boldsymbol{x}, \boldsymbol{l}_{\boldsymbol{N}}\right) G w ( x , l N ) 對於x \boldsymbol{x} x 和w \boldsymbol{w} w 是連續可微的。令z ( t ) \boldsymbol{z}(t) z ( t ) 定義爲
z ( t ) = z ( t + 1 ) ⋅ ∂ F w ∂ x ( x , l ) + ∂ e w ∂ o ⋅ ∂ G w ∂ x ( x , l N )
z(t)=z(t+1) \cdot \frac{\partial F_{w}}{\partial x}(x, l)+\frac{\partial e_{w}}{\partial o} \cdot \frac{\partial G_{w}}{\partial x}\left(x, l_{N}\right)
z ( t ) = z ( t + 1 ) ⋅ ∂ x ∂ F w ( x , l ) + ∂ o ∂ e w ⋅ ∂ x ∂ G w ( x , l N )
那麼,序列z ( T ) , z ( T − 1 ) , … \boldsymbol{z}(T), \boldsymbol{z}(T-1), \ldots z ( T ) , z ( T − 1 ) , … 收斂到一個向量,z = lim t → − ∞ z ( t ) z=\lim _{t \rightarrow-\infty} z(t) z = lim t → − ∞ z ( t ) ,並且收斂速度爲指數級收斂以及與初值z ( T ) \boldsymbol{z}(T) z ( T ) 無關,另外,還存在
∂ e w ∂ w = ∂ e w ∂ o ⋅ ∂ G w ∂ w ( x , l N ) + z ⋅ ∂ F w ∂ w ( x , l )
\frac{\partial e_{w}}{\partial \boldsymbol{w}}=\frac{\partial e_{\boldsymbol{w}}}{\partial \boldsymbol{o}} \cdot \frac{\partial G_{\boldsymbol{w}}}{\partial \boldsymbol{w}}\left(\boldsymbol{x}, \boldsymbol{l}_{N}\right)+\boldsymbol{z} \cdot \frac{\partial F_{\boldsymbol{w}}}{\partial \boldsymbol{w}}(\boldsymbol{x}, \boldsymbol{l})
∂ w ∂ e w = ∂ o ∂ e w ⋅ ∂ w ∂ G w ( x , l N ) + z ⋅ ∂ w ∂ F w ( x , l )
其中,x \boldsymbol{x} x 是GNN的穩定狀態。
算法流程如下
FORWARD 用於迭代計算出收斂點,BACKWARD 用於計算梯度。
Transition和Output函數實現
在GNN中,函數g w g_{\boldsymbol{w}} g w 不需要滿足特定的約束,直接使用多層前饋神經網絡,對於函數f w f_{\boldsymbol{w}} f w ,則需要着重考慮,因爲f w f_{\boldsymbol{w}} f w 需要滿足壓縮映射的條件,而且與不動點計算相關。下面提出兩種神經網絡和不同的策略來滿足這些需求
Linear(nonpositional) GNN :
對於節點n n n 狀態的計算,將f w f_{\boldsymbol{w}} f w 改成如下形式
x n = ∑ u ∈ ne ∣ n ] h w ( l n , l ( n , u ) , x u , l u ) , n ∈ N
\boldsymbol{x}_{n}=\sum_{u \in \text { ne } | n ]} h_{\boldsymbol{w}}\left(\boldsymbol{l}_{n}, \boldsymbol{l}_{(n, u)}, \boldsymbol{x}_{u}, \boldsymbol{l}_{u}\right), \quad n \in \boldsymbol{N}
x n = u ∈ ne ∣ n ] ∑ h w ( l n , l ( n , u ) , x u , l u ) , n ∈ N 相當於是對節點n n n 的每一個鄰居節點使用h w h_{\boldsymbol{w}} h w ,並將得到的值求和來作爲節點n n n 的狀態。
由此,對上式中的函數h w h_{\boldsymbol{w}} h w 按照如下方式實現
h w ( l n , l ( n , a ) , x u , l u ) = A n , u x u + b n
h_{\boldsymbol{w}}\left(\boldsymbol{l}_{n}, \boldsymbol{l}_{(n, \mathfrak{a})}, \boldsymbol{x}_{u}, \boldsymbol{l}_{u}\right) = \boldsymbol{A}_{n, u} \boldsymbol{x}_{u}+\boldsymbol{b}_{n}
h w ( l n , l ( n , a ) , x u , l u ) = A n , u x u + b n 其中,向量b n ∈ R s \boldsymbol{b}_{n} \in \mathbb{R}^{s} b n ∈ R s ,矩陣A n , u ∈ R s × s \boldsymbol{A}_{n, u} \in \mathbb{R}^{s \times s} A n , u ∈ R s × s 定義爲兩個前向神經網絡的輸出。更確切地說,令產生矩陣A n , u \boldsymbol{A}_{n, u} A n , u 的網絡爲transition network ,產生向量b n \boldsymbol{b}_{n} b n 的網絡爲forcing network
transition network表示爲ϕ w \phi_{\boldsymbol{w}} ϕ w
ϕ w : R 2 l N + l E → R s 2
\phi_{\boldsymbol{w}} : \mathbb{R}^{2 l_{N}+l_{E}} \rightarrow \mathbb{R}^{s^{2}}
ϕ w : R 2 l N + l E → R s 2
forcing network表示爲ρ w \rho_{\boldsymbol{w}} ρ w
ρ w : R l N → R s \rho_{\boldsymbol{w}} : \mathbb{R}^{l_{N}} \rightarrow \mathbb{R}^{s}
ρ w : R l N → R s 由此,可以定義A n , u \boldsymbol{A}_{n, u} A n , u 和b n \boldsymbol{b}_{n} b n
A n , u = μ s ∣ ne [ u ] ∣ ⋅ Ξ b w = ρ w ( l n ) \begin{aligned} \boldsymbol{A}_{\boldsymbol{n}, \boldsymbol{u}} &=\frac{\mu}{s|\operatorname{ne}[u]|} \cdot \boldsymbol{\Xi} \\ \boldsymbol{b}_{\boldsymbol{w}} &=\rho_{\boldsymbol{w}}\left(\boldsymbol{l}_{n}\right) \end{aligned}
A n , u b w = s ∣ n e [ u ] ∣ μ ⋅ Ξ = ρ w ( l n ) 其中,μ ∈ ( 0 , 1 ) \mu \in(0,1) μ ∈ ( 0 , 1 ) ,Ξ = resize ( ϕ w ( l n , l ( n , u ) , l u ) ) \Xi=\operatorname{resize}\left(\phi_{\boldsymbol{w}}\left(\boldsymbol{l}_{n}, \boldsymbol{l}_{(n, u)}, \boldsymbol{l}_{u}\right)\right) Ξ = r e s i z e ( ϕ w ( l n , l ( n , u ) , l u ) ) ,resize ( ⋅ ) \text{resize}(\cdot) resize ( ⋅ ) 表示將s 2 s^2 s 2 維的向量整理(reshape)成s × s s\times{s} s × s 的矩陣,也就是說,將transition network的輸出整理成方形矩陣,然後乘以一個係數就得到A n , u \boldsymbol{A}_{n, u} A n , u 。b n \boldsymbol{b}_{n} b n 就是forcing network的輸出。
在這裏,假定∥ ϕ w ( l n , l ( n , u ) , l u ) ∥ 1 ≤ s \left\|\phi_{\boldsymbol{w}}\left(\boldsymbol{l}_{n}, \boldsymbol{l}_{(\boldsymbol{n}, \boldsymbol{u})}, \boldsymbol{l}_{u}\right)\right\|_{1} \leq \boldsymbol{s} ∥ ∥ ϕ w ( l n , l ( n , u ) , l u ) ∥ ∥ 1 ≤ s ,這個可以通過設定transition function的激活函數來滿足,比如設定激活函數爲t a n h ( ) tanh() t a n h ( ) 。在這種情況下,F w ( x , l ) = A x + b F_{\boldsymbol{w}}(\boldsymbol{x}, \boldsymbol{l})=\boldsymbol{A} \boldsymbol{x}+\boldsymbol{b} F w ( x , l ) = A x + b ,A \boldsymbol{A} A 和b \boldsymbol{b} b 分別是A n , u \boldsymbol{A}_{n, u} A n , u 的塊矩陣形式和b n \boldsymbol{b}_{n} b n 的堆疊形式,通過簡單的代數運算可得
∥ ∂ F w ∂ x ∥ 1 = ∥ A ∥ 1 ≤ max u ∈ N ( ∑ n ∈ ne [ u ] ∥ A n , u ∥ 1 ) ≤ max u ∈ N ( μ s ∣ ne [ u ] ∣ ⋅ ∑ n ∈ n e [ u ] ∥ Ξ ∥ 1 ) ≤ μ
\begin{aligned}\left\|\frac{\partial F_{\boldsymbol{w}}}{\partial \boldsymbol{x}}\right\|_{1} &=\|\boldsymbol{A}\|_{1} \leq \max _{u \in \boldsymbol{N}}\left(\sum_{n \in \operatorname{ne}[u]}\left\|\boldsymbol{A}_{n, u}\right\|_{1}\right) \\ & \leq \max _{u \in N}\left(\frac{\mu}{s|\operatorname{ne}[u]|} \cdot \sum_{n \in \mathrm{ne}[u]}\|\mathbf{\Xi}\|_{1}\right) \leq \mu \end{aligned}
∥ ∥ ∥ ∥ ∂ x ∂ F w ∥ ∥ ∥ ∥ 1 = ∥ A ∥ 1 ≤ u ∈ N max ⎝ ⎛ n ∈ n e [ u ] ∑ ∥ A n , u ∥ 1 ⎠ ⎞ ≤ u ∈ N max ⎝ ⎛ s ∣ n e [ u ] ∣ μ ⋅ n ∈ n e [ u ] ∑ ∥ Ξ ∥ 1 ⎠ ⎞ ≤ μ
該式表示F w F_{\boldsymbol{w}} F w 對於任意的參數w \boldsymbol{w} w 是一個壓縮映射。
矩陣M M M 的1-norm定義爲
∥ M ∥ 1 = max j ∑ i ∣ m i , j ∣ \|M\|_{1}=\max _{j} \sum_{i}\left|m_{i, j}\right| ∥ M ∥ 1 = j max i ∑ ∣ m i , j ∣
Nonelinear(nonpositional) GNN :在這個結構中,h w h_{\boldsymbol{w}} h w 通過多層前饋網絡實現,但是,並不是所有的參數w \boldsymbol{w} w 都會被使用,因爲同樣需要保證F w F_{\boldsymbol{w}} F w 是一個壓縮映射函數,這個可以通過懲罰項來實現
e w = ∑ i = 1 p ∑ j = 1 q i ( t i , j − φ w ( G i , n i , j ) ) 2 + β L ( ∥ ∂ F w ∂ x ∥ )
e_{\boldsymbol{w}}=\sum_{i=1}^{p} \sum_{j=1}^{q_{i}}\left(\boldsymbol{t}_{i, j}-\varphi_{\boldsymbol{w}}\left(\boldsymbol{G}_{i}, n_{i, j}\right)\right)^{2}+\beta L\left(\left\|\frac{\partial F_{\boldsymbol{w}}}{\partial \boldsymbol{x}}\right\|\right)
e w = i = 1 ∑ p j = 1 ∑ q i ( t i , j − φ w ( G i , n i , j ) ) 2 + β L ( ∥ ∥ ∥ ∥ ∂ x ∂ F w ∥ ∥ ∥ ∥ ) 其中,懲罰項L ( y ) L(y) L ( y ) 在y > μ y>\mu y > μ 時爲( y − μ ) 2 (y-\mu)^2 ( y − μ ) 2 ,在y ≤ μ y\le{\mu} y ≤ μ 時爲0,參數μ ∈ ( 0 , 1 ) \mu\in(0,1) μ ∈ ( 0 , 1 ) 定義爲希望的F w F_{\boldsymbol{w}} F w 的壓縮係數。
實驗結果
論文將GNN模型在三個任務上進行了實驗:子圖匹配(subgraph matching)任務,誘變(mutagenesis)任務和網頁排序(web page ranking)任務。在這些任務上使用linear和nonlinear的模型測試,其中nonlinear模型中的激活函數使用sigmoid函數。
子圖匹配任務爲在一個大圖G G G 上找到給定的子圖S S S (標記出屬於子圖的節點),也就是說,函數τ \tau τ 必須學習到,如果n i , j n_{i,j} n i , j 屬於子圖G G G ,那麼τ ( G i , n i , j ) = 1 \tau(G_i,n_{i,j})=1 τ ( G i , n i , j ) = 1 ,否則,τ ( G i , n i , j ) = − 1 \tau(G_i,n_{i,j})=-1 τ ( G i , n i , j ) = − 1 。實驗結果中,nonlinear模型的效果要好於linear模型的效果,兩個模型都要比FNN模型效果更好。
誘變問題任務是對化學分子進行分類,識別出誘變化合物,採用二分類方法。實驗結果是nonlinear效果較好,但不是最好。
網頁排序任務是學會網頁排序。實驗表明雖然訓練集只包含50個網頁,但是仍然沒有產生過擬合的現象。
模型實現
在模擬的節點分類任務上實現該論文的GNN模型。
任務要求 爲輸入一個graph,該graph的所有節點都有標籤,然後對部分節點進行訓練,在驗證階段使用另外一部分節點進行驗證。輸入的數據圖如下圖:
其中,該graph總共有18個節點,分別是{ n 1 , n 2 , . . . , n 18 } \{n1,n2,...,n18\} { n 1 , n 2 , . . . , n 1 8 } ,不同顏色的節點表示不同的節點類別。模擬的問題中節點類別有三類,分別用{ 0 , 1 , 2 } \{0,1,2\} { 0 , 1 , 2 } 表示,在訓練階段,使用節點{ n 1 , n 2 , n 3 , n 7 , n 8 , n 9 , n 13 , n 14 , n 15 } \{n1,n2,n3,n7,n8,n9,n13,n14,n15\} { n 1 , n 2 , n 3 , n 7 , n 8 , n 9 , n 1 3 , n 1 4 , n 1 5 } 進行訓練,相當於每一類取出三個節點訓練,其餘的節點用於在驗證階段進行驗證。
輸入的數據爲(node,label)
列表和(node1, node2)
邊列表,表示如下
N = [ ( "n{}" . format ( i) , 0 ) for i in range ( 1 , 7 ) ] + \
[ ( "n{}" . format ( i) , 1 ) for i in range ( 7 , 13 ) ] + \
[ ( "n{}" . format ( i) , 2 ) for i in range ( 13 , 19 ) ]
E = [ ( "n1" , "n2" ) , ( "n1" , "n3" ) , ( "n1" , "n5" ) ,
( "n2" , "n4" ) ,
( "n3" , "n6" ) , ( "n3" , "n9" ) ,
( "n4" , "n5" ) , ( "n4" , "n6" ) , ( "n4" , "n8" ) ,
( "n5" , "n14" ) ,
( "n7" , "n8" ) , ( "n7" , "n9" ) , ( "n7" , "n11" ) ,
( "n8" , "n10" ) , ( "n8" , "n11" ) , ( "n8" , "n12" ) ,
( "n9" , "n10" ) , ( "n9" , "n14" ) ,
( "n10" , "n12" ) ,
( "n11" , "n18" ) ,
( "n13" , "n15" ) , ( "n13" , "n16" ) , ( "n13" , "n18" ) ,
( "n14" , "n16" ) , ( "n14" , "n18" ) ,
( "n15" , "n16" ) , ( "n15" , "n18" ) ,
( "n17" , "n18" ) ]
N N N 爲節點集合,E E E 爲邊集合。
模型部分使用論文的linear函數來設計f w f_w f w 和g w g_w g w ,而且,這兩個函數在graph所有的節點上進行共享。模型部分實現了Ξ \Xi Ξ ,ρ \rho ρ 函數,以及完整的forward傳播部分,如下簡化代碼:
class Xi ( nn. Module) :
def __init__ ( self, ln, s) :
. . .
def forward ( self, X) :
. . .
class Rou ( nn. Module) :
def __init__ ( self, ln, s) :
. . .
def forward ( self, X) :
. . .
class Hw ( nn. Module) :
def __init__ ( self, ln, s, mu= 0.9 ) :
. . .
def forward ( self, X, H, dg_list) :
. . .
class AggrSum ( nn. Module) :
def __init__ ( self, node_num) :
. . .
def forward ( self, H, X_node) :
. . .
class OriLinearGNN ( nn. Module) :
def __init__ ( self, node_num, feat_dim, stat_dim, T) :
. . .
def forward ( self, X_Node, X_Neis, dg_list) :
. . .
for t in range ( self. T) :
H = torch. index_select( self. node_states, 0 , X_Node)
H = self. Hw( X, H, dg_list)
self. node_states = self. Aggr( H, X_Node)
. . .
可以看出,在模型訓練階段,每次forward,都會直接循環計算T次f w f_w f w 函數計算不動點,然後再計算output。
模型訓練部分按照常規的分類模型進行訓練,採用Adam優化器,學習率保持爲0.01,權重衰減爲0.01,使用交叉熵作爲損失函數,模型訓練部分代碼如下
def CalAccuracy ( output, label) :
. . .
def train ( node_list, edge_list, label_list, T, ndict_path= "./node_dict.json" ) :
. . .
. . .
. . .
. . .
train_node_list = [ 0 , 1 , 2 , 6 , 7 , 8 , 12 , 13 , 14 ]
train_node_label = [ 0 , 0 , 0 , 1 , 1 , 1 , 2 , 2 , 2 ]
test_node_list = [ 3 , 4 , 5 , 9 , 10 , 11 , 15 , 16 , 17 ]
test_node_label = [ 0 , 0 , 0 , 1 , 1 , 1 , 2 , 2 , 2 ]
model = OriLinearGNN( node_num= len ( node_list) ,
feat_dim= 2 ,
stat_dim= 2 ,
T= T)
optimizer = torch. optim. Adam( model. parameters( ) , lr= 0.01 , weight_decay= 0.01 )
criterion = nn. CrossEntropyLoss( size_average= True )
min_loss = float ( 'inf' )
node_inds_tensor = Variable( torch. Tensor( node_inds) . long ( ) )
node_neis_tensor = Variable( torch. Tensor( node_neis) . long ( ) )
train_label = Variable( torch. Tensor( train_node_label) . long ( ) )
for ep in range ( 500 ) :
res = model( node_inds_tensor, node_neis_tensor, dg_list)
train_res = torch. index_select( res, 0 , torch. Tensor( train_node_list) . long ( ) )
test_res = torch. index_select( res, 0 , torch. Tensor( test_node_list) . long ( ) )
loss = criterion( input = train_res,
target= train_label)
loss_val = loss. item( )
train_acc = CalAccuracy( train_res. cpu( ) . detach( ) . numpy( ) , np. array( train_node_label) )
test_acc = CalAccuracy( test_res. cpu( ) . detach( ) . numpy( ) , np. array( test_node_label) )
optimizer. zero_grad( )
loss. backward( retain_graph= True )
optimizer. step( )
if loss_val < min_loss:
min_loss = loss_val
print ( "==> [Epoch {}] : loss {:.4f}, min_loss {:.4f}, train_acc {:.3f}, test_acc {:.3f}" . format ( ep, loss_val, min_loss, train_acc, test_acc) )
模型的訓練和評估結果如下圖:
第一條曲線爲訓練loss曲線,第二條曲線爲訓練的acc曲線,第三條曲線爲評估的acc曲線,可以看出,訓練的loss很快達到了最低0.56左右,而準確率達到了1.0,基本已經過擬合,而驗證集的準確率一直很低,最高在第500個epoch處上升到0.667,約爲2 3 \frac{2}{3} 3 2 左右。
2. Graph Convolutional Networks
圖卷積的演變
按照圖傅里葉變換的性質,可以得到如下圖卷積的定義
( f ∗ h ) G = Φ diag [ h ^ ( λ 1 ) , … , h ^ ( λ n ) ] Φ T f
(\boldsymbol{f} * \boldsymbol{h})_{\mathcal{G}}=\boldsymbol{\Phi} \operatorname{diag}\left[\hat{h}\left(\lambda_{1}\right), \ldots, \hat{h}\left(\lambda_{n}\right)\right] \mathbf{\Phi}^{T} \boldsymbol{f}
( f ∗ h ) G = Φ d i a g [ h ^ ( λ 1 ) , … , h ^ ( λ n ) ] Φ T f 其中
對於圖$ \boldsymbol{f}的 傅 裏 葉 變 換 爲 的傅里葉變換爲 的 傅 裏 葉 變 換 爲 \boldsymbol{\hat{f}}=\mathbf{\Phi}^{T} \boldsymbol{f}$
對於卷積核的圖傅里葉變換:h ^ = ( h ^ 1 , … , h ^ n ) \hat{h}=\left(\hat{h}_{1}, \ldots, \hat{h}_{n}\right) h ^ = ( h ^ 1 , … , h ^ n ) ,其中
h ^ k = ⟨ h , ϕ k ⟩ , k = 1 , 2 … , n
\hat{h}_{k}=\left\langle h, \phi_{k}\right\rangle, k=1,2 \ldots, n
h ^ k = ⟨ h , ϕ k ⟩ , k = 1 , 2 … , n 按照矩陣形式就是h ^ = Φ T h \hat{\boldsymbol{h}}=\mathbf{\Phi}^{T} \boldsymbol{h} h ^ = Φ T h
對兩者的傅里葉變換向量f ^ ∈ R N × 1 \hat{f} \in \mathbb{R}^{N \times 1} f ^ ∈ R N × 1 和h ^ ∈ R N × 1 \hat{h} \in \mathbb{R}^{N \times 1} h ^ ∈ R N × 1 求element-wise乘積,等價於將h \boldsymbol{h} h 組織成對角矩陣 ,即diag [ h ^ ( λ k ) ] ∈ R N × N \operatorname{diag}\left[\hat{h}\left(\lambda_{k}\right)\right] \in \mathbb{R}^{N \times N} d i a g [ h ^ ( λ k ) ] ∈ R N × N ,然後再求diag [ h ^ ( λ k ) ] \operatorname{diag}\left[\hat{h}\left(\lambda_{k}\right)\right] d i a g [ h ^ ( λ k ) ] 和f \boldsymbol{f} f 矩陣乘法。
求上述結果的傅里葉逆變換,即左乘Φ \mathbf{\Phi} Φ 。
深度學習中的卷積就是要設計trainable的卷積核 ,從上式可以看出,就是要設計diag [ h ^ ( λ 1 ) , … , h ^ ( λ n ) ] \operatorname{diag}\left[\hat{h}\left(\lambda_{1}\right), \ldots, \hat{h}\left(\lambda_{n}\right)\right] d i a g [ h ^ ( λ 1 ) , … , h ^ ( λ n ) ] ,由此,可以直接將其變爲卷積核diag [ θ 1 , … , θ n ] \operatorname{diag}\left[\theta_{1}, \ldots, \theta_{n}\right] d i a g [ θ 1 , … , θ n ] ,而不需要再將卷積核進行傅里葉變換 ,由此,相當於直接將變換後的參量進行學習。
第一代GCN
第一代GCN爲
y output = σ ( Φ g θ Φ T x ) = σ ( Φ diag [ θ 1 , … , θ n ] Φ T x )
\boldsymbol{y}_{\text {output}}=\sigma\left(\mathbf{\Phi} \boldsymbol{g}_{\theta} \mathbf{\Phi}^{T} \boldsymbol{x}\right)=\sigma\left(\boldsymbol{\Phi} \operatorname{diag}\left[\theta_{1}, \ldots, \theta_{n}\right] \mathbf{\Phi}^{T} \boldsymbol{x}\right)
y output = σ ( Φ g θ Φ T x ) = σ ( Φ d i a g [ θ 1 , … , θ n ] Φ T x )
其中,x \boldsymbol{x} x 就是graph上對應每個節點的feature構成的向量,x = ( x 1 , x 2 , … , x n ) x=\left(x_{1}, x_{2}, \ldots, x_{n}\right) x = ( x 1 , x 2 , … , x n ) ,這裏暫時對每個節點都使用標量,然後經過激活之後,得到輸出y output \boldsymbol{y}_{\text {output}} y output ,之後傳入下一層。
一些缺點:
需要對拉普拉斯矩陣進行譜分解來求Φ \mathbf{\Phi} Φ ,在graph很大的時候複雜度很高。另外,還需要計算矩陣乘積,複雜度爲O ( n 2 ) O(n^2) O ( n 2 ) 。
卷積核參數爲n n n ,當graph很大的時候,n n n 會很大。
卷積核的spatial localization不好。
第二代GCN
圖傅里葉變換是關於特徵值(相當於普通傅里葉變換的頻率)的函數,也就是F ( λ 1 ) , … , F ( λ n ) F\left(\lambda_{1}\right), \ldots, F\left(\lambda_{n}\right) F ( λ 1 ) , … , F ( λ n ) ,即F ( Λ ) F(\mathbf{\Lambda}) F ( Λ ) ,因此,將卷積核g θ \boldsymbol{g}_{\theta} g θ 寫成g θ ( Λ ) \boldsymbol{g}_{\theta}(\Lambda) g θ ( Λ ) ,然後,將g θ ( Λ ) \boldsymbol{g}_{\theta}(\Lambda) g θ ( Λ ) 定義爲如下k階多項式
g θ ′ ( Λ ) ≈ ∑ k = 0 K θ k ′ Λ k
g_{\theta^{\prime}}(\mathbf{\Lambda}) \approx \sum_{k=0}^{K} \theta_{k}^{\prime} \mathbf{\Lambda}^{k}
g θ ′ ( Λ ) ≈ k = 0 ∑ K θ k ′ Λ k 將卷積公式帶入,可以得到
g θ ′ ∗ x ≈ Φ ∑ k = 0 K θ k ′ Λ k Φ T x = ∑ k = 0 K θ k ′ ( Φ Λ k Φ T ) x = ∑ k = 0 K θ k ′ ( Φ Λ Φ T ) k x = ∑ k = 0 K θ k ′ L k x
\begin{aligned} g_{\theta^{\prime}} * x & \approx \Phi \sum_{k=0}^{K} \theta_{k}^{\prime} \mathbf{\Lambda}^{k} \mathbf{\Phi}^{T} \boldsymbol{x} \\ &=\sum_{k=0}^{K} \theta_{k}^{\prime}\left(\mathbf{\Phi} \mathbf{\Lambda}^{k} \mathbf{\Phi}^{T}\right) x \\ &=\sum_{k=0}^{K} \theta_{k}^{\prime}\left(\mathbf{\Phi} \mathbf{\Lambda} \mathbf{\Phi}^{T}\right)^{k} x \\ &=\sum_{k=0}^{K} \theta_{k}^{\prime} \boldsymbol{L}^{k} x \end{aligned}
g θ ′ ∗ x ≈ Φ k = 0 ∑ K θ k ′ Λ k Φ T x = k = 0 ∑ K θ k ′ ( Φ Λ k Φ T ) x = k = 0 ∑ K θ k ′ ( Φ Λ Φ T ) k x = k = 0 ∑ K θ k ′ L k x
可以看出,這一代的GCN不需要做特徵分解了,可以直接對Laplacian矩陣做變換,通過事先將Laplacian矩陣求出來,以及L k \boldsymbol{L}^{k} L k 求出來,前向傳播的時候,就可以直接使用,複雜度爲O ( K n 2 ) O(Kn^2) O ( K n 2 ) 。
對於每一次Laplacian矩陣L \boldsymbol{L} L 和x \mathbf{x} x 相乘,對於節點n n n ,相當於從鄰居節點n e [ n ] ne[n] n e [ n ] 傳遞一次信息給節點n n n ,由於連續乘以了k k k 次Laplacian矩陣,那麼相當於n節點的k-hop之內的節點能夠傳遞信息給n n n ,因此,實際上只利用了節點的K-Localized信息 。
另外,可以使用切比雪夫展開式來近似L k \boldsymbol{L}^{k} L k ,任何k次多項式都可以使用切比雪夫展開式來近似 ,由此,引入切比雪夫多項式的K K K 階截斷獲得L k \boldsymbol{L}^{k} L k 近似,從而獲得對g θ ( Λ ) g_{\theta}(\mathbf{\Lambda}) g θ ( Λ ) 的近似
g θ ′ ( Λ ) ≈ ∑ k = 0 K θ k ′ T k ( Λ ~ )
g_{\theta^{\prime}}(\mathbf{\Lambda}) \approx \sum_{k=0}^{K} \theta_{k}^{\prime} T_{k}(\tilde{\mathbf{\Lambda}})
g θ ′ ( Λ ) ≈ k = 0 ∑ K θ k ′ T k ( Λ ~ )
其中,Λ ~ = 2 λ max Λ − I n \tilde{\mathbf{\Lambda}}=\frac{2}{\lambda_{\max }} \mathbf{\Lambda}-\boldsymbol{I}_{n} Λ ~ = λ max 2 Λ − I n ,θ ′ ∈ R K \boldsymbol{\theta}^{\prime} \in \mathbb{R}^{K} θ ′ ∈ R K 爲切比雪夫向量,θ k ′ \theta_{k}^{\prime} θ k ′ 爲第k k k 個分量,切比雪夫多項式T k ( x ) T_{k}(x) T k ( x ) 使用遞歸的方式進行定義:T k ( x ) = 2 x T k − 1 ( x ) − T k − 2 ( x ) T_{k}(x)=2 x T_{k-1}(x)-T_{k-2}(x) T k ( x ) = 2 x T k − 1 ( x ) − T k − 2 ( x ) ,其中,T 0 ( x ) = 1 , T 1 ( x ) = x T_{0}(x)=1, T_{1}(x)=x T 0 ( x ) = 1 , T 1 ( x ) = x 。
此時,帶入到卷積公式
g θ ′ ∗ x ≈ Φ ∑ k = 0 K θ k ′ T k ( Λ ~ ) Φ T x ≈ ∑ k = 0 K θ k ′ ( Φ T k ( Λ ~ ) Φ T ) x = ∑ k = 0 K θ k ′ T k ( L ~ ) x
\begin{aligned} \boldsymbol{g}_{\boldsymbol{\theta}^{\prime}} * \boldsymbol{x} & \approx \mathbf{\Phi} \sum_{k=0}^{K} \theta_{k}^{\prime} T_{k}(\tilde{\boldsymbol{\Lambda}}) \mathbf{\Phi}^{T} \boldsymbol{x} \\
&\approx \sum_{k=0}^{K} \theta_{k}^{\prime}\left(\mathbf{\Phi} T_{k}(\tilde{\mathbf{\Lambda}}) \mathbf{\Phi}^{T}\right) x \\
&=\sum_{k=0}^{K} \theta_{k}^{\prime} T_{k}(\tilde{\boldsymbol{L}}) \boldsymbol{x} \end{aligned}
g θ ′ ∗ x ≈ Φ k = 0 ∑ K θ k ′ T k ( Λ ~ ) Φ T x ≈ k = 0 ∑ K θ k ′ ( Φ T k ( Λ ~ ) Φ T ) x = k = 0 ∑ K θ k ′ T k ( L ~ ) x 其中,L ~ = 2 λ max L − I n \tilde{\boldsymbol{L}}=\frac{2}{\lambda_{\max }} \boldsymbol{L}-\boldsymbol{I}_{n} L ~ = λ max 2 L − I n 。
因此,可以得到輸出爲
y output = σ ( ∑ k = 0 K θ k ′ T k ( L ~ ) x )
\boldsymbol{y}_{\text {output}}=\sigma\left(\sum_{k=0}^{K} \theta_{k}^{\prime} T_{k}(\tilde{\boldsymbol{L}}) \boldsymbol{x}\right)
y output = σ ( k = 0 ∑ K θ k ′ T k ( L ~ ) x )
第三代GCN
這一代GCN直接取切比雪夫多項式中K = 1 K=1 K = 1 ,此時模型是1階近似
將K = 1 K=1 K = 1 ,λ max = 2 \lambda_{\max }=2 λ max = 2 帶入可以得到
g θ ′ ∗ x ≈ θ 0 ′ x + θ 1 ′ ( L − I n ) x = θ 0 ′ x + θ 1 ′ ( L − I n ) x = θ 0 ′ x − θ 1 ′ ( D − 1 / 2 W D − 1 / 2 ) x
\begin{aligned} \boldsymbol{g}_{\boldsymbol{\theta}^{\prime}} * \boldsymbol{x} & \approx \boldsymbol{\theta}_{0}^{\prime} \boldsymbol{x}+\theta_{1}^{\prime}\left(\boldsymbol{L}-\boldsymbol{I}_{n}\right) \boldsymbol{x} \\ &=\boldsymbol{\theta}_{0}^{\prime} \boldsymbol{x}+\theta_{1}^{\prime}\left(\boldsymbol{L}-\boldsymbol{I}_{n}\right) \boldsymbol{x} \\ &=\theta_{0}^{\prime} \boldsymbol{x}-\theta_{1}^{\prime}\left(\boldsymbol{D}^{-1 / 2} \boldsymbol{W} \boldsymbol{D}^{-1 / 2}\right) \boldsymbol{x} \end{aligned}
g θ ′ ∗ x ≈ θ 0 ′ x + θ 1 ′ ( L − I n ) x = θ 0 ′ x + θ 1 ′ ( L − I n ) x = θ 0 ′ x − θ 1 ′ ( D − 1 / 2 W D − 1 / 2 ) x
其中,歸一化拉普拉斯矩陣L = D − 1 / 2 ( D − W ) D − 1 / 2 = I n − D − 1 / 2 W D − 1 / 2 \boldsymbol{L}=\boldsymbol{D}^{-1 / 2}(\boldsymbol{D}-\boldsymbol{W}) \boldsymbol{D}^{-1 / 2}=\boldsymbol{I}_{n}-\boldsymbol{D}^{-1 / 2} \boldsymbol{W} \boldsymbol{D}^{-1 / 2} L = D − 1 / 2 ( D − W ) D − 1 / 2 = I n − D − 1 / 2 W D − 1 / 2 。爲了進一步簡化,令θ 0 ′ = − θ 1 ′ \theta_{0}^{\prime}=-\theta_{1}^{\prime} θ 0 ′ = − θ 1 ′ ,此時只含有一個參數θ \theta θ
g θ ′ ∗ x = θ ( I n + D − 1 / 2 W D − 1 / 2 ) x
g_{\theta^{\prime}} * x=\theta\left(I_{n}+D^{-1 / 2} W D^{-1 / 2}\right) x
g θ ′ ∗ x = θ ( I n + D − 1 / 2 W D − 1 / 2 ) x
由於I n + D − 1 / 2 W D − 1 / 2 \boldsymbol{I}_{n}+\boldsymbol{D}^{-1 / 2} \boldsymbol{W} \boldsymbol{D}^{-1 / 2} I n + D − 1 / 2 W D − 1 / 2 的譜半徑[ 0 , 2 ] [0,2] [ 0 , 2 ] 太大,使用歸一化的trick
I n + D − 1 / 2 W D − 1 / 2 → D ~ − 1 / 2 W ~ D ~ − 1 / 2
\boldsymbol{I}_{n}+\boldsymbol{D}^{-1 / 2} \boldsymbol{W} \boldsymbol{D}^{-1 / 2} \rightarrow \tilde{\boldsymbol{D}}^{-1 / 2} \tilde{\boldsymbol{W}} \tilde{\boldsymbol{D}}^{-1 / 2}
I n + D − 1 / 2 W D − 1 / 2 → D ~ − 1 / 2 W ~ D ~ − 1 / 2
其中,W ~ = W + I n \tilde{\boldsymbol{W}}=\boldsymbol{W}+\boldsymbol{I}_{n} W ~ = W + I n ,D ~ i j = Σ j W ~ i j \tilde{D}_{i j}=\Sigma_{j} \tilde{W}_{i j} D ~ i j = Σ j W ~ i j 。
由此,帶入卷積公式
g θ ′ ∗ x ⏟ R n × 1 = θ ( D ~ − 1 / 2 W ~ D ~ − 1 / 2 ⏟ R n × n ) x ⏟ R n × 1
\underbrace{g_{\theta^{\prime}} * x}_{\mathbb{R}^{n \times 1}}=\theta\left(\underbrace{\tilde{D}^{-1 / 2} \tilde{W} \tilde{D}^{-1 / 2}}_{\mathbb{R}^{n \times n}}\right) \underbrace{x}_{\mathbb{R}^{n \times 1}}
R n × 1 g θ ′ ∗ x = θ ( R n × n D ~ − 1 / 2 W ~ D ~ − 1 / 2 ) R n × 1 x
如果推廣到多通道 ,相當於每一個節點的信息是向量
x ∈ R N × 1 → X ∈ R N × C
x \in \mathbb{R}^{N \times 1} \rightarrow X \in \mathbb{R}^{N \times C}
x ∈ R N × 1 → X ∈ R N × C
其中,N N N 是節點數量 ,C C C 是通道數,或者稱作表示節點的信息維度數 。X \mathbf{X} X 是節點的特徵矩陣 。
相應的卷積核參數變化
θ ∈ R → Θ ∈ R C × F
\theta \in \mathbb{R} \rightarrow \Theta \in \mathbb{R}^{C \times F}
θ ∈ R → Θ ∈ R C × F
其中,F F F 爲卷積核數量。
那麼卷積結果寫成矩陣形式爲
Z ⏟ R N × F = D ~ − 1 / 2 W ~ D ~ − 1 / 2 ⏟ R N × N X ⏟ R N × C Θ ⏟ R C × F
\underbrace{Z}_{\mathbb{R}^{N \times F}}=\underbrace{\tilde{D}^{-1 / 2} \tilde{W} \tilde{D}^{-1 / 2}}_{\mathbb{R}^{N \times N}} \underbrace{X}_{\mathbb{R}^{N \times C}} \underbrace{\mathbf{\Theta}}_{\mathbb{R}^{C \times F}}
R N × F Z = R N × N D ~ − 1 / 2 W ~ D ~ − 1 / 2 R N × C X R C × F Θ
上述操作可以疊加多層,對上述輸出激活一下,就可以作爲下一層節點的特徵矩陣 。
這一代GCN特點:
取K = 1 K=1 K = 1 ,相當於直接取鄰域信息,類似於3 × 3 3\times{3} 3 × 3 的卷積核。
由於卷積核寬度減小,可以通過增加捲積層數來擴大感受野,從而增強網絡的表達能力。
增加了參數約束,比如λ max ≈ 2 \lambda_{\max } \approx 2 λ max ≈ 2 ,引入歸一化操作。
論文模型
論文采用兩層的GCN,用來在graph上進行半監督的節點分類任務,鄰接矩陣爲A A A ,首先計算出A ^ = D ~ − 1 2 A ~ D ~ − 1 2 \hat{A}=\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} A ^ = D ~ − 2 1 A ~ D ~ − 2 1 ,由此,前向網絡模型形式如下
Z = f ( X , A ) = softmax ( A ^ ReLU ( A ^ X W ( 0 ) ) W ( 1 ) )
Z=f(X, A)=\operatorname{softmax}\left(\hat{A} \operatorname{ReLU}\left(\hat{A} X W^{(0)}\right) W^{(1)}\right)
Z = f ( X , A ) = s o f t m a x ( A ^ R e L U ( A ^ X W ( 0 ) ) W ( 1 ) )
其中,W ( 0 ) ∈ R C × H W^{(0)} \in \mathbb{R}^{C \times H} W ( 0 ) ∈ R C × H 爲輸入層到隱藏層的權重矩陣,隱藏層的特徵維度爲H H H ,W ( 1 ) ∈ R H × F W^{(1)} \in \mathbb{R}^{H \times F} W ( 1 ) ∈ R H × F 爲隱藏層到輸出層的權重矩陣,softmax激活函數定義爲softmax ( x i ) = 1 Z exp ( x i ) \operatorname{softmax}\left(x_{i}\right)=\frac{1}{\mathcal{Z}} \exp \left(x_{i}\right) s o f t m a x ( x i ) = Z 1 exp ( x i ) ,Z = ∑ i exp ( x i ) \mathcal{Z}=\sum_{i} \exp \left(x_{i}\right) Z = ∑ i exp ( x i ) ,相當於對每一列做softmax,由此,得到交叉熵損失函數 爲
L = − ∑ l ∈ Y L ∑ f = 1 F Y l f ln Z l f
\mathcal{L}=-\sum_{l \in \mathcal{Y}_{L}} \sum_{f=1}^{F} Y_{l f} \ln Z_{l f}
L = − l ∈ Y L ∑ f = 1 ∑ F Y l f ln Z l f
其中,Y L \mathcal{Y}_{L} Y L 爲帶有標籤的節點集合。
上圖中左圖爲GCN圖示,輸入爲C C C 個通道,輸出爲F F F 個通道,Y 1 Y_1 Y 1 和Y 2 Y_2 Y 2 爲節點標籤。右圖爲在一數據集上進行訓練得到的隱藏層激活值經過t-SNE降維可視化後的結果,可以看出聚類效果較好。
實驗結果
論文在如下幾個任務中進行實驗
在citation network中進行半監督的document classification。
在從knowledge graph中提取的bipartite graph中進行半監督的entity classification
實驗數據說明如下
前三個Dataset是citation network數據集,節點表示文檔,邊表示引用的連接,label rate表示用來有監督訓練的節點數量佔總節點數量比例,第四個Dataset是bipartite graph數據集。
結果如下:
可以看出,在比較的幾種算法中,論文GCN的在準確率和時間上都最好。
3. DCNN
該模型對每一個節點(或邊、或圖)採用H個hop的矩陣進行表示,每一個hop都表示該鄰近範圍的鄰近信息,由此,對於局部信息的獲取效果比較好,得到的節點的representation的表示能力很強。
DCNN模型詳述
假設有如下定義
一個graph數據集G = { G t ∣ t ∈ 1 … T } \mathcal{G}=\left\{G_{t} | t \in 1 \ldots T\right\} G = { G t ∣ t ∈ 1 … T }
graph定義爲G t = ( V t , E t ) G_{t}=\left(V_{t}, E_{t}\right) G t = ( V t , E t ) ,其中,V t V_t V t 爲節點集合,E t E_t E t 爲邊集合
所有節點的特徵矩陣定義爲X t X_t X t ,大小爲N t × F N_t\times{F} N t × F ,其中,N t N_t N t 爲圖G t G_t G t 的節點個數,F F F 爲節點特徵維度
邊信息E t E_t E t 定義爲N t × N t N_t\times{}N_t N t × N t 的鄰接矩陣A t A_t A t ,由此可以計算出節點度(degree)歸一化 的轉移概率矩陣P t P_t P t ,表示從i i i 節點轉移到j j j 節點的概率。
對於graph來說沒有任何限制,graph可以是帶權重的或不帶權重的,有向的或無向的。
模型的目標爲預測Y Y Y ,也就是預測每一個圖的節點標籤,或者邊的標籤,或者每一個圖的標籤,在每一種情況中,模型輸入部分帶有標籤的數據集合,然後預測剩下的數據的標籤 。
DCNN模型輸入圖G \mathcal{G} G ,返回硬分類預測值Y Y Y 或者條件分佈概率P ( Y ∣ X ) \mathbb{P}(Y|X) P ( Y ∣ X ) 。該模型將每一個預測的目標對象(節點、邊或圖)轉化爲一個diffusion-convolutional representation,大小爲H × F H\times{}F H × F ,H H H 表示擴散的hops。因此,對於節點分類任務,圖t t t 的confusion-convolutional representation爲大小爲N t × H × F N_t\times{H}\times{F} N t × H × F 的張量,表示爲Z t Z_t Z t ,對於圖分類任務,張量Z t Z_t Z t 爲大小爲H × F H\times{F} H × F 的矩陣,對於邊分類任務,張量Z t Z_t Z t 爲大小爲M t × H × F M_t\times{H}\times{F} M t × H × F 的矩陣。示意圖如下
對於節點分類任務 ,假設P t ∗ P_t^* P t ∗ 爲P t P_t P t 的power series,大小爲N t × H × N t N_t\times{H}\times{N_t} N t × H × N t ,那麼對於圖t t t 的節點i i i ,第j j j 個hop,第k k k 維特徵值Z t i j k Z_{tijk} Z t i j k 計算公式爲
Z t i j k = f ( W j k c ⋅ ∑ l = 1 N t P t i j l ∗ X t l k )
Z_{t i j k}=f\left(W_{j k}^{c} \cdot \sum_{l=1}^{N_{t}} P_{t i j l}^{*} X_{t l k}\right)
Z t i j k = f ( W j k c ⋅ l = 1 ∑ N t P t i j l ∗ X t l k )
使用矩陣表示爲
Z t = f ( W c ⊙ P t ∗ X t )
Z_{t}=f\left(W^{c} \odot P_{t}^{*} X_{t}\right)
Z t = f ( W c ⊙ P t ∗ X t )
其中⊙ \odot ⊙ 表示element-wise multiplication,由於模型只考慮H H H 跳的參數,即參數量爲O ( H × F ) O(H\times{F}) O ( H × F ) ,使得diffusion-convolutional representation不受輸入大小的限制 。
在計算出Z Z Z 之後,過一層全連接得到輸出Y Y Y ,使用Y ^ \hat{Y} Y ^ 表示硬分類預測結果,使用P ( Y ∣ X ) \mathbb{P}(Y|X) P ( Y ∣ X ) 表示預測概率,計算方式如下
Y ^ = arg max ( f ( W d ⊙ Z ) )
\hat{Y}=\arg \max \left(f\left(W^{d} \odot Z\right)\right)
Y ^ = arg max ( f ( W d ⊙ Z ) )
P ( Y ∣ X ) = softmax ( f ( W d ⊙ Z ) )
\mathbb{P}(Y | X)=\operatorname{softmax}\left(f\left(W^{d} \odot Z\right)\right)
P ( Y ∣ X ) = s o f t m a x ( f ( W d ⊙ Z ) )
對於圖分類任務 ,直接採用所有節點表示的均值作爲graph的representation
Z t = f ( W c ⊙ 1 N t T P t ∗ X t / N t )
Z_{t}=f\left(W^{c} \odot 1_{N_{t}}^{T} P_{t}^{*} X_{t} / N_{t}\right)
Z t = f ( W c ⊙ 1 N t T P t ∗ X t / N t )
其中,1 N t 1_{N_t} 1 N t 是全爲1的N t × 1 N_t\times{1} N t × 1 的向量。
對於邊分類任務 ,通過將每一條邊轉化爲一個節點來進行訓練和預測 ,這個節點與原來的邊對應的首尾節點相連,轉化後的圖的鄰接矩陣A t ′ A_t' A t ′ 可以直接從原來的鄰接矩陣A t A_t A t 增加一個incidence matrix 得到
A t ′ = ( A t B t T B t 0 )
A_{t}^{\prime}=\left(\begin{array}{cc}{A_{t}} & {B_{t}^{T}} \\ {B_{t}} & {0}\end{array}\right)
A t ′ = ( A t B t B t T 0 )
之後,使用A t ′ A_t' A t ′ 來計算P t ′ P_t' P t ′ ,並用來替換P t P_t P t 來進行分類。
對於模型訓練 ,使用梯度下降法,並採用early-stop方式得到最終模型。
實驗結果
節點分類任務的實驗數據集使用Cora和Pubmed數據集,包含scientific papers(相當於node)、citations(相當於edge)和subjects(相當於label)。實驗評估標準使用分類準確率以及F1值。
節點分類的實驗結果 如下
可以看出使用各種評估標準,DCNN效果都是最好的。
圖分類任務 的實驗結果如下
可以看出,在不同數據集上,DCNN在圖分類任務上並沒有明顯表現出很好的效果。
優缺點
優點 :
缺點 :
內存佔用大 :DCNN建立在密集的張量計算上,需要存儲大量的張量,需要O ( N t 2 H ) O(N_t^2H) O ( N t 2 H ) 的空間複雜度。
長距離信息傳播不足 :模型對於局部的信息獲取較好,但是遠距離的信息傳播不足。
4. Tree-LSTM
將序列型的LSTM模型擴展到樹型的LSTM模型 ,簡稱Tree-LSTM,並根據孩子節點是否有序,論文提出了兩個模型變體,Child-Sum Tree-LSTM模型和N-ary Tree-LSTM模型 。和序列型的LSTM模型的主要不同點在於,序列型的LSTM從前一時刻獲取隱藏狀態h t h_t h t ,而樹型的LSTM從其所有的孩子節點獲取隱藏狀態。
模型詳解
Tree-LSTM模型對於每一個孩子節點都會產生一個“遺忘門”f j k f_{jk} f j k ,這個使得模型能夠從所有的孩子節點選擇性地獲取信息和結合信息 。
Child-Sum Tree-LSTMs
該模型的更新方程如下
h ~ j = ∑ k ∈ C ( j ) h k i j = σ ( W ( i ) x j + U ( i ) h ~ j + b ( i ) ) f j k = σ ( W ( f ) x j + U ( f ) h k + b ( f ) ) o j = σ ( W ( o ) x j + U ( o ) h ~ j + b ( o ) ) u j = tanh ( W ( u ) x j + U ( u ) h ~ j + b ( u ) ) c j = i j ⊙ u j + ∑ k ∈ C ( j ) f j k ⊙ c k h j = o j ⊙ tanh ( c j )
\begin{aligned} \tilde{h}_{j} &=\sum_{k \in C(j)} h_{k} \\ i_{j} &=\sigma\left(W^{(i)} x_{j}+U^{(i)} \tilde{h}_{j}+b^{(i)}\right) \\ f_{j k} &=\sigma\left(W^{(f)} x_{j}+U^{(f)} h_{k}+b^{(f)}\right) \\ o_{j} &=\sigma\left(W^{(o)} x_{j}+U^{(o)} \tilde{h}_{j}+b^{(o)}\right) \\ u_{j} &=\tanh \left(W^{(u)} x_{j}+U^{(u)} \tilde{h}_{j}+b^{(u)}\right) \\ c_{j} &=i_{j} \odot u_{j}+\sum_{k \in C(j)} f_{j k} \odot c_{k} \\ h_{j} &=o_{j} \odot \tanh \left(c_{j}\right) \end{aligned}
h ~ j i j f j k o j u j c j h j = k ∈ C ( j ) ∑ h k = σ ( W ( i ) x j + U ( i ) h ~ j + b ( i ) ) = σ ( W ( f ) x j + U ( f ) h k + b ( f ) ) = σ ( W ( o ) x j + U ( o ) h ~ j + b ( o ) ) = tanh ( W ( u ) x j + U ( u ) h ~ j + b ( u ) ) = i j ⊙ u j + k ∈ C ( j ) ∑ f j k ⊙ c k = o j ⊙ tanh ( c j ) 其中,C ( j ) C(j) C ( j ) 表示j j j 節點的鄰居節點的個數,h k h_k h k 表示節點k k k 的隱藏狀態,i j i_j i j 表示節點j j j 的”輸入門“,f j k f_{jk} f j k 表示節點j j j 的鄰居節點k k k 的“遺忘門“,o j o_j o j 表示節點j j j 的”輸出門“。
這裏的關鍵點在於第三個公式的f j k f_{jk} f j k ,這個模型對節點j j j 的每個鄰居節點k k k 都計算了對應的”遺忘門“向量,然後在第六行中計算c j c_j c j 時對鄰居節點的信息進行”遺忘“和組合。
由於該模型是對所有的孩子節點求和,所以這個模型對於節點順序不敏感的 ,適合於孩子節點無序的情況。
N-ary Tree-LSTMs
假如一個樹的最大分支數爲N N N (即孩子節點最多爲N N N 個),而且孩子節點是有序的,對於節點j j j ,對於該節點的第k k k 個孩子節點的隱藏狀態和記憶單元分別用h j k h_{jk} h j k 和c j k c_{jk} c j k 表示。模型的方程如下
i j = σ ( W ( i ) x j + ∑ ℓ = 1 N U ℓ ( i ) h j ℓ + b ( i ) ) f j k = σ ( W ( f ) x j + ∑ ℓ = 1 N U k ℓ ( f ) h j ℓ + b ( f ) ) o j = σ ( W ( o ) x j + ∑ ℓ = 1 N U ℓ ( o ) h j ℓ + b ( o ) ) u j = tanh ( W ( u ) x j + ∑ ℓ = 1 N U ℓ ( a ) h j ℓ + b ( a ) ) c j = i j ⊙ u j + ∑ ℓ = 1 N f j ℓ ⊙ c j ℓ h j = o j ⊙ tanh ( c j )
\begin{aligned} i_{j} &=\sigma\left(W^{(i)} x_{j}+\sum_{\ell=1}^{N} U_{\ell}^{(i)} h_{j \ell}+b^{(i)}\right) \\ f_{j k} &=\sigma\left(W^{(f)} x_{j}+\sum_{\ell=1}^{N} U_{k \ell}^{(f)} h_{j \ell}+b^{(f)}\right) \\ o_{j} &=\sigma\left(W^{(o)} x_{j}+\sum_{\ell=1}^{N} U_{\ell}^{(o)} h_{j \ell}+b^{(o)}\right) \\ u_{j} &=\tanh \left(W^{(u)} x_{j}+\sum_{\ell=1}^{N} U_{\ell}^{(a)} h_{j \ell}+b^{(a)}\right) \\ c_{j} &=i_{j} \odot u_{j}+\sum_{\ell=1}^{N} f_{j \ell} \odot c_{j \ell} \\ h_{j} &=o_{j} \odot \tanh \left(c_{j}\right) \end{aligned}
i j f j k o j u j c j h j = σ ( W ( i ) x j + ℓ = 1 ∑ N U ℓ ( i ) h j ℓ + b ( i ) ) = σ ( W ( f ) x j + ℓ = 1 ∑ N U k ℓ ( f ) h j ℓ + b ( f ) ) = σ ( W ( o ) x j + ℓ = 1 ∑ N U ℓ ( o ) h j ℓ + b ( o ) ) = tanh ( W ( u ) x j + ℓ = 1 ∑ N U ℓ ( a ) h j ℓ + b ( a ) ) = i j ⊙ u j + ℓ = 1 ∑ N f j ℓ ⊙ c j ℓ = o j ⊙ tanh ( c j ) 值得注意的是該模型爲每個孩子節點都單獨地設置了參數U l U_{l} U l 。
模型訓練
分類任務
分類任務定義爲在類別集Y \mathcal{Y} Y 中預測出正確的標籤y ^ \hat{y} y ^ ,對於每一個節點j j j ,使用一個softmax分類器來預測節點標籤y ^ j \hat{y}_j y ^ j ,分類器取每個節點的隱藏狀態h j h_j h j 作爲輸入
p ^ θ ( y ∣ { x } j ) = softmax ( W ( s ) h j + b ( s ) ) y ^ j = arg max y p ^ θ ( y ∣ { x } j )
\begin{aligned} \hat{p}_{\theta}\left(y |\{x\}_{j}\right) &=\operatorname{softmax}\left(W^{(s)} h_{j}+b^{(s)}\right) \\ \hat{y}_{j} &=\arg \max _{y} \hat{p}_{\theta}\left(y |\{x\}_{j}\right) \end{aligned}
p ^ θ ( y ∣ { x } j ) y ^ j = s o f t m a x ( W ( s ) h j + b ( s ) ) = arg y max p ^ θ ( y ∣ { x } j ) 損失函數使用negative log-likelihood
J ( θ ) = − 1 m ∑ k = 1 m log p ^ θ ( y ( k ) ∣ { x } ( k ) ) + λ 2 ∥ θ ∥ 2 2
J(\theta)=-\frac{1}{m} \sum_{k=1}^{m} \log \hat{p}_{\theta}\left(y^{(k)} |\{x\}^{(k)}\right)+\frac{\lambda}{2}\|\theta\|_{2}^{2}
J ( θ ) = − m 1 k = 1 ∑ m log p ^ θ ( y ( k ) ∣ { x } ( k ) ) + 2 λ ∥ θ ∥ 2 2 其中,m m m 是帶有標籤的節點數量,λ \lambda λ 是L 2 L2 L 2 是正則化超參。
語義相關性任務
該任務給定一個句子對(sentence pair),模型需要預測出一個範圍在[ 1 , K ] [1,K] [ 1 , K ] 之間的實數值,這個值越高,表示相似度越高。
論文首先對每一個句子產生一個representation,兩個句子的表示分別用h L h_L h L 和h R h_R h R 表示,得到這兩個representation之後,從distance和angle兩個方面考慮,使用神經網絡來得到( h L , h R ) (h_L,h_R) ( h L , h R ) 相似度:
h × = h L ⊙ h R h + = ∣ h L − h R ∣ h s = σ ( W ( × ) h × + W ( + ) h + + b ( h ) ) p ^ θ = softmax ( W ( p ) h s + b ( p ) ) y ^ = r T p ^ θ
\begin{aligned} h_{ \times} &=h_{L} \odot h_{R} \\ h_{+} &=\left|h_{L}-h_{R}\right| \\ h_{s} &=\sigma\left(W^{( \times)} h_{ \times}+W^{(+)} h_{+}+b^{(h)}\right) \\ \hat{p}_{\theta} &=\operatorname{softmax}\left(W^{(p)} h_{s}+b^{(p)}\right) \\ \hat{y} &=r^{T} \hat{p}_{\theta} \end{aligned}
h × h + h s p ^ θ y ^ = h L ⊙ h R = ∣ h L − h R ∣ = σ ( W ( × ) h × + W ( + ) h + + b ( h ) ) = s o f t m a x ( W ( p ) h s + b ( p ) ) = r T p ^ θ 其中,r T = [ 1 2 … K ] r^{T}=\left[\begin{array}{llll}{1} & {2} & {\ldots} & {K}\end{array}\right] r T = [ 1 2 … K ] 。模型期望根據訓練得到的參數θ \theta θ 得到的結果:y ^ = r T p ^ θ ≈ y \hat{y}=r^{T} \hat{p}_{\theta} \approx y y ^ = r T p ^ θ ≈ y 。由此,定義一個目標分佈p p p
p i = { y − ⌊ y ⌋ , i = ⌊ y ⌋ + 1 ⌊ y ⌋ − y + 1 , i = ⌊ y ⌋ 0 otherwise
p_{i}=\left\{\begin{array}{ll}{y-\lfloor y\rfloor,} & { i=\lfloor y\rfloor+ 1} \\ {\lfloor y\rfloor- y+1,} & {i=\lfloor y\rfloor} \\ { 0} & {\text { otherwise }}\end{array}\right.
p i = ⎩ ⎨ ⎧ y − ⌊ y ⌋ , ⌊ y ⌋ − y + 1 , 0 i = ⌊ y ⌋ + 1 i = ⌊ y ⌋ otherwise 其中,1 ≤ i ≤ K 1\le{i}\le{K} 1 ≤ i ≤ K ,損失函數爲p p p 和p ^ θ \hat{p}_{\theta} p ^ θ 之間的KL散度:
J ( θ ) = 1 m ∑ k = 1 m K L ( p ( k ) ∥ p ^ θ ( k ) ) + λ 2 ∥ θ ∥ 2 2
J(\theta)=\frac{1}{m} \sum_{k=1}^{m} \mathrm{KL}\left(p^{(k)} \| \hat{p}_{\theta}^{(k)}\right)+\frac{\lambda}{2}\|\theta\|_{2}^{2}
J ( θ ) = m 1 k = 1 ∑ m K L ( p ( k ) ∥ p ^ θ ( k ) ) + 2 λ ∥ θ ∥ 2 2
實驗結果
對於分類任務,實驗數據使用Stanford Sentiment Treebank ,分爲五類:very negative, negative, neural, positive和very positive。在該數據集上的測試集上的準確度結果如下:
對於語義相似度度量,模型的任務是預測出兩個句子語義的相似度分數。在SICK的語義相似度子任務上的測試結果如下
對於模型的實現部分目前可以直接使用DGL或者PyG等庫幫助快速實現,接下來會整理如何使用這些庫進行簡單的圖網絡的實驗。圖神經網絡在工業界的挑戰主要是非結構化的圖結構計算需要消耗巨大的計算資源和存儲資源。