Graph Neural Network——圖神經網路

FavoriteStar發表於2022-12-17

本文是跟著李沐老師的論文精度系列進行GNN的學習的,詳細連結請見:零基礎多圖詳解圖神經網路(GNN/GCN)【論文精讀】

該論文的標題為《A Gentle Introduction to Graph Neural Networks》,是對GNN的簡介。那麼論文的第一張圖呢把滑鼠放上去某一個結點將會表示出該節點的生成過程,可以看到放於Layer1中的某個節點時,它是由Layer2中的多個節點生成,而Layer2中的這些結點又有Layer3的部分節點生成,因此只要層次夠深,那麼一個節點就可以處理原始大片節點的資訊

在這裡插入圖片描述

圖這種資料結構在當前隨處可見,因此圖神經網路如果能夠發揮對圖這種結構的良好處理能力,將會有很廣泛的應用場景,例如藥物的生成、車流量檢測、推薦系統、人物關係等等。

文章的主要內容分為四塊,分別是

  • 什麼樣的資料結構可以表示為圖
  • 圖和別的資料結構的區別在哪,為什麼要用圖神經網路
  • 構建一個GNN檢視內部各模組的內容
  • 提供一個GNN的操作平臺

1、什麼是圖

圖實際上就是表示實體(頂點)的資訊以及它們之間的連線關係(邊)。而圖的節點所包含的資訊、邊表達的資訊、以及整個圖表達的資訊都可以用向量來表示。因此就存在三種向量。

而圖又分為有向圖和無向圖,如下:
在這裡插入圖片描述

那麼資料如何表示為圖呢?

1.1 圖片表示為圖

如果將每個畫素點看成一個頂點,而鄰接的關係看成圖中的邊的,那麼就可以用鄰接矩陣來表示這個影像了,如下:

在這裡插入圖片描述

在圖中我們可以看到,最左邊的圖呢代表每個畫素它的位置,兩位數字分別代表行和列,那麼它旁邊的那些畫素總共有8個和它靠近,那麼在第三張圖中就有8的頂點和它存在邊的連線。而如何將第三張圖表示成資料呢,就是用鄰接矩陣,可以看到鄰接矩陣的行和列每個元素都是一個頂點,如果頂點和頂點之間存在邊的關係那麼將會在矩陣的對應位置用藍色的點進行標註。因此我們就將圖片表示成了一個圖,再用鄰接矩陣這種結構來表示圖了。

1.2 文字表示為圖

文字可以看成一個序列,將每個單詞看成一個頂點,而相鄰的單詞可以看成存在有向邊的連線,再用鄰接矩陣來表示,如下:

在這裡插入圖片描述

1.3 其他資料結構表示為圖

例如咖啡因分子:

在這裡插入圖片描述

人物關係圖:

在這裡插入圖片描述

空手道道館中老師與學生的關係圖:

在這裡插入圖片描述

等等。

1.4、資料表示成圖後存在哪些問題

圖上的問題大致上可以分為三類,第一類是關於整個圖的任務,第二類是關於圖中的頂點的任務,第三類任務是關於圖中的邊的任務。

  • 關於整個圖的任務

    例如我們將分子的結構表示成圖之後,我們要識別該圖中是否有兩個環,那麼我們就可以做成一個分類任務:

在這裡插入圖片描述

  • 關於頂點的屬性判斷的任務

    對頂點進行劃分,劃分成兩類,例如上述提到的空手道老師的任務,兩位老師因為意見不合而決裂,那麼我們所有的學生都要做出選擇哪位老師的任務,因此就是對頂點的型別進行分類的任務:

在這裡插入圖片描述

  • 關於邊的屬性判斷的任務

    例如在下圖中,先對各種元素進行提取成頂點,然後判斷各個頂點之間是什麼關係,例如觀看、攻擊等等:

在這裡插入圖片描述

也就是對一個圖中的邊的屬性進行劃分:

在這裡插入圖片描述

1.5、將機器學習用於圖模型中將會有什麼挑戰

首先,前面說到的圖的資訊、頂點的資訊、邊的資訊可以用向量來表示,這對於神經網路是由友好的。但是關於各個頂點之間的連線性應該怎麼表達是一個大問題。而我們前面提到鄰接矩陣,首先它所佔用的空間會非常大,其次對於這種稀疏矩陣的高效處理也是一個很大的問題,再者如果我們將矩陣中的某些列或者某些行進行交換,是不會影響鄰接矩陣所表示的含義的,如下圖:

在這裡插入圖片描述

或者看下面這個例子,對於四個頂點的圖可以有這麼多可能的鄰接矩陣:

在這裡插入圖片描述

這就需要我們保證我們的網路也能夠在應對這樣的變化時做出相同的決策。

那麼我們可以用到如下這種資料結構來表示:

在這裡插入圖片描述

對於每個頂點和每條邊,我們都可以用標量或者向量來表示它們的內部屬性,全域性的圖也是一樣的。而對於所有的連線資訊,我們則可以維護一個連線列表的結構,其中每一個值代表每條邊對應連線的兩個節點。

2、圖神經網路(GNN)

原文中對於GNN的定義是:

A GNN is an optimizable transformation on all attributes of the graph (nodes, edges, global-context) that preserves graph symmetries (permutation invariances)

