注意力機制
注意力機制的核心在於對給定信息進行權重分配,權重高的信息意味着需要系統進行重點加工。
注意力機制就是對所有的信息進行加權求和,權重是與對應的相關度。
在DNN中,注意力機制已經被看作一種更具表達力的信息融合手段。
注意力的計算
- 根據Query和Key的相似度得到權重係數
- 將權重係數歸一化
- 根據權重係數和Value進行加權求和
其中,計算和的相似度
注意力的類型
按計算區域
- Soft Attention
對所有key求權重概率 - Hard Attention
具體到某個key - Local Attention
在某個區域內對所有key求權重概率
按所用信息
- General Attention
利用外部信息 - Local Attention
只使用內部信息
按結構層次
-
單層Attention
用一個query對一段原文進行一次attention -
多層Attention
用於具有層次關係的模型 -
多頭Attention
用多個query對一段原文進行多次attention,每個query都關注到原文的不同部分,相當於重複做多次單層attention
相似度計算
- 點積
- cos相似度
- MLP
參考
-
深度學習中的注意力機制
https://blog.csdn.net/tg229dvt5i93mxaq5a6u/article/details/78422216
-
一文看懂 Attention(本質原理+3大優點+5大類型)
https://zhuanlan.zhihu.com/p/91839581 -
Attention用於NLP的一些小結
https://zhuanlan.zhihu.com/p/35739040
GAT概覽
圖注意力層
鄰居結點到的權重係數:
其中,是該層結點特徵變換的權重參數,是計算兩個結點相似度的函數
用單層感知機計算相似度,激活函數用LeakReLU
歸一化處理
結點的新特徵向量爲
多頭圖注意力層
再看GCN
GCN:,其中是圖的拉普拉斯矩陣,爲什麼?
GAT:
### >>>
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
查找中心節點與其高階鄰居之間的最短路徑,然後計算路徑到節點的注意,以更新節點的特徵和係數,並迭代這兩個步驟。