1. 程式人生 > 實用技巧 >GAT與GCN程式碼的關聯

GAT與GCN程式碼的關聯

GCN
在之前的文章38.圖神經網路 GNN 之圖卷積網路 (GCN)介紹了圖卷積神經網路 GCN,不熟悉的童鞋可以參考一下。GNN 模型可以分為頻譜域 (spectral domain) 和空間域 (spatial domain) 兩大類:spectral 的方法通常利用了拉普拉斯矩陣,藉助圖譜的方式進行卷積操作;spatial 的方法通常使用更直接的方式聚合鄰居節點的資訊。

之前介紹的該 GCN 模型是基於頻譜域 (spectral domain) 的,利用了拉普拉斯矩陣,總的來說 GCN 存在下面的缺點:

GCN 假設圖是無向的,因為利用了對稱的拉普拉斯矩陣 (只有鄰接矩陣 A 是對稱的,拉普拉斯矩陣才可以正交分解),不能直接用於有向圖。GCN 的作者為了處理有向圖,需要對 Graph 結構進行調整,要把有向邊劃分成兩個節點放入 Graph 中。例如 e1、e2 為兩個節點,r 為 e1,e2 的有向關係,則需要把 r 劃分為兩個關係節點 r1 和 r2 放入圖中。連線 (e1, r1)、(e2, r2)。

GCN 不能處理動態圖,GCN 在訓練時依賴於具體的圖結構,測試的時候也要在相同的圖上進行。因此只能處理 transductive 任務,不能處理 inductive 任務。transductive 指訓練和測試的時候基於相同的圖結構,例如在一個社交網路上,知道一部分人的類別,預測另一部分人的類別。inductive 指訓練和測試使用不同的圖結構,例如在一個社交網路上訓練,在另一個社交網路上預測。

GCN 不能為每個鄰居分配不同的權重,GCN 在卷積時對所有鄰居節點均一視同仁,不能根據節點重要性分配不同的權重。

2018 年圖注意力網路 GAT 被提出,用於解決 GCN 的上述問題,論文是《GRAPH ATTENTION NETWORKS》。GAT 採用了 Attention 機制,可以為不同節點分配不同權重,訓練時依賴於成對的相鄰節點,而不依賴具體的網路結構,可以用於 inductive 任務。

GAT
假設 Graph 包含 N 個節點,每個節點的特徵向量為 hi,維度是 F,如下所示:
在這裡插入圖片描述

節點特徵向量 h
對節點特徵向量 h 進行線性變換,可以得到新的特徵向量 h’i,維度是 F’,如下所示,W 為線性變換的矩陣:
在這裡插入圖片描述

節點特徵向量線性變換 h’
節點 j 是節點 i 的鄰居,則可以使用 Attention 機制計算節點 j 對於節點 i 的重要性,即 Attention Score:
在這裡插入圖片描述

Attention Score
GAT 具體的 Attention 做法如下,把節點 i、j 的特徵向量 h’i、h’j 拼接在一起,然後和一個 2F’ 維的向量 a 計算內積。啟用函式採用 LeakyReLU,公式如下:

在這裡插入圖片描述

GAT Attention 計算方式
Attention 如下圖所示:
在這裡插入圖片描述

GAT Attention 示意圖
經過 Attention 之後節點 i 的特徵向量如下:
在這裡插入圖片描述

Attention 後的特徵向量
GAT 也可以採用 Multi-Head Attention,即多個 Attention,如下圖所示:
在這裡插入圖片描述

GAT Multi-Head Attention
如果有 K 個 Attention,則需要把 K 個 Attention 生成的向量拼接在一起,如下:
在這裡插入圖片描述

K 個 Attention 輸出結果拼接
但是如果是最後一層,則 K 個 Attention 的輸出不進行拼接,而是求平均。
在這裡插入圖片描述

最後一層 Attention 輸出結果
取出節點在 GAT 第一層隱藏層向量,用 T-SNE 演算法進行降維視覺化,得到的結果如下,可以看到不同類別的節點可以比較好的區分。
GAT 節點向量降維視覺化
在這裡插入圖片描述
程式碼聯絡與區別:
在二者的程式碼之中,我們可以發現,兩者的程式碼使用資料處理時一樣的,即都是用的時utils,且都使用了其中的拉普拉斯矩陣,但是對於這個矩陣的利用是不同的,對於GCN,拉普拉斯矩陣是要參與實際運算的,即在這裡插入圖片描述
這裡的Ahat就是最後得到的拉普拉斯矩陣,而GAT的程式碼中雖然也使用了這個拉普拉斯矩陣,但是實際只用來判斷二節點之間是否相連,並未用它參與計算。