GNN圖神經網絡詳述-02

本文做爲第2部分,主要根據原始論文介紹幾篇基礎的工做,主要包括GNN,GCN及變體,DCNN,Tree-LSTM,包括模型的詳解和模型訓練,以及模型評價。html

1. The Graph Neural Network Model

這篇論文是第一個提出Graph Neural Network模型的論文,它將神經網絡使用在圖結構數據上,並細述了神經網絡模型告終構組成、計算方法、優化算法、流程實現等等。論文後面還對模型的複雜度進行了評估,以及在現實任務上進行了實驗和比較(比較算法爲NL、L、FNN)。該報告暫時主要關注模型設計部分和實驗結果部分,忽略複雜性評估部分node

圖領域應用

對於圖領域問題,假設函數 τ \tau 是將一個圖 G G 和圖中的一個節點 n n 轉化爲一個實值向量的函數
τ ( G , n ) R m \tau(G,n)\in{R^m} 那麼監督學習的任務就在於從已知樣本中學習獲得這樣的函數。python

圖領域的應用主要能夠分爲兩種類型:專一於圖的應用(graph-focused)和專一於節點的應用(node-focused)。對於graph-focused的應用,函數 τ \tau 和具體的節點無關,(即 τ ( G ) \tau(G) ),訓練時,在一個圖的數據集中進行分類或迴歸。對於node-focused的應用, τ \tau 函數依賴於具體的節點 n n ,即 τ ( G , n ) \tau(G,n) ,以下:
在這裏插入圖片描述web

  • (a) 是一個化學分子結構,可以使用圖 G G 進行表示,函數 τ ( G ) \tau(G) 可能用於估計這種化學分子對人體有害的機率,所以,咱們並不關注分子中具體的原子(至關於節點),因此屬於graph-focused應用。
  • (b) 是一張城堡的圖片,圖片中的每一種結構都由節點表示,函數 τ ( G , n ) \tau(G,n) 可能用於預測每個節點是否屬於城堡(圖中的黑點)。這種類型屬於node-focused應用。

GNN模型詳述

GNN模型基於信息傳播機制,每個節點經過相互交換信息來更新本身的節點狀態,直到達到某一個穩定值,GNN的輸出就是在每一個節點處,根據當前節點狀態分別計算輸出。算法

有以下定義:json

  • 一個圖 G G 表示爲一對 ( N , E ) (\boldsymbol{N}, \boldsymbol{E}) ,其中, N \boldsymbol{N} 表示節點集合, E \boldsymbol{E} 表示邊集。網絡

  • n e [ n ] ne[n] 表示節點 n n 的鄰居節點集合app

  • c o [ n ] co[n] 表示以 n n 節點爲頂點的全部邊集合框架

  • l n R l N \boldsymbol{l}_{n} \in \mathbb{R}^{l_{N}} 表示節點 n n 的特徵向量ide

  • l ( n 1 , n 2 ) R l E \boldsymbol{l}_{\left(n_{1}, n_{2}\right)} \in \mathbb{R}^{l_{E}} 表示邊 ( n 1 , n 2 ) (n_1,n_2) 的特徵向量

  • l \boldsymbol{l} 表示全部特徵向量疊在一塊兒的向量

:原論文裏面 l \boldsymbol{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 ,都會給該節點的鄰居節點 u u 賦予一個position值 ν n ( u ) \nu_{n}(u) ,該函數稱爲injective function, ν n : n e [ n ] { 1 , N } \nu_{n} : \mathrm{ne}[n] \rightarrow\{1, \ldots|\mathbf{N}|\}

假設存在一個圖-節點對的集合 D = G × N \mathcal{D}=\mathcal{G} \times \mathcal{N} G \mathcal{G} 表示圖的集合, N \mathcal{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} \} 其中, n i , j N i n_{i, j} \in \boldsymbol{N}_{i} 表示集合 N i N \boldsymbol{N}_{i} \in \mathcal{N} 中的第 j j 個節點, t i , j \boldsymbol{t}_{i, j} 表示節點 n i j n_{ij} 的指望目標(即標籤)。

