1. 程式人生 > >從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網路模型 (一)

從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網路模型 (一)

本文屬於圖神經網路的系列文章,文章目錄如下:

  • 從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網路模型 (一)
  • 從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網路模型 (二)
  • 從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網路模型 (三)

筆者最近看了一些圖與圖卷積神經網路的論文,深感其強大,但一些Survey或教程默認了讀者對圖神經網路背景知識的瞭解,對未學過訊號處理的讀者不太友好。同時,很多教程只講是什麼,不講為什麼,也沒有梳理清楚不同網路結構的區別與設計初衷(Motivation)。

因此,本文試圖沿著圖神經網路的歷史脈絡,從最早基於不動點理論的圖神經網路(Graph Neural Network, GNN)一步步講到當前用得最火的圖卷積神經網路(Graph Convolutional Neural Network, GCN), 期望通過本文帶給讀者一些靈感與啟示。

  • 本文的提綱與敘述要點主要參考了2篇圖神經網路的Survey,分別是來自IEEE Fellow的A Comprehensive Survey on Graph Neural Networks[1] 以及來自清華大學朱文武老師組的Deep Learning on Graphs: A Survey[7], 在這裡向兩篇Survey的作者表示敬意。
  • 同時,本文關於部分圖卷積神經網路的理解很多都是受到知乎問題[8]高贊答案的啟發,非常感謝他們的無私分享!
  • 最後,本文還引用了一些來自網際網路的生動形象的圖片,在這裡也向這些圖片的作者表示感謝。本文中未註明出處的圖片均為筆者製作,如需轉載或引用請聯絡本人。

歷史脈絡

在開始正文之前,筆者先帶大家回顧一下圖神經網路的發展歷史。不過,因為圖神經網路的發展分支非常之多,筆者某些敘述可能並不全面,一家之言僅供各位讀者參考:

  1. 圖神經網路的概念最早在2005年提出。2009年Franco博士在其論文 [2]中定義了圖神經網路的理論基礎,筆者呆會要講的第一種圖神經網路也是基於這篇論文。
  2. 最早的GNN主要解決的還是如分子結構分類等嚴格意義上的圖論問題。但實際上歐式空間(比如像影象 Image)或者是序列(比如像文字 Text),許多常見場景也都可以轉換成圖(Graph),然後就能使用圖神經網路技術來建模。
  3. 2009年後圖神經網路也陸續有一些相關研究,但沒有太大波瀾。直到2013年,在圖訊號處理(Graph Signal Processing)的基礎上,Bruna(這位是LeCun的學生)在文獻 [3]中首次提出圖上的基於頻域(Spectral-domain)和基於空域(Spatial-domain)的卷積神經網路。
  4. 其後至今,學界提出了很多基於空域的圖卷積方式,也有不少學者試圖通過統一的框架將前人的工作統一起來。而基於頻域的工作相對較少,只受到部分學者的青睞。
  5. 值得一提的是,圖神經網路與圖表示學習(Represent Learning for Graph)的發展歷程也驚人地相似。2014年,在word2vec [4]的啟發下,Perozzi等人提出了DeepWalk [5],開啟了深度學習時代圖表示學習的大門。更有趣的是,就在幾乎一樣的時間,Bordes等人提出了大名鼎鼎的TransE [6],為知識圖譜的分散式表示(Represent Learning for Knowledge Graph)奠定了基礎。

圖神經網路(Graph Neural Network)

首先要澄清一點,除非特別指明,本文中所提到的圖均指圖論中的圖(Graph)。它是一種由若干個結點(Node)及連線兩個結點的邊(Edge)所構成的圖形,用於刻畫不同結點之間的關係。下面是一個生動的例子,圖片來自論文[7]:

狀態更新與輸出

最早的圖神經網路起源於Franco博士的論文[2], 它的理論基礎是不動點理論。給定一張圖 \(G\),每個結點都有其自己的特徵(feature), 本文中用\(\mathbf{x}_v\)表示結點v的特徵;連線兩個結點的邊也有自己的特徵,本文中用\(\mathbf{x}_{(v,u)}\)表示結點v與結點u之間邊的特徵;GNN的學習目標是獲得每個結點的圖感知的隱藏狀態 \(\mathbf{h}_v\)(state embedding),這就意味著:對於每個節點,它的隱藏狀態包含了來自鄰居節點的資訊。那麼,如何讓每個結點都感知到圖上其他的結點呢?GNN通過迭代式更新所有結點的隱藏狀態來實現,在\(t+1\)時刻,結點\(v\)的隱藏狀態按照如下方式更新:

\[