Graph attention works
GCN
CNN處理的圖像或者視頻數據中像素點(pixel)是排列成成很整齊的矩陣,論文提到
Euclidean Structure。
非Euclidean Structure的網絡結構,也是圖論抽象意義的拓撲圖。
Graph Convolutional Network中的Graph是指數學(圖論)中的用頂點和邊建立相應關係的拓撲圖。
提取拓撲圖空間特徵的兩種方式:
(1) vertex domain
(2) spectral domain
這種思路就是希望藉助圖譜的理論來實現拓撲圖上的卷積操作。
圖譜理論簡單的概括就是藉助於圖的拉普拉斯矩陣的特徵值和特徵向量來研究圖的性質。
爲什麼可以藉助圖譜理論進行GCN? 涉及大量數學推導。
拉普拉斯變換後的矩陣是正定對稱矩陣,可以進行特徵分解(譜分解)。
對於圖$ G=(V,E) L=D-A $ ,其中 $L $是Laplacian 矩陣
是頂點的度矩陣(對角矩陣),對角線上元素依次爲各個頂點的度,是圖的鄰接矩陣。
常用的拉普拉斯矩陣實際有三種:
No.1 $ L=D-A $ 定義的Laplacian 矩陣更專業的名稱叫Combinatorial Laplacian
No.2 $ L{sys}=D{-1/2}LD^{-1/2} $ 定義的叫Symmetric normalized Laplacian (GCN)
No.3 $ L{rw}=D{-1}L$ 定義的叫Random walk normalized Laplacian
首次將深度學習裏卷積操作引入圖數據裏的方法GCN是Thomas Kpif於2017年在論文Semi-supervised classification with graph convolutional networks提出的,在他的博客裏對模型解釋非常清楚。
網絡的結構很清晰:
Graph attention works
Graph attention networks在基於GCN模型將深度學習處理圖模型的基礎上引入attention思想去計算每個節點的鄰居節點對它的權重,從而達到從局部信息可以獲取到整個網絡整體信息卻無需提前知道整個網絡的結構,同時通過堆疊這些隱藏自注意層能夠獲取臨近點的特徵,從而避免大量矩陣運算,計算高效。
Gat Architecture
features輸入
輸入是一組頂點特徵, 其中是頂點數, 是每個頂點的特徵數。這個層會生成一組新的頂點特徵,${\mathbf{h}’} = { \vec{h}’_1, \vec{h}’_2, …, \vec{h}’_N}, \vec{h}’_i \in \mathbb{R}^{F’} $作爲輸出。
計算相互關注
爲了在將輸入特徵變換到高維特徵時獲得充足的表現力,至少需要一個可學習的線性變換。爲了到達這個目的,每個頂點都會使用一個共享參數的線性變換,參數爲,然後在每個頂點上做一個 self-attention ——一個共享的attention機制 :
表示頂點 j 的特徵對頂點 i 的重要性(importance)。在一般的公式中,模型可以使每個頂點都注意其他的每個頂點,扔掉所有的結構信息。作者使用 mask attention 使得圖結構可以注入到注意力機制中——我們只對頂點 相鄰的點計算attention coefficient。爲了讓係數在不同的頂點都可比,我們對所有的 j 使用 softmax 進行了歸一化:
注意力機制 a 是一個單層的前向傳播網絡,參數爲權重向量 ,使用LeakyReLU作爲非線性層(斜率α=0.2)。整個合併起來,注意力機制計算出的分數(如圖1左側所示)表示爲:
得到歸一化的分數後,使用歸一化的分數計算對應特徵的線性組合,作爲每個頂點最後的輸出特徵(最後可以加一個非線性層,σ)
爲了穩定 self-attention 的學習過程,作者使用multi-head attention 來擴展注意力機制。特別地,K 個獨立的 attention 機制執行上面 這樣的變換,然後他們的特徵連(concatednated)在一起,就可以得到如下的輸出:
其中 ∥ 表示concatenation,是通過第 k 個注意力機制 () 計算出的歸一化的注意力分數,Wk 是對應的輸入線性變換的權重矩陣。注意,在這裏,最後的返回輸出 h′,每個頂點都會有 KF′ 個特徵(不是 F′ )。特別地,如果網絡的最後一層使用 multi-head attention,concatenation 就不再可行了,論文使用 averaging,並且延遲使用最後的非線性層(分類問題通常是 softmax 或 sigmoid ):
實驗數據
Transductive learning
在cora數據集上使用一個兩層的GAT模型,第一層包含K=8個attention head,計算得到F′=8個特徵(總共64個特徵),之後接一個指數線性單元(ELU)作爲非線性激活函數,第二層用作分類:一個單個的attention head計算C個特徵(其中C是類別的數量),之後用softmax激活。處理小訓練集時,在模型上加正則化。
對比結果
代碼
1*1 卷積的作用?
在吳恩達卷積神經網絡課程2.5節提到對輸入數據進行11卷積操作是一個很有影響力的操作,常用於三維的輸入數據,通過設定11卷積核的個數改變數據第三維(通道數量)的大小。當然你也可以保持通道數的不變,那麼1*1卷積就相當於給輸入添加一層非線性的函數變換,從而讓網絡學習到更復雜的表示。
同樣的,輸入數據是二維的時候,1* 1
的一維卷積作用也是類似的。
Tensorflow裏函數爲tf.layers.conv1d
,tf.layers.conv2d
。
conv1d
的參數如下圖所示:
filters:過濾器個數,控制輸出的大小。
kernel_size:卷積核大小。
self-attention
論文裏關於GAT模型的計算任意兩點注意力的係數實現如下,即上面的公式(3):
關於tf.layers.conv1d
的函數解析 。
這個寫法和論文的公式(3)貌似不一樣,實際是簡單的等價,這裏聚合是把n*m
的實體向量h
通過一維卷積降n*1
成1維後,然後利用加分的廣播機制,計算任意兩點的信息,作者的解釋:
當我們這一層神經網絡是單層的, 可以分解成 , 其中 與是兩個獨立參數。
我們就可以藉助上面講的卷積核大小爲1的一維卷積conv1d
去實現這個轉換,代碼裏f_1
就是它的表示,但這裏代碼先實現是計算任意兩點的相關係數,在加上bias_mat
後即實現論文裏說採用mask attention
機制使得只有相鄰兩點的相關度係數會被計算。
bias_mat
本質是一個將整個圖的鄰接矩陣轉換後得到的二維矩陣,如果這i,j兩點之間沒有邊,就被賦值無窮小,如果有邊賦值爲0,這樣加上計算任意兩點相關係數結果,就實現只計算圖上相鄰兩點的相關性係數,這方法被論文稱爲 mask attention
。