Task02:消息傳遞圖神經(jīng)網(wǎng)絡(luò)

圖計(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

一、消息傳遞范式介紹

圖1.消息傳遞圖神經(jīng)網(wǎng)絡(luò)

神經(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的Embedding

如圖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公式

如圖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)如下:

圖4.導(dǎo)入庫(kù)
圖5.定義GCNConv
圖6.建立模型

三、作業(yè)

圖7.作業(yè)要求
圖8.作業(yè)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容