節點 n n 的狀態用 x n R s \boldsymbol{x}_{n} \in \mathbb{R}^{s} 表示,該節點的輸出用 o n \boldsymbol{o}_{\boldsymbol{n}} 表示, f w f_{\boldsymbol{w}} local transition function g w g_{\boldsymbol{w}} local output function,那麼 x n \boldsymbol{x}_{n} o n \boldsymbol{o}_{\boldsymbol{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} 其中, 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]} 分別表示節點 n n 的特徵向量、與節點 n n 相連的邊的特徵向量、節點 n n 鄰居節點的狀態向量、節點 n n 鄰居節點的特徵向量。

假設 x , o , l , l N \boldsymbol{x}, \boldsymbol{o}, \boldsymbol{l}, \boldsymbol{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} 其中, F w F_{\boldsymbol{w}} global transition function G w G_{\boldsymbol{w}} global output function,分別是 f w f_{\boldsymbol{w}} g w g_{\boldsymbol{w}} 的疊加形式。

根據Banach的不動點理論,假設 F w F_{\boldsymbol{w}} 是一個壓縮映射函數,那麼式子有惟一不動點解,並且能夠經過迭代方式逼近該不動點
x ( t + 1 ) = F w ( x ( t ) , l ) \boldsymbol{x}(t+1)=F_{\boldsymbol{w}}(\boldsymbol{x}(t), \boldsymbol{l}) 其中, x ( t ) \boldsymbol{x}(t) 表示 x \boldsymbol{x} 在第 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} GNN的信息傳播流圖以及等效的網絡結構以下圖所示

在這裏插入圖片描述根據上圖所示,頂端的圖是原始的Graph,中間的圖表示狀態向量和輸出向量的計算流圖,最下面的圖表示將更新流程迭代 T T 次,並展開以後獲得等效網絡圖。

網絡的學習算法設計

GNN的學習就是估計參數 w \boldsymbol{w} ,使得函數 φ w \varphi_{\boldsymbol{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} \} 其中, q i q_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} 優化算法基於隨機梯度降低的策略,優化步驟按照以下幾步進行

  • 按照迭代方程迭代 T T 次獲得 x n ( t ) x_{n}(t) ,此時接近不動點解: x ( T ) x \boldsymbol{x}(T) \approx \boldsymbol{x}
  • 計算參數權重的梯度 e w ( T ) / w \partial e_{\boldsymbol{w}}(T) / \partial \boldsymbol{w}
  • 使用該梯度來更新權重 w \boldsymbol{w}

這裏假設函數 F w F_{\boldsymbol{w}} 是壓縮映射函數,保證最終可以收斂到不動點。另外,這裏的梯度的計算使用backpropagation-through-time algorithm

爲了代表前面的方法是可行的,論文接着證實了兩個結論


理論1(可微性):令 F w F_{\boldsymbol{w}} G w G_{\boldsymbol{w}} 分別是global transition function和global output function,若是 F w ( x , l ) F_{\boldsymbol{w}}(\boldsymbol{x}, \boldsymbol{l}) G w ( x , l N ) G_{\boldsymbol{w}}\left(\boldsymbol{x}, \boldsymbol{l}_{\boldsymbol{N}}\right) 對於 x \boldsymbol{x} w \boldsymbol{w} 是連續可微的,那麼 φ w \varphi_{\boldsymbol{w}} w \boldsymbol{w} 也是連續可微的。

理論2(反向傳播):令 F w F_{\boldsymbol{w}} G w G_{\boldsymbol{w}} 分別是global transition function和global output function,若是 F w ( x , l ) F_{\boldsymbol{w}}(\boldsymbol{x}, \boldsymbol{l}) G w ( x , l N ) G_{\boldsymbol{w}}\left(\boldsymbol{x}, \boldsymbol{l}_{\boldsymbol{N}}\right) 對於 x \boldsymbol{x} w \boldsymbol{w} 是連續可微的。令 z ( t ) \boldsymbol{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 ) , \boldsymbol{z}(T), \boldsymbol{z}(T-1), \ldots 收斂到一個向量, z = lim t z ( t ) z=\lim _{t \rightarrow-\infty} z(t) ,而且收斂速度爲指數級收斂以及與初值 z ( T ) \boldsymbol{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})
其中, x \boldsymbol{x} 是GNN的穩定狀態。

算法流程以下
在這裏插入圖片描述
FORWARD用於迭代計算出收斂點,BACKWARD用於計算梯度。

Transition和Output函數實現

