©PaperWeekly 原創 · 作者|紀厚業
學校|北京郵電大學博士生
研究方向|異質圖神經網絡及其應用
圖神經網絡已經成為深度學習領域最熾手可熱的方向之一。作為一種代表性的圖卷積網絡,Graph Attention Network (GAT) 引入了注意力機制來實現更好的鄰居聚合。通過學習鄰居的權重,GAT 可以實現對鄰居的加權聚合。因此,GAT 不僅對於噪音鄰居較為魯棒,注意力機制也賦予了模型一定的可解釋性。
下圖概述了 Graph Attention Network 主要做的事情。
針對節點
和節點 , GAT 首先學習了他們之間的注意力權重 (如左圖所示);然後,基於注意力權重 來對節點 的表示 加權平均,進而得到節點 的表示 。
深入理解圖注意力機制
2.1 非對稱的注意權重
首先,介紹下如何學習節點對 之間的注意力值 。很明顯,為了計算 ,注意力網絡 需要同時考慮兩個節點的影響,如下式:
其中, 分別是節點 和 的表示, 是一個投影矩陣。注意力網絡可以有很多的設計方式,這裡作者將節點 和 的表示進行了拼接,再映射為一個標量。需要注意,這裡拼接導致 ,也就是說注意力值 是非對稱的。
除了拼接操作以外,聚合鄰居信息時,需要對每個節點的所有鄰居的注意力進行歸一化。歸一化之後的注意力權重 才是真正的聚合係數。這裡的歸一化進一步導致了注意力權重的非對稱性。因為在歸一化的過程中,每個節點的歸一化對象並不一樣。 是針對節點 的所有鄰居進行歸一化,而 是針對節點 的所有鄰居進行歸一化。綜上,在求解注意力權重 的過程中,分子和分母都是非對稱的,進而 也是非對稱的。這種非對稱性在圖數據上有什麼用呢?一個簡單的例子:在社交網絡中,有一個大 V 和一個普通用戶互相關注。但是,大 V 對於普通用戶的重要性和普通用戶對大 V 的重要性明顯是不一樣的。
完整的圖注意力公式如下:
也有文章 18 ArXiv Attention-based Graph Neural Network for Semi-supervised Learning (AGNN) 嘗試為節點對 設計對稱的注意力機制,如下式的 :
2.2 可有可無的 LeakyRelu? 在求 公式中,有一個非常醒目的 LeakyReLU 激活函數。其實在最初的 GAT 論文中是沒有這個激活函數的。那這裡作者為什麼突然要加上一個激活函數呢?我們先拿掉 LeakyReLU,再看一下公式中最核心的一項:
假設注意力向量 是由兩個向量拼接而成,即: ,那麼:
如果在沒有 LeakyReLU 的時候對鄰居進行歸一化:
也就是說,分子分母同時約去了節點 的信息, 實際變成了 。這時,節點對 之間的注意力權重實際沒有考慮節點 的表示。如果加上激活函數 (也就是 LeakyReLU),那麼:
這裡對原始 GAT 論文中的公式進行了展開解讀,一是為了更深入的理解圖注意力機制,二是後面的代碼解讀需要用到這種展開。
2.3 Transformer Vs GAT
NLP 中大火的 Transformer 和 GAT 本質在做一樣的事情。Transformer 利用 self-attention 機制將輸入中的每個單詞用其上下文的加權來表示,而 GAT 是利用 self-attention 機制將每個節點用其鄰居的加權來表示。下面是經典的 Transformer 公式:
這裡的 是一個單詞的三種描述, 其中, 是當單詞作為上下文的中心位置時的表示, 是當單詞作為上下文時的表示, 是當單詞作為加權輸入時的表示。因此, 其實代表了單詞之間的相似性,在經過 softmax 歸一化之後就可以得到注意力權重。有了注意力權重,我們再對上下文單詞的表示進行加權,就可以得到單詞的表示了。上述過程和 GAT 的核心思想非常相似:都是通過探索輸入之間的關聯性(注意力權重),通過對上下文信息(句子上下文/節點鄰居)進行聚合,來獲得各個輸入(單詞/節點)的表示。
Transformer 和 GAT 的主要區別是:在 GAT 中,作者對自注意力進行了簡化。每個節點無論是作為中心節點/上下文/聚合輸出,都只用一種表示 。也就是說,在 GAT 中, 。在圖上,節點的鄰居是一個集合,具有不變性。Transformer 將文本隱式的建圖過程中丟失了單詞之間的位置關係,這對 NLP 的一些任務是很致命的。為了補償這種建圖損失的位置關係,Transformer 用了額外了的位置編碼來描述位置信息。
核心代碼解讀
Graph Attention Network 的作者開源了代碼:https://github.com/PetarV-/GAT
但是,這份代碼對於初學者來說較難理解。這裡對 GAT 的核心代碼進行簡要的解讀和介紹。
作者在 GAT/utils/layers.py 中的 attn_head 實現了 GAT 核心模塊:注意力機制。def attn_head(seq, out_sz, bias_mat, activation, in_drop=0.0, coef_drop=0.0, residual=False):
這裡有 3 個比較核心的參數:
seq 指的是輸入的節點特徵矩陣,大小為 [num_graph, num_node, fea_size]out_sz 指的是變換後的節點特徵維度,也就是 後的節點表示維度。bias_mat 是經過變換後的鄰接矩陣,大小為 [num_node, num_node]。作者首先將原始節點特徵 seq 進行變換得到了 seq_fts。這裡,作者使用卷積核大小為 1 的 1D 卷積模擬投影變換,投影變換後的維度為 out_sz。注意,這裡投影矩陣 是所有節點共享,所以 1D 卷積中的多個卷積核也是共享的。seq_fts = tf.layers.conv1d(seq, out_sz, 1, use_bias=False)
也就是說,seq_fts 的大小為 [num_graph, num_node, out_sz]。
回顧前面的公式展開 , 和 也可以認為是投影變換,只不過投影到 1 維表示。注意,這裡節點及其鄰居的投影是分開的,有兩套投影參數 ,對應下面兩個 conv1d 中的參數。f_1 = tf.layers.conv1d(seq_fts, 1, 1) f_2 = tf.layers.conv1d(seq_fts, 1, 1)
經過 tf.layers.conv1d(seq_fts, 1, 1) 之後的 f_1 和 f_2 維度均為 [num_graph, num_node, 1]。
將 f_2 轉置之後與 f_1 疊加,通過廣播得到的大小為 [num_graph, num_node, num_node] 的 logits,就是一個注意力矩陣:
按照 GAT 的公式,我們只要對 logits 進行 softmax 歸一化就可以拿到注意力權重 ,也就是代碼裡的 coefs。但是,這裡為什麼會多一項 bias_mat 呢?coefs = tf.nn.softmax(tf.nn.leaky_relu(logits) + bias_mat)
因為的 logits 存儲了任意兩個節點之間的注意力值,但是,歸一化只需要對每個節點的所有鄰居的注意力進行(下式標紅的部分)。所以,引入了 bias_mat 就是將 softmax 的歸一化對象約束在每個節點的鄰居上,如下式的紅色部分。那麼,bias_mat 是如何實現的呢?直接的想法就是只含有 0,1 的鄰接矩陣與注意力矩陣相乘 ,從而對鄰居進行 mask。但是,直接用 0,1mask 會有問題。
假設注意力權值 [1.2, 0.3, 2.4] 經過 [0,1,1] 的乘法 mask 得到 [0, 0.3, 2.4],再送入到 softmax 歸一化,實際上變為 ,這裡本應該被 mask 掉的 1.2 變成了 =1,還是參與到了歸一化的過程中。作者這裡用一個很大的負數,如 ,將原始鄰居矩陣進行下面的變換, 見 utils/process.py/adj_to_bias。def adj_to_bias(adj, sizes, nhood=1): ... ... return -1e9 * (1.0 - mt)
然後,將 bias_mat 和注意力矩陣相加 ,進而將非節點鄰居進行 mask。
例如,[1.2, 0.3, 2.4] 經過 的加法 mask 得到 。這樣 softmax 就達到了我們的目的。因為 較大的負數 。最後,將 mask 之後的注意力矩陣 coefs 與變換後的特徵矩陣 seq_fts 相乘,即可得到更新後的節點表示 vals。vals = tf.matmul(coefs, seq_fts)
Graph Attention Network 作為首次將圖注意力機制引入到圖神經網絡中的工作,已經在很多領域得到了廣泛應用。受益於注意力機制,GAT 能夠過濾噪音鄰居,提升模型表現並可以對結果實現一定的解釋。
點擊以下標題查看更多往期內容:
如何才能讓更多的優質內容以更短路逕到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀 ,也可以是學習心得 或技術乾貨 。我們的目的只有一個,讓知識真正流動起來。
📝 來稿標準:
• 稿件確係個人原創作品 ,來稿需註明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)
• 如果文章並非首發,請在投稿時提醒並附上所有已發布連結
• PaperWeekly 默認每篇文章都是首發,均會添加「原創」標誌
📬 投稿郵箱:
• 投稿郵箱:hr@paperweekly.site
• 所有文章配圖,請單獨在附件中發送
• 請留下即時聯繫方式(微信或手機),以便我們在編輯發布時和作者溝通
🔍
現在,在「知乎」 也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」 訂閱我們的專欄吧
關於PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報導人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點擊「交流群」 ,小助手將把你帶入 PaperWeekly 的交流群裡。