一、引言
消息傳遞范式是一種聚合鄰接節(jié)點(diǎn)信息來(lái)更新中心節(jié)點(diǎn)信息的范式,它將卷積算子推廣到了不規(guī)則數(shù)據(jù)領(lǐng)域,實(shí)現(xiàn)了圖與神經(jīng)網(wǎng)絡(luò)的連接。消息傳遞范式因?yàn)楹?jiǎn)單、強(qiáng)大的特性,于是被人們廣泛地使用。遵循消息傳遞范式的圖神經(jīng)網(wǎng)絡(luò)被稱為消息傳遞圖神經(jīng)網(wǎng)絡(luò)。
二、 消息傳遞范式介紹
下圖展示了基于消息傳遞范式的聚合鄰接節(jié)點(diǎn)信息來(lái)更新中心節(jié)點(diǎn)信息的過(guò)程:

- 1.圖中黃色方框部分展示的是一次鄰接節(jié)點(diǎn)信息傳遞到中心節(jié)點(diǎn)的過(guò)程:B節(jié)點(diǎn)的鄰接節(jié)點(diǎn)(A,C)的信息經(jīng)過(guò)變換后聚合到B節(jié)點(diǎn),接著B(niǎo)節(jié)點(diǎn)信息與鄰接節(jié)點(diǎn)聚合信息一起經(jīng)過(guò)變換得到B節(jié)點(diǎn)的新的節(jié)點(diǎn)信息。同時(shí),分別如紅色和綠色方框部分所示,遵循同樣的過(guò)程,C、D節(jié)點(diǎn)的信息也被更新。實(shí)際上,同樣的過(guò)程在所有節(jié)點(diǎn)上都進(jìn)行了一遍,所有節(jié)點(diǎn)的信息都更新了一遍。
- 2.這樣的“鄰接節(jié)點(diǎn)信息傳遞到中心節(jié)點(diǎn)的過(guò)程”會(huì)進(jìn)行多次。如圖中藍(lán)色方框部分所示,A節(jié)點(diǎn)的鄰接節(jié)點(diǎn)(B,C,D)的已經(jīng)發(fā)生過(guò)一次更新的節(jié)點(diǎn)信息,經(jīng)過(guò)變換、聚合、再變換產(chǎn)生了A節(jié)點(diǎn)第二次更新的節(jié)點(diǎn)信息。多次更新后的節(jié)點(diǎn)信息就作為節(jié)點(diǎn)表征。
消息傳遞圖神經(jīng)網(wǎng)絡(luò)遵循上述的“聚合鄰接節(jié)點(diǎn)信息來(lái)更新中心節(jié)點(diǎn)信息的過(guò)程”,來(lái)生成節(jié)點(diǎn)表征。
注(1):神經(jīng)網(wǎng)絡(luò)的生成節(jié)點(diǎn)表征的操作稱為節(jié)點(diǎn)嵌入(Node Embedding),節(jié)點(diǎn)表征也可以稱為節(jié)點(diǎn)嵌入。這次學(xué)習(xí)規(guī)定節(jié)點(diǎn)嵌入只代指神經(jīng)網(wǎng)絡(luò)生成節(jié)點(diǎn)表征的操作。
注(2):未經(jīng)過(guò)訓(xùn)練的圖神經(jīng)網(wǎng)絡(luò)生成的節(jié)點(diǎn)表征還不是好的節(jié)點(diǎn)表征,好的節(jié)點(diǎn)表征可用于衡量節(jié)點(diǎn)之間的相似性。通過(guò)監(jiān)督學(xué)習(xí)對(duì)圖神經(jīng)網(wǎng)絡(luò)做很好的訓(xùn)練,圖神經(jīng)網(wǎng)絡(luò)才可以生成好的節(jié)點(diǎn)表征。
注(3),節(jié)點(diǎn)表征與節(jié)點(diǎn)屬性的區(qū)分:遵循被廣泛使用的約定,此次學(xué)習(xí)約定,節(jié)點(diǎn)屬性data.x是節(jié)點(diǎn)的第0層節(jié)點(diǎn)表征,第層的節(jié)點(diǎn)表征經(jīng)過(guò)一次的節(jié)點(diǎn)間信息傳遞產(chǎn)生第
層的節(jié)點(diǎn)表征。不過(guò),節(jié)點(diǎn)屬性不單指
data.x,廣義上它就指節(jié)點(diǎn)的屬性,如節(jié)點(diǎn)的度等。
三、MessagePassing基類初步分析
Pytorch Geometric(PyG)提供了MessagePassing基類,它封裝了“消息傳遞”的運(yùn)行流程。通過(guò)繼承MessagePassing基類,可以方便地構(gòu)造消息傳遞圖神經(jīng)網(wǎng)絡(luò)。構(gòu)造一個(gè)最簡(jiǎn)單的消息傳遞圖神經(jīng)網(wǎng)絡(luò)類,只需定義message()方法()、
update()方法(),以及使用的消息聚合方案(
aggr="add"、aggr="mean"或aggr="max")。
四、MessagePassing子類實(shí)例
主要從以下幾個(gè)步驟實(shí)現(xiàn):
- 向鄰接矩陣添加自環(huán)邊。
- 對(duì)節(jié)點(diǎn)表征做線性轉(zhuǎn)換。
- 計(jì)算歸一化系數(shù)。
- 歸一化鄰接節(jié)點(diǎn)的節(jié)點(diǎn)表征。
- 將相鄰節(jié)點(diǎn)表征相加("求和 "聚合)。
步驟1-3通常是在消息傳遞發(fā)生之前計(jì)算的。步驟4-5可以使用MessagePassing基類輕松處理。
五、結(jié)語(yǔ)
消息傳遞范式是一種聚合鄰接節(jié)點(diǎn)信息來(lái)更新中心節(jié)點(diǎn)信息的范式,它將卷積算子推廣到了不規(guī)則數(shù)據(jù)領(lǐng)域,實(shí)現(xiàn)了圖與神經(jīng)網(wǎng)絡(luò)的連接。
該范式包含三個(gè)步驟:
(1)鄰接節(jié)點(diǎn)信息變換;
(2)鄰接節(jié)點(diǎn)信息聚合到中心節(jié)點(diǎn);
(3)聚合信息變換。
因?yàn)楹?jiǎn)單且強(qiáng)大的特性,消息傳遞范式現(xiàn)被人們廣泛地使用?;诖朔妒?,可以定義聚合鄰接節(jié)點(diǎn)信息來(lái)生成中心節(jié)點(diǎn)表征的圖神經(jīng)網(wǎng)絡(luò)。在PyG中,MessagePassing基類是所有基于消息傳遞范式的圖神經(jīng)網(wǎng)絡(luò)的基類,它大大地方便了我們對(duì)圖神經(jīng)網(wǎng)絡(luò)的構(gòu)建。
要掌握基于MessagePassing基類構(gòu)建自己的圖神經(jīng)網(wǎng)絡(luò)類的方法,我們不能僅停留于理論理解層面,還需要通過(guò)逐行代碼調(diào)試,觀察代碼運(yùn)行流程,最終掌握對(duì)MessagePassing基類的實(shí)際應(yīng)用。