在GNN中,函數 g w g_{\boldsymbol{w}} 不須要知足特定的約束,直接使用多層前饋神經網絡,對於函數 f w f_{\boldsymbol{w}} ,則須要着重考慮,由於 f w f_{\boldsymbol{w}} 須要知足壓縮映射的條件,並且與不動點計算相關。下面提出兩種神經網絡和不一樣的策略來知足這些需求

  1. Linear(nonpositional) GNN

    對於節點 n n 狀態的計算,將 f w f_{\boldsymbol{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} 至關因而對節點 n n 的每個鄰居節點使用 h w h_{\boldsymbol{w}} ,並將獲得的值求和來做爲節點 n n 的狀態。

    由此,對上式中的函數 h w h_{\boldsymbol{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} 其中,向量 b n R s \boldsymbol{b}_{n} \in \mathbb{R}^{s} ,矩陣 A n , u R s × s \boldsymbol{A}_{n, u} \in \mathbb{R}^{s \times s} 定義爲兩個前向神經網絡的輸出。更確切地說,令產生矩陣 A n , u \boldsymbol{A}_{n, u} 的網絡爲transition network,產生向量 b n \boldsymbol{b}_{n} 的網絡爲forcing network

    transition network表示爲 ϕ w \phi_{\boldsymbol{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}}
    forcing network表示爲 ρ w \rho_{\boldsymbol{w}}
    ρ w : R l N R s \rho_{\boldsymbol{w}} : \mathbb{R}^{l_{N}} \rightarrow \mathbb{R}^{s} 由此,能夠定義 A n , u \boldsymbol{A}_{n, u} b n \boldsymbol{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} 其中, μ ( 0 , 1 ) \mu \in(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) resize ( ) \text{resize}(\cdot) 表示將 s 2 s^2 維的向量整理(reshape)成 s × s s\times{s} 的矩陣,也就是說,將transition network的輸出整理成方形矩陣,而後乘以一個係數就獲得 A n , u \boldsymbol{A}_{n, u} b n \boldsymbol{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} ,這個能夠經過設定transition function的激活函數來知足,好比設定激活函數爲 t a n h ( ) tanh() 。在這種狀況下, F w ( x , l ) = A x + b F_{\boldsymbol{w}}(\boldsymbol{x}, \boldsymbol{l})=\boldsymbol{A} \boldsymbol{x}+\boldsymbol{b} A \boldsymbol{A} b \boldsymbol{b} 分別是 A n , u \boldsymbol{A}_{n, u} 的塊矩陣形式和 b n \boldsymbol{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}
    該式表示 F w F_{\boldsymbol{w}} 對於任意的參數 w \boldsymbol{w} 是一個壓縮映射。

    矩陣 M M 的1-norm定義爲
    M 1 = max j i m i , j \|M\|_{1}=\max _{j} \sum_{i}\left|m_{i, j}\right|

  2. Nonelinear(nonpositional) GNN:在這個結構中, h w h_{\boldsymbol{w}} 經過多層前饋網絡實現,可是,並非全部的參數 w \boldsymbol{w} 都會被使用,由於一樣須要保證 F w F_{\boldsymbol{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) 其中,懲罰項 L ( y ) L(y) y > μ y>\mu 時爲 ( y μ ) 2 (y-\mu)^2 ,在 y μ y\le{\mu} 時爲0,參數 μ ( 0 , 1 ) \mu\in(0,1) 定義爲但願的 F w F_{\boldsymbol{w}} 的壓縮係數。

實驗結果

論文將GNN模型在三個任務上進行了實驗:子圖匹配(subgraph matching)任務,誘變(mutagenesis)任務和網頁排序(web page ranking)任務。在這些任務上使用linear和nonlinear的模型測試,其中nonlinear模型中的激活函數使用sigmoid函數。

子圖匹配任務爲在一個大圖 G G 上找到給定的子圖 S S (標記出屬於子圖的節點),也就是說,函數 τ \tau 必須學習到,若是 n i , j n_{i,j} 屬於子圖 G G ,那麼 τ ( G i , n i , j ) = 1 \tau(G_i,n_{i,j})=1 ,不然, τ ( G i , n i , j ) = 1 \tau(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\} ,不一樣顏色的節點表示不一樣的節點類別。模擬的問題中節點類別有三類,分別用 { 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\} 進行訓練,至關於每一類取出三個節點訓練,其他的節點用於在驗證階段進行驗證。

輸入的數據爲(node,label)列表和(node1, node2)邊列表,表示以下

# (node, label)集
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 爲節點集合, E E 爲邊集合。

  • 模型部分使用論文的linear函數來設計 f w f_w g w g_w ,並且,這兩個函數在graph全部的節點上進行共享。模型部分實現了 Ξ \Xi ρ \rho 函數,以及完整的forward傳播部分,以下簡化代碼:

    # 實現Xi函數,輸入一個batch的相鄰節點特徵向量對ln,返回是s*s的A矩陣
    # ln是特徵向量維度,s爲狀態向量維度
    # Input : (N, 2*ln)
    # Output : (N, S, S)
    class Xi(nn.Module):
        def __init__(self, ln, s):
            ...
        def forward(self, X):
            ...
    
    # 實現Rou函數
    # Input : (N, ln)
    # Output : (N, S)
    class Rou(nn.Module):
        def __init__(self, ln, s):
            ...
        def forward(self, X):
            ...
    
    # 實現Hw函數
    # Input : (N, 2 * ln) 
    # 每一行都是一個節點特徵向量和該節點的某一個鄰接向量concat
    # 獲得的向量
    # Input : (N, s)
    # 對應中心節點的狀態向量
    # Input : (N, )
    # 對應中心節點的度的向量
    # Output : (N, s)
    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):
            ...
    
    # 實現GNN模型
    class OriLinearGNN(nn.Module):
        def __init__(self, node_num, feat_dim, stat_dim, T):
            ...
        # Input : 
        # X_Node : (N, )
        # X_Neis : (N, )
        # H : (N, s)
        # dg_list: (N, )
        def forward(self, X_Node, X_Neis, dg_list):
            ...
            for t in range(self.T):
                # (V, s) -> (N, s)
                H = torch.index_select(self.node_states, 0, X_Node)
                # (N, s) -> (N, s)
                H = self.Hw(X, H, dg_list)
                # (N, s) -> (V, s)
                self.node_states = self.Aggr(H, X_Node)
    # print(H[1])
            ...

    能夠看出,在模型訓練階段,每次forward,都會直接循環計算T次 f w f_w 函數計算不動點,而後再計算output。

  • 模型訓練部分按照常規的分類模型進行訓練,採用Adam優化器,學習率保持爲0.01,權重衰減爲0.01,使用交叉熵做爲損失函數,模型訓練部分代碼以下

    # 用於計算accuracy
    def CalAccuracy(output, label):
        ...
    
    # 開始訓練模型
    def train(node_list, edge_list, label_list, T, ndict_path="./node_dict.json"):
        # 生成node-index字典
        ...
    
        # 如今須要生成兩個向量
        # 第一個向量相似於
        # [0, 0, 0, 1, 1, ..., 18, 18]
        # 其中的值表示節點的索引,連續相同索引的個數爲該節點的度
        # 第二個向量相似於
        # [1, 2, 4, 1, 4, ..., 11, 13]
        # 與第一個向量一一對應,表示第一個向量節點的鄰居節點
    
        # 首先統計獲得節點的度
        ...
        
        # 而後生成兩個向量
        ...
        # 生成度向量
        ...
        # 準備訓練集和測試集
        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) # (V, 3)
            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} 左右。

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} 其中

  • 對於圖$ \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 ^ k = h , ϕ k , k = 1 , 2 , n \hat{h}_{k}=\left\langle h, \phi_{k}\right\rangle, k=1,2 \ldots, n 按照矩陣形式就是 h ^ = Φ T h \hat{\boldsymbol{h}}=\mathbf{\Phi}^{T} \boldsymbol{h}

  • 對二者的傅里葉變換向量 f ^ R N × 1 \hat{f} \in \mathbb{R}^{N \times 1} h ^ R N × 1 \hat{h} \in \mathbb{R}^{N \times 1} 求element-wise乘積,等價於將 h \boldsymbol{h} 組織成對角矩陣,即 diag [ h ^ ( λ k ) ] R N × N \operatorname{diag}\left[\hat{h}\left(\lambda_{k}\right)\right] \in \mathbb{R}^{N \times N} ,而後再求 diag [ h ^ ( λ k ) ] \operatorname{diag}\left[\hat{h}\left(\lambda_{k}\right)\right] f \boldsymbol{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] ,由此,能夠直接將其變爲卷積核 diag [ θ 1 , , θ n ] \operatorname{diag}\left[\theta_{1}, \ldots, \theta_{n}\right] ,而不須要再將卷積核進行傅里葉變換,由此,至關於直接將變換後的參量進行學習。

