Graph Attention Network (GAT) 圖注意力網絡 論文詳解 ICLR2018


Graph Attention Network (GAT) 圖注意力網絡 論文詳解 ICLR2018

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接: https://blog.csdn.net/yyl424525/article/details/100920134

 


論文題目:Graph Attention Network (GAT)

 

時間:2018

期刊:ICLR

論文鏈接:https://arxiv.org/abs/1710.10903

Github鏈接:https://github.com/Diego999/pyGAT

1 相關介紹

graph上的deep learning方法無外乎就是希望學習節點特征以及節點在圖中的結構特征。

GCN的局限性

  • 無法完成inductive任務,即處理動態圖問題。inductive任務是指:訓練階段與測試階段需要處理的graph不同。通常是訓練階段只是在子圖(subgraph)上進行,測試階段需要處理未知的頂點。(unseen node)
  • 處理有向圖的瓶頸,不容易實現分配不同的學習權重給不同的neighbor
  • 對於一個圖結構訓練好的模型,不能運用於另一個圖結構(所以此文稱自己為半監督的方法)

本文貢獻(創新點)

  • 引入masked self-attentional layers 來改進前面圖卷積的缺點
  • 對不同的相鄰節點分配相應的權重,既不需要矩陣運算,也不需要事先知道圖結構
  • 四個數據集上達到state-of-the-art的准確率Cora、Citeseer、Pubmed、protein interaction

attention 引入目的

  • 為每個節點分配不同權重
  • 關注那些作用比較大的節點,而忽視一些作用較小的節點
  • 在處理局部信息的時候同時能夠關注整體的信息,不是用來給參與計算的各個節點進行加權的,而是表示一個全局的信息並參與計算

相關工作

對待圖結構的數據有兩種方法,譜方法和非譜方法

譜方法 spectral approaches

例如:GCN
Semi-Supervised Classification with Graph Convolutional Networks,ICLR 2017這篇文章中的方法

解析 :Semi-Supervised Classification with Graph Convolutional Networks用圖卷積進行半監督分類

非譜方法 non-spectral approaches (基於空間的方法)

例如:GraphSAGE
William L Hamilton, Rex Ying, and Jure Leskovec. Inductive representation learning on largegraphs. Neural Information Processing Systems (NIPS), 2017.

解析:GraphSAGE:Inductive Representation Learning on Large Graphs

這種方法是將相鄰節點設置為固定的長度,然后進行specific aggregator,這種方法在幾個大的benchmarks上取得了非常好的效果。

注意力機制 self-attention

優點:可以處理任意大小輸入的問題,並且關注最具有影響能力的輸入。

注意力機制再RNN與CNN之中,都取得了不錯的效果,並且可以達到state-of-the-art的性能。

Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, and Illia Polosukhin. Attention is all you need. arXiv preprint arXiv:1706.03762, 2017

2 GAT

Graph Attentional Layer

和所有的attention mechanism一樣,GAT的計算也分為兩步:計算注意力系數(attention coefficient)和加權求和(aggregate)

input
單個 graph attentional layer的輸入是一個節點特征向量集合

Unexpected text node: '  'Unexpected text node: '  'h={h1,h2,,hN},hiRF

其中

  • NNN表示節點的數目
  • FFF表示每個節點的特征的數目

output
並生成一個新的節點特征集合

Unexpected text node: '  'Unexpected text node: '  'h={h1,h2,,hN},hiRF
其中FFF和 FF'F′具有不同的維度。

