圖計(jì)算任務(wù)成功的關(guān)鍵是為節(jié)點(diǎn)生成節(jié)點(diǎn)表征,本節(jié)主要任務(wù)如下:
1.首先學(xué)習(xí)圖神經(jīng)網(wǎng)絡(luò)生成節(jié)點(diǎn)表征的規(guī)范-消息傳遞范式(Message Passing)
2.接著初步分析PyG為我們提供的實(shí)現(xiàn)圖神經(jīng)網(wǎng)絡(luò)的MessagePassing基類。
3.然后以繼承MessagePassing基類的GCNConv類為例,學(xué)習(xí)如何通過繼承MessagePassing基類實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖神經(jīng)網(wǎng)絡(luò)。
4.再接著對(duì)MessagePassing基類進(jìn)行剖析
5.最后我們將學(xué)習(xí)再繼承MessagePassing基類的子類中覆寫message(),aggreate(),message_and_aggreate()和update()方法的規(guī)范。
參考:1.https://blog.csdn.net/qq_41987033/article/details/103377561(這篇超贊的!?。?/p>
2.Datawhale提供的課程鏈接:https://github.com/datawhalechina/team-learning-nlp/blob/master/GNN
一、消息傳遞范式介紹

神經(jīng)網(wǎng)絡(luò)的生成節(jié)點(diǎn)表征的操作稱為節(jié)點(diǎn)嵌入(Node Embedding),節(jié)點(diǎn)表征也可以稱為節(jié)點(diǎn)嵌入。為了統(tǒng)一表述,在本篇內(nèi)容中我們規(guī)定節(jié)點(diǎn)嵌入只代指神經(jīng)網(wǎng)絡(luò)生成節(jié)點(diǎn)表征的操作。
下圖展示了基于消息傳遞范式的生成節(jié)點(diǎn)表征的過程:

如圖2所示,節(jié)點(diǎn)A是我們的目標(biāo)節(jié)點(diǎn),節(jié)點(diǎn)A的Embedding,是它的鄰接節(jié)點(diǎn)B、C、D的Embedding傳播的結(jié)果,而節(jié)點(diǎn)B、C、D的Embedding,又是由它們各自的鄰接節(jié)點(diǎn)Embedding傳播的結(jié)果。具體步驟如下:
1.B節(jié)點(diǎn)的鄰接節(jié)點(diǎn)(A、C)的信息經(jīng)過變換后聚合到B節(jié)點(diǎn),接著B節(jié)點(diǎn)信息與鄰居節(jié)點(diǎn)聚合信息一起經(jīng)過變換得到B節(jié)點(diǎn)的新的節(jié)點(diǎn)信息。C、D節(jié)點(diǎn)的信息也遵循同樣的過程被更新。實(shí)際上,同樣的過程在所有節(jié)點(diǎn)都進(jìn)行了一遍,所有節(jié)點(diǎn)的信息都更新了一遍。
2.這樣的鄰居節(jié)點(diǎn)信息傳遞到中心節(jié)點(diǎn)的過程會(huì)進(jìn)行多次。如圖2所示,A節(jié)點(diǎn)的鄰接節(jié)點(diǎn)(B,C,D)的已經(jīng)更新過一次的節(jié)點(diǎn)信息經(jīng)過變換、聚合、再變換得到了A節(jié)點(diǎn)第二次更新的節(jié)點(diǎn)信息。多次更新后的節(jié)點(diǎn)信息就作為節(jié)點(diǎn)表征。
二、GCNConv源碼解析
PyG提供了MessagePassing基類,它封裝了“消息傳遞”的運(yùn)行流程。通過繼承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")。

如圖3向量形式的GCNConv公式,其中,相鄰節(jié)點(diǎn)的特征首先通過權(quán)重矩陣進(jìn)行轉(zhuǎn)換,然后按端點(diǎn)的度進(jìn)行歸一化處理,最后進(jìn)行求和。這個(gè)公式可以分為以下幾個(gè)步驟:
a.向鄰接矩陣添加自環(huán)邊
b.線性轉(zhuǎn)換節(jié)點(diǎn)特征矩陣
c.計(jì)算歸一化系數(shù)
d.歸一化j中的節(jié)點(diǎn)特征
e.將相鄰節(jié)點(diǎn)特征相加("求和"聚合)
GCNConv公式實(shí)現(xiàn)中步驟a-c是在消息傳遞發(fā)生之前計(jì)算的,步驟d-e可以使用MessagePassing基類處理。該層的實(shí)現(xiàn)如下:



三、作業(yè)