第一代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)
其中, x \boldsymbol{x} 就是graph上對應每一個節點的feature構成的向量, x = ( x 1 , x 2 , , x n ) x=\left(x_{1}, x_{2}, \ldots, x_{n}\right) ,這裏暫時對每一個節點都使用標量,而後通過激活以後,獲得輸出 y output \boldsymbol{y}_{\text {output}} ,以後傳入下一層。

一些缺點:

  • 須要對拉普拉斯矩陣進行譜分解來求 Φ \mathbf{\Phi} ,在graph很大的時候複雜度很高。另外,還須要計算矩陣乘積,複雜度爲 O ( n 2 ) O(n^2)
  • 卷積核參數爲 n n ,當graph很大的時候, n n 會很大。
  • 卷積核的spatial localization很差。

第二代GCN

圖傅里葉變換是關於特徵值(至關於普通傅里葉變換的頻率)的函數,也就是 F ( λ 1 ) , , F ( λ n ) F\left(\lambda_{1}\right), \ldots, F\left(\lambda_{n}\right) ,即 F ( Λ ) F(\mathbf{\Lambda}) ,所以,將卷積核 g θ \boldsymbol{g}_{\theta} 寫成 g θ ( Λ ) \boldsymbol{g}_{\theta}(\Lambda) ,而後,將 g θ ( Λ ) \boldsymbol{g}_{\theta}(\Lambda) 定義爲以下k階多項式
g θ ( Λ ) k = 0 K θ k Λ k g_{\theta^{\prime}}(\mathbf{\Lambda}) \approx \sum_{k=0}^{K} \theta_{k}^{\prime} \mathbf{\Lambda}^{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}
能夠看出,這一代的GCN不須要作特徵分解了,能夠直接對Laplacian矩陣作變換,經過事先將Laplacian矩陣求出來,以及 L k \boldsymbol{L}^{k} 求出來,前向傳播的時候,就能夠直接使用,複雜度爲 O ( K n 2 ) O(Kn^2)