為了得到相應的輸入與輸出的轉換,需要根據輸入的feature至少一次線性變換得到輸出的feature,所以我們需要對所有節點訓練一個權值矩陣:WRF×FW\in R^{F^{'}\times F}WRF×F,這個權值矩陣就是輸入與輸出的F個feature與輸出的F’個feature之間的關系:

hi⃗ =Whi⃗ \vec{h_i^{'}}=\mathbf{W}\vec{h_i}hi=Whi

為了獲得足夠的表達能力以將輸入特征變換為更高級別的特征,需要至少一個可學習的線性變換。為此,作為初始步驟,一個共享的線性變換參數矩陣WRF×F\mathbf{W}\in R^{F^{'}\times F}WRF×F被應用於每一個節點。

計算注意力系數(attention coefficient)

針對每個節點執行 self-attention機制,機制aaa為

a:RF×RFRa:R^{F^{'}}\times R^{F^{'}}\to Ra:RF×RFR

計算注意力互相關系數attention coefficients:

eij=a(Whi⃗ ,Whj⃗ )(1)\tag{1} e_{ij}=a(\mathbf{W}\vec{h_i}, \mathbf{W}\vec{h_j})eij=a(Whi,Whj)(1)
其中

  • 注意力系數eije_{ij}eij表示的節點jjj對於節點iii的重要性
  • 向量h就是 feature向量
  • aaa是一個RF×RFRR^{F^{'}}\times R^{F^{'}}\to RRF×RFR的映射
  • WRF×F\mathbf{W}\in R^{F^{'}\times F}WRF×F,使用W\mathbf{W}W將每個特征轉換為可用的表達性更強的特征

論文里說,self-attention是一種Global graph attention,會將注意力分配到圖中所有的節點上,這種做法顯然會丟失結構信息。通過self-attention注意力機制可以計算任意兩個樣本的關系,使一個樣本用其他所有樣本來表示,但是第一,基於空間相似假設,一個樣本與一定范圍內的樣本關系較密切,第二,樣本較多的時候,計算量非常大。為了解決這一問題,作者使用了一種 masked attention 的方法,對於一個樣本來說只利用鄰域內的樣本計算注意力系數和新的表示,即僅將注意力分配到節點的鄰居節點集上。

為了使得注意力系數更容易計算和便於比較,引入了softmax對所有的iii的相鄰節點jjj進行正則化:

αij=softmaxj(eij)=exp(eij)kNiexp(eik)(2)\tag{2} \alpha_{ij} = \mathrm{softmax}_j (e_{ij}) = \frac{\exp(e_{ij})}{\sum_{k \in \mathcal{N}_i} \exp(e_{ik})}αij=softmaxj(eij)=kNiexp(eik)exp(eij)(2)
其中

  • Ni\mathcal{N_i}Ni表示節點iii的鄰居節點集合
  • 這個系數α\alphaα就是每次卷積時,用來進行加權求和的系數

實驗中,注意力機制aaa是一個單層的前饋神經網絡,通過權值向量來確定a⃗ R2F\vec{\text{a}} \in \mathbb{R}^{2F'}aR2F′,並且加入了 LeakyRelu的非線性激活,這里小於零斜率為0.2。(回顧下幾種Relu函數,relu:小於0就是0,大於零斜率為1;LRelu:小於零斜率固定一個值,大於零斜率為1;PRelu:小於零斜率可變,大於零斜率為1;還有CRelu,Elu,SELU)。

αij=exp(LeakyReLU(a⃗ T[Wh⃗ iWh⃗ j]))kNiexp(LeakyReLU(a⃗ T[Wh⃗ iWh⃗ k]))(3)\tag{3} \alpha_{ij} = \frac{ \exp{ ( \mathrm{LeakyReLU} ( \vec{\text{a}}^T [\mathbf{W} \vec{h}_i \Vert \mathbf{W} \vec{h}_j ] ))}}{\sum_{k \in \mathcal{N_i}} \exp{(\mathrm{LeakyReLU}(\vec{\text{a}}^T [\mathbf{W} \vec{h}_i \Vert \mathbf{W} \vec{h}_k]))}}αij=kNiexp(LeakyReLU(aT[WhiWhk]))exp(LeakyReLU(aT[WhiWhj]))(3)
其中

  • ||表示concatenation操作(串聯)

下圖就是表示Wh⃗ i\mathbf{W} \vec{h}_iWhiWh⃗ j\mathbf{W} \vec{h}_jWhj經過串聯以后,再和權值向量a⃗ R2F\vec{\text{a}} \in \mathbb{R}^{2F'}aR2F′相乘后,最后進行一個softmax歸一化處理后的示意圖。

這部分代碼為

    def forward(self, x):
        # [B_batch,N_nodes,C_channels]
        B, N, C = x.size()
        # h = torch.bmm(x, self.W.expand(B, self.in_features, self.out_features))  # [B,N,C]
        h = torch.matmul(x, self.W)  # [B,N,C]
        a_input = torch.cat([h.repeat(1, 1, N).view(B, N * N, C), h.repeat(1, N, 1)], dim=2).view(B, N, N,
                                                                                                  2 * self.out_features)  # [B,N,N,2C]
        # temp = self.a.expand(B, self.out_features * 2, 1)
        # temp2 = torch.matmul(a_input, self.a)
        attention = self.leakyrelu(torch.matmul(a_input, self.a).squeeze(3))  # [B,N,N]
 
        attention = F.softmax(attention, dim=2)  # [B,N,N]
        attention = F.dropout(attention, self.dropout, training=self.training)
        h_prime = torch.bmm(attention, h)  # [B,N,N]*[B,N,C]-> [B,N,C]
        out = F.elu(h_prime + self.beta * h)
        return out
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

加權求和(aggregate)

得到歸一化的注意力系數后,使用歸一化的值計算對應特征的線性組合,作為每個頂點最后的輸出特征(最后可以加一個非線性層,σ\sigmaσ):

h⃗ i=σ(jNiαijWh⃗ j)(4)\tag{4} \vec{h}'_i = \sigma(\sum_{j \in \mathcal{N}_i} \alpha_{ij} \mathbf{W} \vec{h}_j)hi=σ(jNiαijWhj)(4)
h⃗ i\vec{h}'_ihi就是GAT輸出的節點iii 融合了鄰域信息的新特征

multi-head attention機制

為了使self-attention 的學習過程更穩定,發現使用 multi-head attention來擴展注意力機制是很有效的。

使用K個獨立的 attention 機制執行公式式4這樣的變換,然后他們的特征連(concatednated)在一起,就可以得到如下的輸出:

h⃗ i=Kk=1σ(jNiαkijWkh⃗ j)(5)\tag{5} \vec{h}'_i = \Vert^{K}_{k=1} \sigma(\sum_{j \in \mathcal{N}_i} \alpha^k_{ij} \mathbf{W}^k \vec{h}_j)hi=k=1Kσ(jNiαijkWkhj)(5)
其中

  • 最后的返回輸出hh'h′,每個頂點都會有KFKF'KF′維的特征(不是FF'F′)

下圖表示K=3K=3K=3時的multi-head attention機制示意圖。例如此圖,節點1在鄰域中具有多端注意機制,不同的箭頭樣式表示獨立的注意力計算,通過連接或平均每個head獲取h⃗ 1\vec{h}_1h1

對於最后一個卷積層,如果還是使用multi-head attention機制,那么就不采取連接的方式合並不同的attention機制的結果了,而是采用求平均的方式進行處理,即

h⃗ i=σ(1KKk=1jNiαkijWkh⃗ j)(6)\tag{6} \vec{h}'_i = \sigma(\frac{1}{K} \sum^K_{k=1} \sum_{j \in \mathcal{N}_i} \alpha^k_{ij} \mathbf{W}^k \vec{h}_j)hi=σ(K1k=1KjNiαijkWkhj)(6)

和當前工作的對比

  • 計算高效:self-attention層的操作可以在所有的邊上並行,輸出特征的計算可以在所有頂點上並行。沒有耗時的特征值分解。單個的GAT計算FF'F′個特征的時間復雜度可以壓縮至O(VFF+EF)O(|V|FF'+|E|F')O(VFF+EF),F是輸入的特征數,|V|和|E|是圖中頂點數和邊數。復雜度與Kipf & Welling, 2017的GCN差不多。
    盡管 multi-head 注意力將存儲和參數個數變為了K倍,但是單個head的計算完全獨立且可以並行化。
  • 魯棒性更強:和GCN不同,本文的模型可以對同一個 neighborhood的node分配不同的重要性,使得模型的capacity大增。
  • 注意力機制以一種共享的策略應用在圖的所有的邊上,因此它並不需要在之前就需要得到整個圖結構或是所有的頂點的特征(很多之前的方法的缺陷)。因此GAT 也是一種局部模型。也就是說,在使用 GAT 時,無需訪問整個圖,而只需要訪問所關注節點的鄰節點即可,解決了之前提出的基於譜的方法的問題。因此這個方法有幾個影響:
    • 圖不需要是無向的,可以處理有向圖(若jij\to iji不存在,僅需忽略αij\alpha_{ij}αij即可)
    • 可以直接應用到 inductive learning:包括在訓練過程中在完全未見過的圖上評估模型的任務上。
  • 2017年Hamilton提出的歸納學習方法(GraphSAGE)為每一個node都抽取一個固定尺寸的neighborhood,為了計算的時候footprint是一致的(指的應該是計算的時候處理neighborhood的模式是固定的,不好改變,因此每次都抽樣出固定數量的neighbor參與計算),這樣,在計算的時候就不是所有的neighbor都能參與其中。此外,Hamilton的這個模型在使用一些基於LSTM的方法的時候能得到最好的結果,這樣就是假設了每個node的neighborhood的node一直存在着一個順序,使得這些node成為一個序列。但是本文提出的方法就沒有這個問題,每次都可以將neighborhood所有的node都考慮進來,而且不需要事先假定一個neighborhood的順序
    解析:GraphSAGE:Inductive Representation Learning on Large Graphs
  • 和MoNet(Monti et al., 2016)相比,GAT模型使用頂點特征計算相似性,而不是頂點的結構特征

3 實驗和評價

實驗分成兩部分,transductive learning(半監督學習)和inductive learning(歸納學習)。

數據集

圖結構的數據集,以及數據集之中的信息如下:

半監督學習transductive learning

  • 兩層 GAT
  • 在Cora 數據集上優化網絡結構的超參數,應用到Citeseer數據集
  • 第一層 8 head, F’=8 , ELU 作為非線性函數
  • 第二層為分類層,一個 attention head 特征數C,后跟 softmax 函數,為了應對小訓練集,正則化(L2)
  • 兩層都采用 0.6 的dropout,相當於計算每個node位置的卷積時都是隨機的選取了一部分近鄰節點參與卷積
  • 用Glorot初始化初始的,並且是用Adam SGD來最小化交叉熵進行優化

歸納學習inductive learning

  • 三層GAT 模型
  • 前兩層 K=4, F’=256 ,ELU作為非線性函數
  • 最后一層用來分類 K=6, F`=121 , 激活函數為sigmoid
  • 該任務中,訓練集足夠大不需要使用 正則化 和 dropout
  • 用Glorot初始化初始的,並且是用Adam SGD來最小化交叉熵進行優化

最后,使用t-SNE(Maaten & Hinton, 2008)在Cora數據集上進行一層GAT模型的輸出變換圖如下所示

4 總結

GAT模型的特點

  • 計算高效:self-attention層的操作可以在所有的邊上並行,輸出特征的計算可以在所有頂點上並行。沒有耗時的特征值分解。單個的GAT計算FF'F′個特征的時間復雜度可以壓縮至O(VFF+EF)O(|V|FF'+|E|F')O(VFF+EF),F是輸入的特征數,|V|和|E|是圖中頂點數和邊數。復雜度與Kipf & Welling, 2017的GCN差不多。
    盡管 multi-head 注意力將存儲和參數個數變為了K倍,但是單個head的計算完全獨立且可以並行化。
  • 魯棒性更強:和GCN不同,本文的模型可以對同一個 neighborhood的node分配不同的重要性,使得模型的capacity大增。
  • 注意力機制以一種共享的策略應用在圖的所有的邊上,因此它並不需要在之前就需要得到整個圖結構或是所有的頂點的特征(很多之前的方法的缺陷)。因此GAT 也是一種局部模型。也就是說,在使用 GAT 時,無需訪問整個圖,而只需要訪問所關注節點的鄰節點即可,解決了之前提出的基於譜的方法的問題。因此這個方法有幾個影響:
    • 圖不需要是無向的,可以處理有向圖(若jij\to iji不存在,僅需忽略αij\alpha_{ij}αij即可)
    • 可以直接應用到 inductive learning:包括在訓練過程中在完全未見過的圖上評估模型的任務上。

GAT模型的局限及未來的研究方向

  • 使用稀疏矩陣操作的GAT層,可以將空間復雜度降低到頂點和邊數的線性級別,使得GAT模型可以在更大的圖數據集上運行。然而,文中使用的tensor操作框架只支持二階tensor的稀疏矩陣乘法,限制了當前實現的版本的模型能力(尤其在有多個圖的數據集上)。解決這個問題是未來的一個重要研究方向。在這些使用稀疏矩陣的場景下,在某些圖結構下GPU的運算並不能比CPU快多少。
  • 另一個需要注意的地方是GAT模型的感受野的大小的上界取決於網絡的深度(與GCN和其他模型相似)。像skip connections(He et al., 2016)這樣的技術可以來近似的擴展模型的深度。
  • 在所有邊上的並行計算,尤其是分布式的計算可以設計很多冗余的計算,因為圖中的鄰居往往高度重疊。
  • 擴展GAT模型從頂點分類到圖分類也是一個更具應用性的方向
  • 擴展GAT模型到整合邊的信息(可能表示節點之間的關系)可以處理更多的問題

最后,歡迎加微信進群交流GNN相關問題,只為一起學習,不含任何商業推廣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM