圖神經網絡學習筆記:Graph Attention Network 淺析

注意力機制

注意力機制的核心在於對給定信息進行權重分配,權重高的信息意味着需要系統進行重點加工。

注意力機制就是對所有的Value{\operatorname{Value}}信息進行加權求和,權重是Query{\operatorname{Query}}與對應Key{\operatorname{Key}}的相關度。

在DNN中,注意力機制已經被看作一種更具表達力的信息融合手段。

注意力的計算

  1. 根據Query和Key的相似度得到權重係數
    Similarity(Query,˙Keyi){\operatorname{Similarity}} ({\operatorname{Query}},˙{\operatorname{Key}}_i)
  2. 將權重係數歸一化
    ai=Softmax(Simi)=eSimijeSimj a_i ={\operatorname{Softmax}} ({\operatorname{Sim}}_i) = \frac{e^{{\operatorname{Sim}}_i}}{\sum_j e^{{\operatorname{Sim}}_j}}
  3. 根據權重係數和Value進行加權求和
    Attention(Query,Source)=iaiValuei {\operatorname{Attention}} ({\operatorname{Query}}, {\operatorname{Source}}) = \sum_i a_i \cdot {\operatorname{Value}}_i

在這裏插入圖片描述

Attention(Query,Source)=isimilarity(Query,Keyi)Valuei {\operatorname{Attention}} ({\operatorname{Query}}, {\operatorname{Source}}) = \sum_i {\operatorname{similarity}} ({\operatorname{Query}}, {\operatorname{Key}}_i) \cdot {\operatorname{Value}}_i

其中,similarity(,){\operatorname{similarity}} (\cdot, \cdot)計算Query{\operatorname{Query}}Keyi{\operatorname{Key}}_i的相似度

注意力的類型

按計算區域

  • Soft Attention
    對所有key求權重概率
  • Hard Attention
    具體到某個key
  • Local Attention
    在某個區域內對所有key求權重概率

按所用信息

  • General Attention
    利用外部信息
  • Local Attention
    只使用內部信息

按結構層次

  • 單層Attention
    用一個query對一段原文進行一次attention

  • 多層Attention
    用於具有層次關係的模型

  • 多頭Attention

    用多個query對一段原文進行多次attention,每個query都關注到原文的不同部分,相當於重複做多次單層attention

相似度計算

  • 點積
    Similarity(Query,Keyi)=QueryKeyi {\operatorname{Similarity}} ({\operatorname{Query}}, {\operatorname{Key}}_i) ={\operatorname{Query}} \cdot {\operatorname{Key}}_i
  • cos相似度
    Similarity(Query,Keyi)=QueryKeyiQueryKeyi {\operatorname{Similarity}} ({\operatorname{Query}}, {\operatorname{Key}}_i) = \frac{{\operatorname{Query}} \cdot {\operatorname{Key}}_i}{\| {\operatorname{Query}} \| \cdot \| {\operatorname{Key}}_i \|}
  • MLP
    Similarity(Query,Keyi)=MLP(Query,Keyi) {\operatorname{Similarity}} ({\operatorname{Query}}, {\operatorname{Key}}_i) ={\operatorname{MLP}} ({\operatorname{Query}}, {\operatorname{Key}}_i)

參考

GAT概覽

圖注意力層

在這裏插入圖片描述

鄰居結點vjv_jviv_i的權重係數:

eij=a(Whi,Whj) e_{{\operatorname{ij}}} = a (Wh_i, Wh_j)

其中,W{\boldsymbol{W}}是該層結點特徵變換的權重參數,a()a (\cdot)是計算兩個結點相似度的函數

用單層感知機計算相似度,激活函數用LeakReLU

eij=LeakReLU(aT[WhiWhj]) e_{{\operatorname{ij}}} ={\operatorname{LeakReLU}} (a^T [Wh_i | | Wh_j])

歸一化處理

αij=softmaxj(eij)=exp(eij)vkN~(vi)exp(eik)=exp(LeakReLU(aT[WhiWhj]))vkN~(vi)exp(LeakReLU(aT[WhiWhj])) \begin{array}{rcl} \alpha_{{\operatorname{ij}}} & = & {\operatorname{softmax}}_j (e_{{\operatorname{ij}}})\\ & = & \frac{\exp (e_{{\operatorname{ij}}})}{\sum_{v_k \in \tilde{N} (v_i)} \exp (e_{{\operatorname{ik}}})}\\ & = & \frac{\exp ({\operatorname{LeakReLU}} (a^T [Wh_i | | Wh_j]))}{\sum_{v_k \in \tilde{N} (v_i)} \exp ({\operatorname{LeakReLU}} (a^T [Wh_i | | Wh_j]))} \end{array}

