本文為轉(zhuǎn)載,原文鏈接:https://wmathor.com/index.php/archives/1531/
Introduction

既然你點進(jìn)了這篇博客,我就默認(rèn)你了解圖的最基本概念,包括但不限于有向圖、無向圖的定義,這里我不再多做贅述,下面我只闡述一些比較重要的部分
圖神經(jīng)網(wǎng)絡(luò)是一種直接對圖結(jié)構(gòu)進(jìn)行操作的神經(jīng)網(wǎng)絡(luò)。GNN 的一個典型應(yīng)用是節(jié)點分類。本質(zhì)上,圖中的每一個節(jié)點都與一個標(biāo)簽相關(guān)聯(lián)。如下圖所示,a節(jié)點的向量表示為[0.3, 0.02, 7, 4, ...],將該向量送入下游繼續(xù)做分類即可得到a節(jié)點的類別。

a 節(jié)點的向量表示究竟是如何得到的,等會兒我會詳細(xì)闡述,不過在這我們可以簡單的思考一下,a 節(jié)點的向量表示一定應(yīng)該與其相鄰節(jié)點和**相鄰邊有關(guān)系,假設(shè)每個節(jié)點的one-hot向量表示為
,則
其中表示與
相連邊的one-hot表示,
表示與v相鄰節(jié)點的embedding,
表示與
相鄰節(jié)點的one-hot表示。最終再將
向量和真實標(biāo)簽計算loss,不過也有的地方是將
向量和
經(jīng)過一輪融合之后再計算loss,例如
上述公式以及符號可能不好理解,這里其實可以類比 Word2Vec。在 Word2Vec 中,輸入的是每個詞對應(yīng)的 one-hot,即
。輸出的是這個詞對應(yīng)的 embedding,即
作為一個典型的非歐式數(shù)據(jù),對于圖數(shù)據(jù)的分析主要集中在節(jié)點分類,鏈接預(yù)測和聚類等。對于圖數(shù)據(jù)而言,圖嵌入(Graph / Network Embedding)和圖神經(jīng)網(wǎng)絡(luò)(Graph Neural Networks, GNN)是兩個類似的研究領(lǐng)域。圖嵌入旨在將圖的節(jié)點表示成一個低維向量空間,同時保留網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)和節(jié)點信息,以便在后續(xù)的圖分析任務(wù)中可以直接使用現(xiàn)有的機器學(xué)習(xí)算法。一些基于深度學(xué)習(xí)的圖嵌入同時也屬于圖神經(jīng)網(wǎng)絡(luò),例如一些基于圖自編碼器和利用無監(jiān)督學(xué)習(xí)的圖卷積神經(jīng)網(wǎng)絡(luò)等。下圖描述了圖嵌入和圖神經(jīng)網(wǎng)絡(luò)之間的差異:

DeepWalk:第一個無監(jiān)督學(xué)習(xí)節(jié)點嵌入的算法
DeepWalk 用一句話概述就是:隨機生成圖節(jié)點序列,然后對該序列進(jìn)行 Word2Vec
具體來說,給定一個圖,我們隨機選擇一個節(jié)點作為起始,然后隨機 "步行" 到鄰居節(jié)點,直到節(jié)點序列的長度達(dá)到給定的最大值。例如下圖,分別選擇 d,e,f 作為起點進(jìn)行游走,得到三條節(jié)點序列

在這種情況下,我們可以將節(jié)點和節(jié)點序列分別看作是“單詞”和“句子”,然后利用skip-gram或者cbow算法訓(xùn)練得到每個節(jié)點的embedding。
DeepWalk算法主要包含兩個部分:一個隨機游走序列生成器和一個更新過程。
隨機游走序列生成器首先在圖中隨機抽樣一個隨機游走
的根節(jié)點
,接著從根節(jié)點的鄰居中均勻地隨機抽樣一個節(jié)點直到達(dá)到設(shè)定的最大長度
。對于一個生成的以
為中心左右窗口為
的隨機游走序列
,DeepWalk利用SkipGram算法通過最大化以
為中心,左右
為窗口的同其他節(jié)點共現(xiàn)概率來優(yōu)化模型:
DeepWalk和Word2Vec的類比如下表所示:

node2vec: bias random walk
一般的隨機游走公式
其中,表示
節(jié)點的鄰居節(jié)點數(shù)量,
表示當(dāng)前節(jié)點,
表示下一個選擇的節(jié)點
一般的隨機游走存在以下幾個問題:
- 如果是帶權(quán)圖,沒考慮邊權(quán)值的影響
- 太過于隨機,不能由模型自行學(xué)習(xí)以何種方式游走更好
實際上圖的游走分為兩大類:DFS和BFS

為了引入邊的權(quán)重,以及依概率選擇DFS或BFS,我們首先要將一般的隨機游走公式進(jìn)行修改:
其中,在值上與
是相等的,
可以理解為歸一化的縮放因子
假設(shè)當(dāng)前隨機游走經(jīng)過邊到達(dá)頂點
,節(jié)點
和
之間的邊權(quán)為
,則可以將
改寫為
其中,表示當(dāng)前節(jié)點
的一節(jié)鄰居節(jié)點到節(jié)點
的最短距離
- p: 控制隨機游走以多大的概率“回頭”
- q: 控制隨機游走偏向DFS還是BFS
- q較大時(q>1),傾向于BFS
- q較小時(q<1),傾向于DFS
- p=1=1時,

到此為止,GNN 中節(jié)點 Embedding 算法我就不再多敘述,其實還有很多更好的算法,例如 LINE,Struct2vec 等,不過我個人感覺這些 embedding 算法并不重要,或者說它們并不是 GNN 的核心部分,只要當(dāng)作工具來用就行了,類比 Transformer 中 Word Embedding 的地位
References
- An introduction to Graph Neural Networks
- Random Walk in Node Embeddings (DeepWalk, node2vec, LINE, and GraphSAGE)
- How to do Deep Learning on Graphs with Graph Convolutional Networks
- A Gentle Introduction to Graph Neural Networks (Basics, DeepWalk, and GraphSage)
- Hands-on Graph Neural Networks with PyTorch & PyTorch Geometric
- PGL 全球冠軍團隊帶你攻破圖神經(jīng)網(wǎng)絡(luò)
- 臺大李宏毅助教講解 GNN 圖神經(jīng)網(wǎng)絡(luò)
- 圖神經(jīng)網(wǎng)絡(luò)詳解
- 圖嵌入 (Graph Embedding) 和圖神經(jīng)網(wǎng)絡(luò) (Graph Neural Network)