圖表示學習入門3——圖神經網絡(Graph Neural Networks)

圖神經網絡(Graph Neural Network)在社交網絡、推薦系統(tǒng)、知識圖譜上的效果初見端倪,成為近2年大熱的一個研究熱點。然而,什么是圖神經網絡?圖和神經網絡為什么要關聯?怎么關聯?

本文將以淺顯直覺的方式,介紹GNN的靈感來源,構造方法,訓練方式等,根據《Representation Learning on Networks》中GNN部分,做了具體的解讀和詮釋,并增補了一些代碼中才有的實現細節(jié),幫助初學者理解。

代碼實現:(https://github.com/leichaocn/graph_representation_learning

目錄
卷積神經網絡的啟示
核心想法
傳播機制
傳播機制舉例
訓練的方式
一般的設計步驟
Node2Vec與GNN的對比
總結
參考文獻


卷積神經網絡的啟示

回顧對圖像的簡單卷積:

3im1.png

圖1.卷積網絡的基本操作(source

如圖1所示:一幅圖(image)所抽取的特征圖(features map)里每個元素,可以理解為圖(image)上的對應點的像素及周邊點的像素的加權和(還需要再激活一下)。

同樣可以設想:一個圖(graph)所抽取的特征圖(也就是特征向量)里的每個元素,也可以理解為圖(graph)上對應節(jié)點的向量與周邊節(jié)點的向量的加權和。
澄清幾個概念:

特征向量:一條數據(image、word、node等)的數字化表示,是機器學習任務的必備輸入。
embedding:更好的特征向量,蘊含潛在語義信息,是來自network訓練后的結果,如果能找到優(yōu)秀的embedding,將有效提升后面機器學習任務的性能表現。例如從word2vec網絡中抽出的word embedding向量,“北京”“巴黎”這兩個詞就比較相似,因為都是首都;從CNN網絡中抽出的image embedding,暹羅貓、無耳貓兩個圖片的向量就比較相似,因為都有貓。
features map :由cnn生成的特征向量,也就是image embedding。image 經過一層CNN前向傳播后的輸出,是一個二維的矩陣,只要進行拉直(flatten),就轉變?yōu)榱艘痪S的特征向量。類似于全連接神經網絡網絡里每一層里都能獲取的一維的特征向量。

這種遷移聯想值得好好體會。

體會明白后,那具體怎么做呢?

核心想法

正如上面討論的,歸納為一句話:用周圍點的向量傳播出自己的Embedding

一個非常簡單的例子就能搞明白。

3im2.png

圖2.一個圖(graph)的例子(source

對于圖2來說,要計算節(jié)點A的Embedding,我們有以下的兩條想法:

  • 節(jié)點A的Embedding,是它的鄰接節(jié)點B、C、D的Embedding傳播的結果
  • 而節(jié)點B、C、D的Embedding,又是由它們各自的鄰接節(jié)點的Embedding傳播的結果。

但是你可能會說,這樣不斷追溯,何時能結束?所以為了避免無窮無盡,我們就做兩層,可以構造圖3的傳播關系。

3im3.png

圖3.由兩層傳播生成節(jié)點A的Embedding(source

第0層即輸入層,為每個節(jié)點的初始向量(根據所處領域里特征數據進行構建),不妨稱為初始Embedding。

  • 第一層

    節(jié)點B的Embedding來自它的鄰接點A、C的Embedding的傳播。

    節(jié)點C的Embedding來自它的鄰接點A、B、C、D的Embedding的傳播。

    節(jié)點D的Embedding來自它的鄰接點A的Embedding的傳播。

  • 第二層

    節(jié)點A的Embedding來自它的鄰接點B、C、D的Embedding的傳播。

好了,大概可能有點感覺了,可是傳播到底是什么?圖中的小方塊里到底在什么什么?

(注意:圖中所有的方塊代表的操作均相同,大小、顏色的差異沒有任何含義)

傳播機制

小方塊里做的就兩件事:

  • 收集(Aggregation)

    簡言之,就是對上一層的所有鄰接節(jié)點的Embedding,如何進行匯總,獲得一個Embedding,供本層進行更新。

  • 更新(Update)

    即對本層已“收集完畢”的鄰接點數據,是否添加自身節(jié)點的上一層Embedding,如果是如何添加,如何激活,等等方式,最終輸出本層的Embedding。

表達成數學公式,即下面這個式子:

3im4.png

先解釋其中的符號含義:h表示節(jié)點的Embedding,下標vu表示節(jié)點的索引,上標k表示第幾層的意思,\sigma表示激活函數,W_kB_k表示矩陣,N(v)表示節(jié)點v的鄰接點集合,AGG(\cdot)表示收集操作。

這個公式的右邊就做了兩件事:

  • 收集:即AGG(\cdot)部分
  • 更新:除了AGG(\cdot)外的其他部分。

這個公式太抽象,我們舉例說明三種常見的圖神經網絡,看看是如何設計的。

傳播機制舉例

基礎版本

3im5.png

1)收集

即直接對上一層所有節(jié)點的Embedding求平均。

2)更新

即為用收集完畢的Embedding與本節(jié)點上一層的Embedding進行了加權和,然后再激活。顯然,由于上一層Embedding與本層Embedding維度相同,所以W_kB_k為方陣。

圖卷積網絡(Graph Convolutional Networks)

3im6.png

1)收集