意思就是GNN 是對圖的所有屬性(節點、邊、全域性上下文)的可最佳化轉換,它保留了圖的對稱性(置換不變性),也就是將順序變化之後不會影響的。而這裡用到的神經網路結構為message passing neural network,即資訊傳遞神經網路,它會對圖中的各種屬性向量進行轉換,但不會改變其連線性。並且其輸入和輸出都是一個圖。

2.1 最簡單的GNN

在這裡插入圖片描述

一個最簡單的GNN如上圖所示:對於圖、頂點、邊這三類屬性分類構造一個多層感知機(MLP),然後將對應的向量輸入進去後得到一個新的向量來表示新的資訊。而這並不會改變原來連線性的資訊,因此圖的結構仍然是保持不變的。那麼我們如何將這些資訊轉換成我們想要的輸出呢

假設現在是對頂點的資訊進行預測,就是之前空手道的二分類任務,那麼我們可以在最後一層輸出的圖後,接上一個全連線層,然後再接上一個Softmax層即可,例如我們要進行二分類任務,那我們的全連線層的輸出維度設為2即可,n分類就設為n。 需要注意的是不管有多少個頂點,它們是共享一個全連線層的,共享其中的引數。那麼也就是所有的頂點共享一個全連線層,所有的邊共享一個全連線層, 全域性自己就擁有一個全連線層。

那麼再來看稍微複雜一點的情況,例如某個頂點我們沒有其向量該怎麼辦呢,可以採用pooling技術,即將與該頂點相連的邊的向量和全域性的向量進行相加,就得到了代表這個頂點的向量,那麼我們就可以拿這個向量去做預測等任務了,示意圖如下:

在這裡插入圖片描述

其中紅色的箭頭代表四條邊的向量,藍色箭頭的向量代表全域性的向量,那麼相加就可以得到該頂點的向量了,可表示成下面的示意圖:

在這裡插入圖片描述

那麼如果有頂點的向量而沒有邊的向量也是同理,只需要將該邊所連線的兩個頂點的向量和全域性的向量進行相加即可,即:

在這裡插入圖片描述

而如果是擁有頂點的向量而沒有全域性的向量,那麼可以將全部頂點的向量加起來作為全域性的向量,即:

在這裡插入圖片描述

所以不管缺乏哪一類的屬性都可以透過pooling來補齊

因此完整的最簡單的GNN如下圖:

在這裡插入圖片描述

但這部分的問題是在GNN blocks中並沒有考慮到圖的結構資訊,這相當於對資訊的浪費,結構可能不太理想。那麼要用到下面的技術。

2.2 在圖表的各部分之間傳遞資訊

這部分的思想其實很容易理解,例如在對頂點進行更新時並不是直接進入MLP之中,而是將該頂點的向量和與之相連的所有頂點的向量求和,再進入MLP之中得到該頂點的更新向量,即:

在這裡插入圖片描述

這種情況呢就是隻在頂點之間進行資訊傳遞,即:

在這裡插入圖片描述

我們還可以實現更復雜的資訊傳遞,例如把頂點的資訊傳遞給邊,把邊的資訊傳遞給頂點,即下圖:

在這裡插入圖片描述

其中\(\rho _{V_n-E_n}\)代表將頂點的資訊傳遞到邊,即將邊相連的兩個頂點的向量加到邊的向量之上,而\(\rho _{E_n-V_n}\)就是將邊的資訊傳遞到頂底,即將頂點有關係的邊的向量都加到頂點的向量之上。完成之後再進入各自的MLP進行更新。這裡需要注意的是這兩個順序交換是不一樣的,即下面兩種處理方式是不一樣的:

在這裡插入圖片描述

但目前也沒有特別明顯的證明哪一種更好。另外一個辦法就是兩邊同時更新,兩種方式同時實施,即:

在這裡插入圖片描述

其實從之前我們就沒有深入講解說為什麼需要一個全域性的向量。這是因為如果你的圖很大,有很多的節點但是連線又不夠緊密的話,那麼訊息從一個頂點傳遞到遠處的頂點可能需要很久的時間或者說很多次的傳遞過程,那麼便虛擬化一個頂點,可以稱為master node,該點呢與所有的頂點都相連,同時與所有的邊都相連,作為訊息傳遞的重要部分。那麼對於全域性向量加入了資訊傳遞的過程就可以表示為下圖,其中更新邊的資訊的時候是頂點和全域性都傳遞資訊,更新頂點的資訊的時候是邊和全域性都傳遞資訊,而同樣,更新全域性資訊的時候也邊和頂點都傳遞資訊。

在這裡插入圖片描述

前述的pooling操作不僅僅可以求和,還可以做平均、取最大值這類操作。

3、當前技術綜述

圖除了我們前述的那種結構之外,是存在許多種其他結構的,例如下面這兩種:

在這裡插入圖片描述

第一種是具有多種的邊的型別,存在有向邊和無向邊;而第二種呢代表圖可能是多層的,即當前層的某一個頂點其實可能是一整個圖。

另外一個需要注意的點在於,如果層數較多那麼後面層中的某一個頂點可能記錄的資訊就是整個圖的資訊了,那麼求梯度的時候會非常複雜,因此可以嘗試的方法是每次進行取樣,取樣得到一個子圖然後再該子圖上進行訊息傳遞。

相關文章