結點viv_i的新特徵向量爲

hi=σ(vjN~(vi)αijWhj) h'_i = \sigma \left( \sum_{v_j \in \tilde{N} (v_i)} \alpha_{{\operatorname{ij}}} Wh_j \right)

多頭圖注意力層

在這裏插入圖片描述
hi=k=1Kσ(vjN~(vi)αijWhj) h'_i = | |_{k = 1}^K \sigma \left( \sum_{v_j \in \tilde{N} (v_i)} \alpha_{{\operatorname{ij}}} Wh_j \right)

再看GCN

GCN:L~symXW(A~˙M)XW\tilde{L}_{{\operatorname{sym}}} XW \Rightarrow (\tilde{A} \odot˙M) XW,其中MM是圖的拉普拉斯矩陣,爲什麼?

GAT:αXW\alpha XW

在這裏插入圖片描述

### >>> 
import numpy as np
A = np.array([
 [0,1,0,0,1,0],
 [1,0,1,0,1,0],
 [0,1,0,1,0,0],
 [0,0,1,0,1,1],
 [1,1,0,1,0,0],
 [0,0,0,1,0,0]
])
D = np.diag(np.sum(A, 0))
A_hat = A + np.identity(6, np.int32)
D_hat = np.diag(np.sum(A_hat, 0))
D_inv = np.linalg.inv(D_hat)
D_ = np.sqrt(D_inv)

### >>> 
L = D - A
print(L)

[[ 2 -1 0 0 -1 0]
[-1 3 -1 0 -1 0]
[ 0 -1 2 -1 0 0]
[ 0 0 -1 3 -1 -1]
[-1 -1 0 -1 3 0]
[ 0 0 0 -1 0 1]]

### >>> 
L_hat = D_hat - A_hat
print(L_hat)

[[ 2 -1 0 0 -1 0]
[-1 3 -1 0 -1 0]
[ 0 -1 2 -1 0 0]
[ 0 0 -1 3 -1 -1]
[-1 -1 0 -1 3 0]
[ 0 0 0 -1 0 1]]

### >>> 
A*L

[[ 0 -1 0 0 -1 0]
[-1 0 -1 0 -1 0]
[ 0 -1 0 -1 0 0]
[ 0 0 -1 0 -1 -1]
[-1 -1 0 -1 0 0]
[ 0 0 0 -1 0 0]]

### >>> 
A_hat * L_hat

[[ 2 -1 0 0 -1 0]
[-1 3 -1 0 -1 0]
[ 0 -1 2 -1 0 0]
[ 0 0 -1 3 -1 -1]
[-1 -1 0 -1 3 0]
[ 0 0 0 -1 0 1]]

### >>> 
D_.dot(A_hat).dot(D_)

[[0.33333333 0.28867513 0. 0. 0.28867513 0. ]
[0.28867513 0.25 0.28867513 0. 0.25 0. ]
[0. 0.28867513 0.33333333 0.28867513 0. 0. ]
[0. 0. 0.28867513 0.25 0.25 0.35355339]
[0.28867513 0.25 0. 0.25 0.25 0. ]
[0. 0. 0. 0.35355339 0. 0.5 ]]

### >>> 


圖注意力模型相較於GCN多了一個可以學習的新的維度——邊上的權重係數。從圖信號處理的角度來看,相當於學習出一個自適應的圖位移算子,對應一種自適應的濾波效應。

我的理解:都是加權求和,GCN同一個結點的不同鄰居權重一樣,GAT則是不一樣的。

GAT變種

Gated Attention Networks (GaAN)

論文:GaAN: Gated Attention Networks for Learning on Large and
Spatiotemporal Graphs

在多頭注意力中,用一個卷積子網來控制注意力頭的重要性

hGAO和cGAO

論文:Graph Representation Learning via Hard and Channel-Wise Attention
Networks

提出 hGAO (hard graph attention operator) 和 cGAO (channel-wise graph
attention
operator),hGAO只關注重要結點,cGAO在信道上做注意力操作

Shortest Path Graph Attention Network (SPAGAN)

論文:SPAGAN: Shortest Path Graph Attention Network

查找中心節點與其高階鄰居之間的最短路徑,然後計算路徑到節點的注意,以更新節點的特徵和係數,並迭代這兩個步驟。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章