u\in N(v)\cup v可知,收集的輸入Embeddings不僅僅包括節(jié)點v的鄰接點們的Embedding,還包括節(jié)點v自身的Embedding,而分母變成了\sqrt{\mid N(u) \mid \mid N(v) \mid},是一種更復雜的加權和,不僅考慮了節(jié)點v的鄰接點的個數,還考慮了每個鄰接點u自身的鄰接接個數。(基礎版本中的平均是最簡單的加權和)

2)更新

顯然比基礎版本簡單多了,不再考慮節(jié)點v自己的上一層Embedding,直接讓收集好的Embedding乘上矩陣W_k后再激活完事。

之所以叫圖卷積網絡,是因為和卷積網絡的套路類似,對自己和周邊節(jié)點(像素)進行加權求和。

GraphSAGE

3im7.png

這不就是咱們上面提到的那個概念公式?是的,GraphSAGE由于其變體較多,所以需要用這個最抽象的公式來概括它。

1)收集

可以有如下的收集方式:

  • 直接平均

    這是最簡單的收集方式

3im8.png
  • 池化
3im9.png
  • LSTM
3im10.png

2)更新

收集好的Embedding經過矩陣A_k變換,節(jié)點v自己上一層的Embedding經過矩陣B_k變換,我們即可得到兩個Embedding,把它倆給按列拼接起來。

這里要注意:它倆不是相加;矩陣A_k和矩陣B_k都不是方陣,均自帶降維功能。AGG(\cdot)輸出是d維,h^{k-1}_vd維,但是經過軍陣變換后,它倆都成了d/2維,經過拼接,又恢復成d維。

訓練的方式

無監(jiān)督的訓練

跑不同的Aggregation和Update方法,結合自定義的損失函數,都可以訓練出這些權重。這里的自定義損失函數,需要根據你對節(jié)點Embedding的最終期望,讓它附加上一個什么樣的效果來設計。

例如word2vec利用序列中的上下文信息,用一個詞預測周圍詞,構造分類損失來訓練。圖的無監(jiān)督訓練也可以用一個節(jié)點預測周圍節(jié)點,構造分類損失來訓練。當然,還有其他的無監(jiān)督套路,這個視頻不錯(18min~21min):https://www.bilibili.com/video/av53422483/

在無監(jiān)督任務中,獲取經過神經網絡優(yōu)化的Embedding,就是我們的目的。

有監(jiān)督的訓練

如果我們想要實現節(jié)點分類,那么我們就需要有帶標簽的訓練數據,設計損失函數,即可進行訓練。

例如,我們有一批帶label的圖結構的數據,已經標記好了哪些是水軍,哪些是普通用戶。我們就可以構造如下的交叉熵損失函數。

3im11.png

圖4.有監(jiān)督訓練中損失函數的構造(source

  • 轉換矩陣

    注意其中的z_v即節(jié)點v的Embedding,y_v是節(jié)點v的label,那\theta是什么鬼?

    如剛才我們討論的,圖神經網絡的傳播結果,是所有節(jié)點經過“傳播”優(yōu)化的Embedding,這些Embedding的維度均為d維(在初始化時定義好的),而我們分類任務可能是c類,所以,需要再前向傳播的最后一層,加入矩陣,把d維的輸出映射成c維的輸出,這樣才能讓交叉熵損失函數對應起來。

    由于我們列舉的是二分類任務,圖4中也用的是二分類的交叉熵損失,因此只需要1維輸出足矣,所以在這里的c為1,\theta為一個向量(可視為把d維壓縮為1維的特殊矩陣)。

在有監(jiān)督任務中,獲取經過神經網絡優(yōu)化的Embedding,還需要進行分類。所以Embedding不是目的,只是實現分類的手段。

一般的設計步驟

綜上,各類圖神經網絡架構主要區(qū)別是:

  • 傳播機制的區(qū)別,即收集和更新的設計(圖3中小方塊)。
  • 有無監(jiān)督及損失函數的區(qū)別。

設計圖神經網絡的一般步驟是:

  1. 定義收集與更新方式。
  2. 定義損失函數。
  3. 在一批節(jié)點上進行訓練。
  4. 生成Embedding,即使是模型未見過的Embedding,模型也可以對其初始化Embedding進行“傳播優(yōu)化”。

Node2Vec與GNN的對比

由于Embedding這個術語被我以廣義的方式,用了太多次,很容易導致混淆,所以這里對Embedding在不同狀態(tài)時做一個總結。

3im12.png

總結

  • 圖神經網絡是以鄰接點Embedding的淺層傳播來訓練Embedding。

  • 改變Aggregation和update的方式,可以構造不同的圖神經網絡;

  • 既可以用無監(jiān)督的方式獲得Embedding,也可以用有監(jiān)督的方式直接訓練分類任務。

參考文獻

[1] Jure Leskovec, 《Graph Representation Learning》

[2] Jure Leskovec, 《Representation Learning on Networks》

http://snap.stanford.edu/proj/embeddings-www/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容