對於每一次Laplacian矩陣 L \boldsymbol{L} x \mathbf{x} 相乘,對於節點 n n ,至關於從鄰居節點 n e [ n ] ne[n] 傳遞一次信息給節點 n n ,因爲連續乘以了 k k 次Laplacian矩陣,那麼至關於n節點的k-hop以內的節點可以傳遞信息給 n n 所以,實際上只利用了節點的K-Localized信息

另外,可使用切比雪夫展開式來近似 L k \boldsymbol{L}^{k} 任何k次多項式均可以使用切比雪夫展開式來近似,由此,引入切比雪夫多項式的 K K 階截斷得到 L k \boldsymbol{L}^{k} 近似,從而得到對 g θ ( Λ ) g_{\theta}(\mathbf{\Lambda}) 的近似
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}})
其中, Λ ~ = 2 λ max Λ I n \tilde{\mathbf{\Lambda}}=\frac{2}{\lambda_{\max }} \mathbf{\Lambda}-\boldsymbol{I}_{n} θ R K \boldsymbol{\theta}^{\prime} \in \mathbb{R}^{K} 爲切比雪夫向量, θ k \theta_{k}^{\prime} 爲第 k k 個份量,切比雪夫多項式 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 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} 其中, L ~ = 2 λ max L I n \tilde{\boldsymbol{L}}=\frac{2}{\lambda_{\max }} \boldsymbol{L}-\boldsymbol{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)

第三代GCN

這一代GCN直接取切比雪夫多項式中 K = 1 K=1 ,此時模型是1階近似

