圖神經(jīng)網(wǎng)絡(luò)(Graph Neural Network)在社交網(wǎng)絡(luò)玄坦、推薦系統(tǒng)、知識圖譜上的效果初見端倪,成為近2年大熱的一個研究熱點煎楣。然而豺总,什么是圖神經(jīng)網(wǎng)絡(luò)?圖和神經(jīng)網(wǎng)絡(luò)為什么要關(guān)聯(lián)择懂?怎么關(guān)聯(lián)喻喳?
本文將以淺顯直覺的方式,介紹GNN的靈感來源困曙,構(gòu)造方法表伦,訓(xùn)練方式等,根據(jù)《Representation Learning on Networks》中GNN部分慷丽,做了具體的解讀和詮釋绑榴,并增補了一些代碼中才有的實現(xiàn)細節(jié),幫助初學(xué)者理解盈魁。
代碼實現(xiàn):(https://github.com/leichaocn/graph_representation_learning)
目錄
卷積神經(jīng)網(wǎng)絡(luò)的啟示
核心想法
傳播機制
傳播機制舉例
訓(xùn)練的方式
一般的設(shè)計步驟
Node2Vec與GNN的對比
總結(jié)
參考文獻
卷積神經(jīng)網(wǎng)絡(luò)的啟示
回顧對圖像的簡單卷積:
圖1.卷積網(wǎng)絡(luò)的基本操作(source)
如圖1所示:一幅圖(image)所抽取的特征圖(features map)里每個元素翔怎,可以理解為圖(image)上的對應(yīng)點的像素及周邊點的像素的加權(quán)和(還需要再激活一下)。
同樣可以設(shè)想:一個圖(graph)所抽取的特征圖(也就是特征向量)里的每個元素杨耙,也可以理解為圖(graph)上對應(yīng)節(jié)點的向量與周邊節(jié)點的向量的加權(quán)和赤套。
澄清幾個概念:
特征向量:一條數(shù)據(jù)(image、word珊膜、node等)的數(shù)字化表示容握,是機器學(xué)習(xí)任務(wù)的必備輸入。
embedding:更好的特征向量车柠,蘊含潛在語義信息剔氏,是來自network訓(xùn)練后的結(jié)果,如果能找到優(yōu)秀的embedding竹祷,將有效提升后面機器學(xué)習(xí)任務(wù)的性能表現(xiàn)谈跛。例如從word2vec網(wǎng)絡(luò)中抽出的word embedding向量,“北京”“巴黎”這兩個詞就比較相似塑陵,因為都是首都感憾;從CNN網(wǎng)絡(luò)中抽出的image embedding,暹羅貓令花、無耳貓兩個圖片的向量就比較相似阻桅,因為都有貓。
features map :由cnn生成的特征向量兼都,也就是image embedding嫂沉。image 經(jīng)過一層CNN前向傳播后的輸出,是一個二維的矩陣扮碧,只要進行拉直(flatten)趟章,就轉(zhuǎn)變?yōu)榱艘痪S的特征向量。類似于全連接神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)里每一層里都能獲取的一維的特征向量。
這種遷移聯(lián)想值得好好體會尤揣。
體會明白后搔啊,那具體怎么做呢柬祠?
核心想法
正如上面討論的北戏,歸納為一句話:用周圍點的向量傳播出自己的Embedding。
一個非常簡單的例子就能搞明白漫蛔。
圖2.一個圖(graph)的例子(source)
對于圖2來說嗜愈,要計算節(jié)點A的Embedding,我們有以下的兩條想法:
- 節(jié)點A的Embedding莽龟,是它的鄰接節(jié)點B蠕嫁、C、D的Embedding傳播的結(jié)果
- 而節(jié)點B毯盈、C剃毒、D的Embedding,又是由它們各自的鄰接節(jié)點的Embedding傳播的結(jié)果搂赋。
但是你可能會說赘阀,這樣不斷追溯,何時能結(jié)束脑奠?所以為了避免無窮無盡基公,我們就做兩層,可以構(gòu)造圖3的傳播關(guān)系宋欺。
圖3.由兩層傳播生成節(jié)點A的Embedding(source)
第0層即輸入層轰豆,為每個節(jié)點的初始向量(根據(jù)所處領(lǐng)域里特征數(shù)據(jù)進行構(gòu)建),不妨稱為初始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)
即對本層已“收集完畢”的鄰接點數(shù)據(jù)戏罢,是否添加自身節(jié)點的上一層Embedding屋谭,如果是如何添加,如何激活龟糕,等等方式桐磁,最終輸出本層的Embedding。
表達成數(shù)學(xué)公式讲岁,即下面這個式子:
先解釋其中的符號含義:表示節(jié)點的Embedding我擂,下標(biāo)
或
表示節(jié)點的索引,上標(biāo)
表示第幾層的意思缓艳,
表示激活函數(shù)校摩,
和
表示矩陣,
表示節(jié)點
的鄰接點集合郎任,
表示收集操作秧耗。
這個公式的右邊就做了兩件事:
- 收集:即
部分
- 更新:除了
外的其他部分。
這個公式太抽象舶治,我們舉例說明三種常見的圖神經(jīng)網(wǎng)絡(luò)分井,看看是如何設(shè)計的。
傳播機制舉例
基礎(chǔ)版本
1)收集
即直接對上一層所有節(jié)點的Embedding求平均霉猛。
2)更新
即為用收集完畢的Embedding與本節(jié)點上一層的Embedding進行了加權(quán)和尺锚,然后再激活。顯然惜浅,由于上一層Embedding與本層Embedding維度相同瘫辩,所以和
為方陣。
圖卷積網(wǎng)絡(luò)(Graph Convolutional Networks)
1)收集
由可知坛悉,收集的輸入Embeddings不僅僅包括節(jié)點
的鄰接點們的Embedding伐厌,還包括節(jié)點
自身的Embedding,而分母變成了
裸影,是一種更復(fù)雜的加權(quán)和挣轨,不僅考慮了節(jié)點
的鄰接點的個數(shù),還考慮了每個鄰接點
自身的鄰接接個數(shù)轩猩。(基礎(chǔ)版本中的平均是最簡單的加權(quán)和)
2)更新
顯然比基礎(chǔ)版本簡單多了卷扮,不再考慮節(jié)點自己的上一層Embedding荡澎,直接讓收集好的Embedding乘上矩陣
后再激活完事。
之所以叫圖卷積網(wǎng)絡(luò)晤锹,是因為和卷積網(wǎng)絡(luò)的套路類似摩幔,對自己和周邊節(jié)點(像素)進行加權(quán)求和。
GraphSAGE
這不就是咱們上面提到的那個概念公式鞭铆?是的或衡,GraphSAGE由于其變體較多,所以需要用這個最抽象的公式來概括它衔彻。
1)收集
可以有如下的收集方式:
-
直接平均
這是最簡單的收集方式
- 池化
- LSTM
2)更新
收集好的Embedding經(jīng)過矩陣變換薇宠,節(jié)點
自己上一層的Embedding經(jīng)過矩陣
變換偷办,我們即可得到兩個Embedding艰额,把它倆給按列拼接起來。
這里要注意:它倆不是相加椒涯;矩陣和矩陣
都不是方陣柄沮,均自帶降維功能。
輸出是
維废岂,
是
維祖搓,但是經(jīng)過軍陣變換后,它倆都成了
維湖苞,經(jīng)過拼接拯欧,又恢復(fù)成
維。
訓(xùn)練的方式
無監(jiān)督的訓(xùn)練
跑不同的Aggregation和Update方法财骨,結(jié)合自定義的損失函數(shù)镐作,都可以訓(xùn)練出這些權(quán)重。這里的自定義損失函數(shù)隆箩,需要根據(jù)你對節(jié)點Embedding的最終期望该贾,讓它附加上一個什么樣的效果來設(shè)計。
例如word2vec利用序列中的上下文信息捌臊,用一個詞預(yù)測周圍詞杨蛋,構(gòu)造分類損失來訓(xùn)練。圖的無監(jiān)督訓(xùn)練也可以用一個節(jié)點預(yù)測周圍節(jié)點理澎,構(gòu)造分類損失來訓(xùn)練逞力。當(dāng)然,還有其他的無監(jiān)督套路糠爬,這個視頻不錯(18min~21min):https://www.bilibili.com/video/av53422483/
在無監(jiān)督任務(wù)中寇荧,獲取經(jīng)過神經(jīng)網(wǎng)絡(luò)優(yōu)化的Embedding秩铆,就是我們的目的灯变。
有監(jiān)督的訓(xùn)練
如果我們想要實現(xiàn)節(jié)點分類捅膘,那么我們就需要有帶標(biāo)簽的訓(xùn)練數(shù)據(jù),設(shè)計損失函數(shù)寻仗,即可進行訓(xùn)練。
例如署尤,我們有一批帶label的圖結(jié)構(gòu)的數(shù)據(jù),已經(jīng)標(biāo)記好了哪些是水軍曹体,哪些是普通用戶俗扇。我們就可以構(gòu)造如下的交叉熵損失函數(shù)箕别。
圖4.有監(jiān)督訓(xùn)練中損失函數(shù)的構(gòu)造(source)
-
轉(zhuǎn)換矩陣
注意其中的
即節(jié)點
的Embedding铜幽,
是節(jié)點
的label,那
是什么鬼串稀?
如剛才我們討論的除抛,圖神經(jīng)網(wǎng)絡(luò)的傳播結(jié)果,是所有節(jié)點經(jīng)過“傳播”優(yōu)化的Embedding母截,這些Embedding的維度均為
維(在初始化時定義好的)到忽,而我們分類任務(wù)可能是
類,所以清寇,需要再前向傳播的最后一層喘漏,加入矩陣,把
維的輸出映射成
維的輸出颗管,這樣才能讓交叉熵損失函數(shù)對應(yīng)起來陷遮。
由于我們列舉的是二分類任務(wù),圖4中也用的是二分類的交叉熵損失垦江,因此只需要1維輸出足矣帽馋,所以在這里的
為1,
為一個向量(可視為把
維壓縮為1維的特殊矩陣)比吭。
在有監(jiān)督任務(wù)中绽族,獲取經(jīng)過神經(jīng)網(wǎng)絡(luò)優(yōu)化的Embedding,還需要進行分類衩藤。所以Embedding不是目的吧慢,只是實現(xiàn)分類的手段。
一般的設(shè)計步驟
綜上赏表,各類圖神經(jīng)網(wǎng)絡(luò)架構(gòu)主要區(qū)別是:
- 傳播機制的區(qū)別检诗,即收集和更新的設(shè)計(圖3中小方塊)匈仗。
- 有無監(jiān)督及損失函數(shù)的區(qū)別。
設(shè)計圖神經(jīng)網(wǎng)絡(luò)的一般步驟是:
- 定義收集與更新方式逢慌。
- 定義損失函數(shù)悠轩。
- 在一批節(jié)點上進行訓(xùn)練。
- 生成Embedding攻泼,即使是模型未見過的Embedding火架,模型也可以對其初始化Embedding進行“傳播優(yōu)化”。
Node2Vec與GNN的對比
由于Embedding這個術(shù)語被我以廣義的方式忙菠,用了太多次何鸡,很容易導(dǎo)致混淆,所以這里對Embedding在不同狀態(tài)時做一個總結(jié)牛欢。
總結(jié)
圖神經(jīng)網(wǎng)絡(luò)是以鄰接點Embedding的淺層傳播來訓(xùn)練Embedding骡男。
改變Aggregation和update的方式洞翩,可以構(gòu)造不同的圖神經(jīng)網(wǎng)絡(luò)焰望;
既可以用無監(jiān)督的方式獲得Embedding已亥,也可以用有監(jiān)督的方式直接訓(xùn)練分類任務(wù)。
參考文獻
[1] Jure Leskovec, 《Graph Representation Learning》
[2] Jure Leskovec, 《Representation Learning on Networks》