K = 1 K=1 λ max = 2 \lambda_{\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}
其中,歸一化拉普拉斯矩陣 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} 爲了進一步簡化,令 θ 0 = θ 1 \theta_{0}^{\prime}=-\theta_{1}^{\prime} ,此時只含有一個參數 θ \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
因爲 I n + D 1 / 2 W D 1 / 2 \boldsymbol{I}_{n}+\boldsymbol{D}^{-1 / 2} \boldsymbol{W} \boldsymbol{D}^{-1 / 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}
其中, W ~ = W + I n \tilde{\boldsymbol{W}}=\boldsymbol{W}+\boldsymbol{I}_{n} D ~ i j = Σ j W ~ i j \tilde{D}_{i j}=\Sigma_{j} \tilde{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}}
若是推廣到多通道,至關於每個節點的信息是向量
x R N × 1 X R N × C x \in \mathbb{R}^{N \times 1} \rightarrow X \in \mathbb{R}^{N \times C}
其中, N N 是節點數量 C C 是通道數,或者稱做表示節點的信息維度數 X \mathbf{X} 是節點的特徵矩陣

相應的卷積核參數變化
θ R Θ R C × F \theta \in \mathbb{R} \rightarrow \Theta \in \mathbb{R}^{C \times 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}}
上述操做能夠疊加多層,對上述輸出激活一下,就能夠做爲下一層節點的特徵矩陣

這一代GCN特色:

  • K = 1 K=1 ,至關於直接取鄰域信息,相似於 3 × 3 3\times{3} 的卷積核。
  • 因爲卷積核寬度減少,能夠經過增長卷積層數來擴大感覺野,從而加強網絡的表達能力。
  • 增長了參數約束,好比 λ max 2 \lambda_{\max } \approx 2 ,引入歸一化操做。

論文模型

論文采用兩層的GCN,用來在graph上進行半監督的節點分類任務,鄰接矩陣爲 A A ,首先計算出 A ^ = D ~ 1 2 A ~ D ~ 1 2 \hat{A}=\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} ,由此,前向網絡模型形式以下
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)
其中, W ( 0 ) R C × H W^{(0)} \in \mathbb{R}^{C \times H} 爲輸入層到隱藏層的權重矩陣,隱藏層的特徵維度爲 H H W ( 1 ) R H × F W^{(1)} \in \mathbb{R}^{H \times 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) Z = i exp ( x i ) \mathcal{Z}=\sum_{i} \exp \left(x_{i}\right) ,至關於對每一列作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}
其中, Y L \mathcal{Y}_{L} 爲帶有標籤的節點集合。

在這裏插入圖片描述
上圖中左圖爲GCN圖示,輸入爲 C C 個通道,輸出爲 F F 個通道, Y 1 Y_1 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\}
  • graph定義爲 G t = ( V t , E t ) G_{t}=\left(V_{t}, E_{t}\right) ,其中, V t V_t 爲節點集合, E t E_t 爲邊集合
  • 全部節點的特徵矩陣定義爲 X t X_t ,大小爲 N t × F N_t\times{F} ,其中, N t N_t 爲圖 G t G_t 的節點個數, F F 爲節點特徵維度
  • 邊信息 E t E_t 定義爲 N t × N t N_t\times{}N_t 的鄰接矩陣 A t A_t ,由此能夠計算出節點度(degree)歸一化的轉移機率矩陣 P t P_t ,表示從 i i 節點轉移到 j j 節點的機率。

對於graph來講沒有任何限制,graph能夠是帶權重的或不帶權重的,有向的或無向的。

模型的目標爲預測 Y Y ,也就是預測每個圖的節點標籤,或者邊的標籤,或者每個圖的標籤,在每一種狀況中,模型輸入部分帶有標籤的數據集合,而後預測剩下的數據的標籤

DCNN模型輸入圖 G \mathcal{G} ,返回硬分類預測值 Y Y 或者條件分佈機率 P ( Y X ) \mathbb{P}(Y|X) 。該模型將每個預測的目標對象(節點、邊或圖)轉化爲一個diffusion-convolutional representation,大小爲 H × F H\times{}F H H 表示擴散的hops。所以,對於節點分類任務,圖 t t 的confusion-convolutional representation爲大小爲 N t × H × F N_t\times{H}\times{F} 的張量,表示爲 Z t Z_t ,對於圖分類任務,張量 Z t Z_t 爲大小爲 H × F H\times{F} 的矩陣,對於邊分類任務,張量 Z t Z_t 爲大小爲 M t × H × F M_t\times{H}\times{F} 的矩陣。示意圖以下

在這裏插入圖片描述
對於節點分類任務,假設 P t P_t^* P t P_t 的power series,大小爲 N t × H × N t N_t\times{H}\times{N_t} ,那麼對於圖 t t 的節點 i i ,第 j j 個hop,第 k k 維特徵值 Z t i j k Z_{tijk} 計算公式爲
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 = f ( W c P t X t ) Z_{t}=f\left(W^{c} \odot P_{t}^{*} X_{t}\right)
其中 \odot 表示element-wise multiplication,因爲模型只考慮 H H 跳的參數,即參數量爲 O ( H × F ) O(H\times{F}) 使得diffusion-convolutional representation不受輸入大小的限制

在計算出 Z Z 以後,過一層全鏈接獲得輸出 Y Y ,使用 Y ^ \hat{Y} 表示硬分類預測結果,使用 P ( Y X ) \mathbb{P}(Y|X) 表示預測機率,計算方式以下
Y ^ = arg max ( f ( W d Z ) ) \hat{Y}=\arg \max \left(f\left(W^{d} \odot Z\right)\right)

P ( Y X ) = softmax ( f ( W d Z ) ) \mathbb{P}(Y | X)=\operatorname{softmax}\left(f\left(W^{d} \odot Z\right)\right)

對於圖分類任務,直接採用全部節點表示的均值做爲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)
其中, 1 N t 1_{N_t} 是全爲1的 N t × 1 N_t\times{1} 的向量。

對於邊分類任務,經過將每一條邊轉化爲一個節點來進行訓練和預測,這個節點與原來的邊對應的首尾節點相連,轉化後的圖的鄰接矩陣 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' 來計算 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) 的空間複雜度。
  • 長距離信息傳播不足:模型對於局部的信息獲取較好,可是遠距離的信息傳播不足。

4. Tree-LSTM

序列型的LSTM模型擴展到樹型的LSTM模型,簡稱Tree-LSTM,並根據孩子節點是否有序,論文提出了兩個模型變體,Child-Sum Tree-LSTM模型和N-ary Tree-LSTM模型。和序列型的LSTM模型的主要不一樣點在於,序列型的LSTM從前一時刻獲取隱藏狀態 h t h_t ,而樹型的LSTM從其全部的孩子節點獲取隱藏狀態。

模型詳解

Tree-LSTM模型對於每個孩子節點都會產生一個「遺忘門」 f j k f_{jk} ,這個使得模型可以從全部的孩子節點選擇性地獲取信息和結合信息

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} 其中, C ( j ) C(j) 表示 j j 節點的鄰居節點的個數, h k h_k 表示節點 k k 的隱藏狀態, i j i_j 表示節點 j j 的」輸入門「, f j k f_{jk} 表示節點 j j 的鄰居節點 k k 的「遺忘門「, o j o_j 表示節點 j j 的」輸出門「。

這裏的關鍵點在於第三個公式的 f j k f_{jk} ,這個模型對節點 j j 的每一個鄰居節點 k k 都計算了對應的」遺忘門「向量,而後在第六行中計算 c j c_j 時對鄰居節點的信息進行」遺忘「和組合。

因爲該模型是對全部的孩子節點求和,因此這個模型對於節點順序不敏感的,適合於孩子節點無序的狀況。

N-ary Tree-LSTMs

假如一個樹的最大分支數爲 N N (即孩子節點最多爲 N N 個),並且孩子節點是有序的,對於節點 j j ,對於該節點的第 k k 個孩子節點的隱藏狀態和記憶單元分別用 h j k h_{jk} c j k c_{jk} 表示。模型的方程以下
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} 值得注意的是該模型爲每一個孩子節點都單獨地設置了參數 U l U_{l}

模型訓練

分類任務

分類任務定義爲在類別集 Y \mathcal{Y} 中預測出正確的標籤 y ^ \hat{y} ,對於每個節點 j j ,使用一個softmax分類器來預測節點標籤 y ^ j \hat{y}_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} 損失函數使用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} 其中, m m 是帶有標籤的節點數量, λ \lambda L 2 L2 是正則化超參。

語義相關性任務

該任務給定一個句子對(sentence pair),模型須要預測出一個範圍在 [ 1 , K ] [1,K] 之間的實數值,這個值越高,表示類似度越高。

論文首先對每個句子產生一個representation,兩個句子的表示分別用 h L h_L h R h_R 表示,獲得這兩個representation以後,從distance和angle兩個方面考慮,使用神經網絡來獲得 ( 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}

相關文章
相關標籤/搜索