?? 我假設(shè)本文中的圖形是未加權(quán)的(沒有邊緣權(quán)重或距離)和無方向的(節(jié)點(diǎn)之間沒有關(guān)聯(lián)方向)。我假設(shè)這些圖是同質(zhì)的(單一類型的節(jié)點(diǎn)和邊;相反的是“異構(gòu)”)。

圖形與常規(guī)數(shù)據(jù)的不同之處在于,它們具有神經(jīng)網(wǎng)絡(luò)必須尊重的結(jié)構(gòu);不利用它是一種浪費(fèi)。下面是一個(gè)社交媒體圖的例子,其中節(jié)點(diǎn)是用戶,邊緣是他們的互動(dòng)(如關(guān)注/喜歡/轉(zhuǎn)發(fā))。

與圖像的聯(lián)系

圖像本身就是一個(gè)圖表!它是一種稱為“網(wǎng)格圖”的特殊變體,其中所有內(nèi)部節(jié)點(diǎn)和角節(jié)點(diǎn)的節(jié)點(diǎn)傳出邊的數(shù)量都是恒定的。圖像網(wǎng)格圖中存在一些一致的結(jié)構(gòu),允許對(duì)其執(zhí)行簡單的類似卷積的操作。

圖像可以被認(rèn)為是一個(gè)特殊的圖形,其中每個(gè)像素都是一個(gè)節(jié)點(diǎn),并通過假想邊緣連接到它周圍的其他像素。當(dāng)然,從這種角度查看圖像是不切實(shí)際的,因?yàn)檫@意味著要有一個(gè)非常大的圖形。例如,一個(gè)簡單的 CIFAR-10 圖像 32×32×332×32×3 將具有 30723072 節(jié)點(diǎn)和 1984 條邊。對(duì)于較大的 ImageNet 圖像 224×224×3224×224×3 ,這些數(shù)字會(huì)爆炸。

圖像可以被認(rèn)為是一個(gè)特殊的圖形,其中每個(gè)像素都是一個(gè)節(jié)點(diǎn),并通過假想邊緣連接到它周圍的其他像素。當(dāng)然,從這種角度查看圖像是不切實(shí)際的,因?yàn)檫@意味著要有一個(gè)非常大的圖形。例如,一個(gè)簡單的 CIFAR-10 圖像 32×32×332×32×3 將具有 30723072 節(jié)點(diǎn)和 1984 條邊。對(duì)于較大的 ImageNet 圖像 224×224×3224×224×3 ,這些數(shù)字會(huì)爆炸。

然而,正如你所觀察到的,圖表并不是那么完美。不同的節(jié)點(diǎn)具有不同的程度(與其他節(jié)點(diǎn)的連接數(shù)),并且無處不在。沒有固定的結(jié)構(gòu),但結(jié)構(gòu)是為圖形增加價(jià)值的原因。因此,任何在此圖上學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)都必須在學(xué)習(xí)節(jié)點(diǎn)(和邊)之間的空間關(guān)系時(shí)尊重這種結(jié)構(gòu)。

?? 盡管我們想在這里使用圖像處理技術(shù),但最好有特殊的特定于圖形的方法,這些方法對(duì)于小型和大型圖形都是高效和全面的。

 圖神經(jīng)網(wǎng)絡(luò)

單個(gè)圖神經(jīng)網(wǎng)絡(luò) (GNN) 層具有在圖中的每個(gè)節(jié)點(diǎn)上執(zhí)行的一系列步驟:

  1.  消息傳遞
  2.  集合體
  3.  更新

它們共同構(gòu)成了通過圖形學(xué)習(xí)的構(gòu)建塊。GDL 中的創(chuàng)新主要涉及對(duì)這 3 個(gè)步驟的更改。

圖的節(jié)點(diǎn)

請(qǐng)記?。汗?jié)點(diǎn)表示實(shí)體或?qū)ο?,例如用戶或原子。因此,此?jié)點(diǎn)具有所表示實(shí)體的一系列特征屬性。這些節(jié)點(diǎn)屬性構(gòu)成了節(jié)點(diǎn)的特征(即“節(jié)點(diǎn)特征”或“節(jié)點(diǎn)嵌入”)。

通常,這些特征可以使用?Rd?中的向量來表示。此向量要么是潛在維度嵌入,要么是以每個(gè)條目都是實(shí)體的不同屬性的方式構(gòu)造的。

?? 例如,在社交媒體圖中,用戶節(jié)點(diǎn)具有年齡、性別、政治傾向、關(guān)系狀態(tài)等屬性,這些屬性可以用數(shù)字表示。

同樣,在分子圖中,原子節(jié)點(diǎn)可能具有化學(xué)性質(zhì),例如對(duì)水的親和力、力、能量等,也可以用數(shù)字表示。

這些節(jié)點(diǎn)特征是GNN的輸入,我們將在后面的章節(jié)中看到。從形式上講,每個(gè)節(jié)點(diǎn)都有關(guān)聯(lián)的節(jié)點(diǎn)?i?特征?xi∈Rd和標(biāo)簽?yi(可以是連續(xù)的,也可以是離散的,就像獨(dú)熱編碼一樣)。

圖的邊(關(guān)系)

邊緣也可以具有特征?aij∈Rd′?,例如,在邊緣有意義的情況下(如原子之間的化學(xué)鍵)。我們可以將下面顯示的分子視為一個(gè)圖形,其中原子是節(jié)點(diǎn),鍵是邊緣。

雖然原子節(jié)點(diǎn)本身具有各自的特征向量,但邊可以具有不同的邊緣特征,這些特征編碼不同類型的鍵(單鍵、雙鍵、三鍵)。不過,為了簡單起見,我將在下一篇文章中省略邊緣功能。

現(xiàn)在我們知道了如何在圖中表示節(jié)點(diǎn)和邊,讓我們從一個(gè)簡單的圖開始,其中包含一堆節(jié)點(diǎn)(具有節(jié)點(diǎn)特征)和邊。

消息傳遞

GNN以其學(xué)習(xí)結(jié)構(gòu)信息的能力而聞名。通常,具有相似特征或?qū)傩缘墓?jié)點(diǎn)會(huì)相互連接(在社交媒體設(shè)置中也是如此)。GNN利用這一事實(shí),了解特定節(jié)點(diǎn)如何以及為什么相互連接,而某些節(jié)點(diǎn)則不連接。為此,GNN 會(huì)查看節(jié)點(diǎn)的鄰域。

節(jié)點(diǎn)的鄰域定義為由邊連接到?Ni?的一組節(jié)點(diǎn)?i?j?。?i?形式上,?Ni={j?:?eij∈E}?.

一個(gè)人是由他所處的圈子塑造的。類似地,GNN 可以通過查看其鄰域中的節(jié)點(diǎn)來了解很多關(guān)于節(jié)點(diǎn)?i?的信息?Ni?。為了實(shí)現(xiàn)源節(jié)點(diǎn)?i?和鄰居之間的信息共享?j?,GNN參與消息傳遞。

對(duì)于 GNN 層,消息傳遞被定義為獲取鄰居的節(jié)點(diǎn)特征、轉(zhuǎn)換它們并將它們“傳遞”到源節(jié)點(diǎn)的過程。對(duì)圖中的所有節(jié)點(diǎn)并行重復(fù)此過程。這樣,在這一步結(jié)束時(shí),所有社區(qū)都會(huì)被檢查。

讓我們放大節(jié)點(diǎn)?66?并檢查鄰域?N6={1,?3,?4}6={1,?3,?4}?。我們獲取每個(gè)節(jié)點(diǎn)特征?x1?、?x3?和?x4?,并使用函數(shù)對(duì)其進(jìn)行轉(zhuǎn)換,該函數(shù)?F?可以是簡單的神經(jīng)網(wǎng)絡(luò)(MLP 或 RNN)或仿射變換?F(xj)=Wj?xj+b?。簡單地說,“消息”是從源節(jié)點(diǎn)傳入的轉(zhuǎn)換節(jié)點(diǎn)特征。

 F? 可以是簡單的仿射變換或神經(jīng)網(wǎng)絡(luò)。

現(xiàn)在,為了數(shù)學(xué)上的方便,讓我們說?F(xj)=Wj?xj。這里,?□?□????表示簡單的矩陣乘法。

 集合體

現(xiàn)在我們已經(jīng)將轉(zhuǎn)換后的消息?{F(x1),F(x3),F(x4)}傳遞給了 node?66?,我們必須以某種方式聚合(“組合”)它們。可以做很多事情來將它們結(jié)合起來。常用的聚合函數(shù)包括:

Sum?=∑j∈NiWj?xj

Mean?=∑j∈NiWj?xj|Ni|

Max?=maxj∈Ni({Wj?xj})

Min?=minj∈Ni({Wj?xj})

假設(shè)我們使用一個(gè)函數(shù)?G來聚合鄰居的消息(使用總和、平均值、最大值或最小值)。最終聚合的消息可以表示如下:

ˉmi=G({Wj?xj:j∈Ni})

 更新

使用這些聚合消息,GNN層現(xiàn)在必須更新源節(jié)點(diǎn)?i的特征。在此更新步驟結(jié)束時(shí),節(jié)點(diǎn)不僅應(yīng)該了解自己,還應(yīng)該了解其鄰居。這是通過獲取節(jié)點(diǎn)?i的特征向量并將其與聚合消息相結(jié)合來確保的。同樣,一個(gè)簡單的加法或串聯(lián)操作可以解決這個(gè)問題。

 使用加法:

hi=σ(K(H(xi)+ˉmi)))(6)(6)?

其中?σ是激活函數(shù)(ReLU、ELU、Tanh),?H是簡單神經(jīng)網(wǎng)絡(luò) (MLP) 或仿射變換,是?K另一個(gè)將添加的向量投影到另一個(gè)維度的 MLP。

 使用串聯(lián):

hi=σ(K(H(xi)?⊕?ˉmi)))(7)(7)?

為了進(jìn)一步抽象此更新步驟,我們可以將其 K? 視為將消息和源節(jié)點(diǎn)嵌入在一起的投影函數(shù):

hi=σ(K(H(xi),?ˉmi)))(8)(8)?

???? 在表示法方面,初始節(jié)點(diǎn)特征稱為?xi

在前向通過第一個(gè) GNN 層后,我們改為調(diào)用節(jié)點(diǎn)特征?hi??。假設(shè)我們有更多的 GNN 層,我們可以將節(jié)點(diǎn)特征表示為?hli??當(dāng)前 GNN 層索引的位置?l?。此外,很明顯?h0i=xi??(即GNN的輸入)。

 把它們放在一起

現(xiàn)在我們已經(jīng)完成了消息傳遞、聚合和更新步驟,讓我們把它們放在一起,在單個(gè)節(jié)點(diǎn)?i?上形成一個(gè) GNN 層:

hi=σ(W1?hi+∑j∈NiW2?hj)(9)(9)?

在這里,我們使用?sum?聚合和簡單的前饋層作為函數(shù)?F?和?H.

?? 請(qǐng)確保節(jié)點(diǎn)嵌入的?W1?尺寸和?W2與節(jié)點(diǎn)嵌入正確交換。如果?hi∈Rd?∈,?W1,W2?Rd′×d?其中?d是嵌入維度。

使用 Edge 功能

在處理邊緣特征時(shí),我們必須找到一種方法來對(duì)它們進(jìn)行 GNN 前向傳遞。假設(shè)邊具有特征?aij∈Rd′。為了在特定層?l更新它們,我們可以考慮邊緣兩側(cè)節(jié)點(diǎn)的嵌入。正式

alij=T(hli,?hlj,?al?1ij)(10)(10)

其中?T是一個(gè)簡單的神經(jīng)網(wǎng)絡(luò)(MLP 或 RNN),它接收來自連接節(jié)點(diǎn)?i的嵌入以及?j前一層的邊緣嵌入?al?1ij。

使用鄰接矩陣

到目前為止,我們研究了整個(gè)GNN前向通過孤立的單個(gè)節(jié)點(diǎn)?i?及其鄰域的透鏡?Ni。但是,在給定整個(gè)鄰接矩陣?A?和所有?N=∥V∥節(jié)點(diǎn)特征時(shí)?X?RN×d,了解如何實(shí)現(xiàn) GNN 前向傳遞也很重要。

在普通的機(jī)器學(xué)習(xí)中,在MLP前向傳遞中,我們希望對(duì)特征向量中的項(xiàng)目進(jìn)行加權(quán)?xi?。這可以看作是節(jié)點(diǎn)特征向量?xi∈Rd和參數(shù)矩陣的點(diǎn)積,?W?Rd′×d?其中?d?是嵌入維度:

zi=W?xi??∈Rd′(11)(11)

如果我們想對(duì)數(shù)據(jù)集中的所有樣本(矢量化)執(zhí)行此操作,我們只需對(duì)參數(shù)矩陣和特征進(jìn)行矩陣相乘即可獲得轉(zhuǎn)換后的節(jié)點(diǎn)特征(消息):

Z=(WX)T=XW???RN×d′(12)(12)

現(xiàn)在,在 GNN 中,對(duì)于每個(gè)節(jié)點(diǎn),消息聚合操作涉及獲取相鄰節(jié)點(diǎn)?i?的特征向量,轉(zhuǎn)換它們并將它們相加(在聚合的情況下?sum?)。

鄰接矩陣中的一行?Ai?告訴我們哪些節(jié)點(diǎn)?j?連接到?i?。對(duì)于每個(gè) indiex?j?where?Aij=1,我們知道節(jié)點(diǎn)?i?并?j?連接→?eij∈E?。

例如,如果?A2=[1,0,1,1,0]2=[1,0,1,1,0]?,我們知道節(jié)點(diǎn)連接到節(jié)點(diǎn)?22?11?、?33?和?44?。因此,當(dāng)我們乘?A2?以?Z=XW時(shí),我們只考慮列 、?33?,而?44?忽略列?22?11?和?55?。在矩陣乘法方面,我們正在做:

讓我們關(guān)注?A的第 2 行。

矩陣乘法只是每?A?一行與每一列的點(diǎn)積?Z=XW!!

…而這正是消息聚合的本質(zhì)!!

為了根據(jù)連接獲得圖中所有?N?節(jié)點(diǎn)的聚合消息,我們可以?A?將整個(gè)鄰接矩陣與轉(zhuǎn)換后的節(jié)點(diǎn)特征進(jìn)行矩陣相乘:

Y=AZ=AXW(13)(13)Y=

!? 一個(gè)小問題:觀察聚合消息沒有考慮節(jié)點(diǎn)?i?自己的特征向量(就像我們上面所做的那樣)。為此,我們添加了自循環(huán)?A?(每個(gè)節(jié)點(diǎn)?i?都連接到自身)。

這意味著在每個(gè)位置?Aii?(即對(duì)角線)更改為?00?a?11?。

通過一些線性代數(shù),我們可以使用恒等矩陣來做到這一點(diǎn)!

~A=A+IN

添加自循環(huán)允許 GNN 將源節(jié)點(diǎn)的特征與其鄰居的特征聚合在一起??!

這樣一來,您就可以使用矩陣而不是單個(gè)節(jié)點(diǎn)進(jìn)行 GNN 前向傳遞。

? 要執(zhí)行?mean?聚合,我們可以簡單地將總和除以?11?中的 s 計(jì)數(shù)?Ai?。對(duì)于上面的例子,由于 中有三個(gè)?11?,我們可以?∑j∈N2Wxj∑除以?33?…?A2=[1,0,0,1,1]這正是平均值!!

但是,不可能通過GNN的鄰接矩陣公式來實(shí)現(xiàn) max 和 min 聚合。

 堆疊 GNN 層

現(xiàn)在我們已經(jīng)弄清楚了單個(gè)GNN層是如何工作的,我們?nèi)绾螛?gòu)建這些層的整個(gè)“網(wǎng)絡(luò)”呢?信息如何在層之間流動(dòng),以及GNN如何優(yōu)化節(jié)點(diǎn)(和/或邊緣)的嵌入/表示?

  1. 第一GNN層的輸入是節(jié)點(diǎn)特征?X?RN×d。輸出是中間節(jié)點(diǎn)嵌入,?H1?RN×d1?其中?d1是第一個(gè)嵌入維度。?H1由?h1i?:?1→N∈Rd1??.
  2. H1是第二層的輸入。下一個(gè)輸出是?H2?RN×d2第二層的嵌入維度。同樣,?H2由?h2i?:?1→N∈Rd2?.
  3. 幾層之后,在輸出層?L,輸出為?HL?RN×dL。最后,?HL由?hLi?:?1→N∈RdL??.

的選擇?{d1,d2,…,dL}?完全取決于我們,并且是GNN的超參數(shù)。可以把這些看作是為一堆MLP層選擇單位(“神經(jīng)元”的數(shù)量)。

節(jié)點(diǎn)特征/嵌入(“表示”)通過 GNN 傳遞。結(jié)構(gòu)保持不變,但節(jié)點(diǎn)表示在各層中不斷變化。或者,邊表示也會(huì)更改,但不會(huì)更改連接或方向。

現(xiàn)在,我們可以做?HL一些事情:

無論哪種方式,有趣的是,每個(gè)?h1→N∈HL?1→都可以堆疊起來,并被認(rèn)為是一批樣品。人們可以很容易地將其視為一個(gè)批次。

?? 對(duì)于給定的節(jié)點(diǎn),GNN聚合中的?lth?層具有節(jié)點(diǎn)?i?的?i?l?-hop鄰域。最初,節(jié)點(diǎn)看到它的近鄰,并深入到網(wǎng)絡(luò)中,它與鄰居的鄰居進(jìn)行交互,等等。

這就是為什么對(duì)于非常小的、稀疏的(很少的邊)圖,大量的GNN層通常會(huì)導(dǎo)致性能下降。這是因?yàn)樗星度氲墓?jié)點(diǎn)都收斂到一個(gè)單一向量,因?yàn)槊總€(gè)節(jié)點(diǎn)都看到了許多跳之外的節(jié)點(diǎn)。這是一個(gè)無用的情況!!

這就解釋了為什么大多數(shù)GNN論文經(jīng)常使用 ≤4≤4 層進(jìn)行實(shí)驗(yàn),以防止網(wǎng)絡(luò)死亡。


訓(xùn)練 GNN(上下文:節(jié)點(diǎn)分類)

?? 在訓(xùn)練過程中,可以使用損失函數(shù)(例如:交叉熵)將節(jié)點(diǎn)、邊或整個(gè)圖的預(yù)測與數(shù)據(jù)集中的真值標(biāo)簽進(jìn)行比較。

這使得 GNN 能夠使用原版反向道具和梯度下降以端到端的方式進(jìn)行訓(xùn)練。

訓(xùn)練和測試圖形數(shù)據(jù)

與常規(guī) ML 一樣,圖形數(shù)據(jù)也可以拆分為訓(xùn)練和測試。這可以通過以下兩種方式之一完成:

 透導(dǎo)性

訓(xùn)練和測試數(shù)據(jù)都存在于同一個(gè)圖中。每個(gè)集合中的節(jié)點(diǎn)相互連接。只不過,在訓(xùn)練過程中,測試節(jié)點(diǎn)的標(biāo)簽是隱藏的,而訓(xùn)練節(jié)點(diǎn)的標(biāo)簽是可見的。但是,所有節(jié)點(diǎn)的特征對(duì) GNN 都是可見的。

我們可以使用所有節(jié)點(diǎn)上的二進(jìn)制掩碼來做到這一點(diǎn)(如果訓(xùn)練節(jié)點(diǎn)連接到測試節(jié)點(diǎn)?i?j?,只需在鄰接矩陣中設(shè)置?Aij=0?即可)。

在轉(zhuǎn)導(dǎo)設(shè)置中,訓(xùn)練和測試節(jié)點(diǎn)都是 SAME 圖的一部分。只是訓(xùn)練節(jié)點(diǎn)暴露其特征和標(biāo)簽,而測試節(jié)點(diǎn)僅暴露其特征。測試標(biāo)簽在模型中是隱藏的。需要二進(jìn)制掩碼來告訴GNN什么是訓(xùn)練節(jié)點(diǎn),什么是測試節(jié)點(diǎn)。

 歸納

在這里,有單獨(dú)的訓(xùn)練圖和測試圖,它們彼此隱藏。這類似于常規(guī) ML,其中模型在訓(xùn)練期間僅看到特征和標(biāo)簽,并且只看到用于測試的特征。訓(xùn)練和測試在兩個(gè)獨(dú)立的、孤立的圖形上進(jìn)行。有時(shí),這些測試圖是分布外的,以檢查訓(xùn)練期間泛化的質(zhì)量。

與常規(guī) ML 一樣,訓(xùn)練和測試數(shù)據(jù)是分開保存的。GNN 僅使用來自訓(xùn)練節(jié)點(diǎn)的特征和標(biāo)簽。這里不需要二進(jìn)制掩碼來隱藏測試節(jié)點(diǎn),因?yàn)樗鼈儊碜圆煌募稀?/p>

反向支撐和梯度下降

在訓(xùn)練過程中,一旦我們通過GNN進(jìn)行前向傳遞,我們就會(huì)得到最終的?hLi∈HL?節(jié)點(diǎn)表示。要以端到端的方式訓(xùn)練網(wǎng)絡(luò),我們可以執(zhí)行以下操作:

  1. 將每個(gè)?hLi?數(shù)據(jù)饋送到 MLP 分類器中以獲得預(yù)測?^yi?^?
  2. 使用地面實(shí)況?yi和預(yù)測?^yi?→?J(^yi,yi)計(jì)算損失
  3. 使用 Backpropagatino 計(jì)算梯度,??J?Wl?其中?Wl?是層的參數(shù)矩陣
  4. 使用一些優(yōu)化器(如梯度下降)來更新 GNN 中每個(gè)層的參數(shù)?Wl
  5. (可選)您還可以微調(diào)分類器 (MLP) 網(wǎng)絡(luò)的權(quán)重。

?? 這意味著GNN在消息傳遞和訓(xùn)練方面都很容易并行化。整個(gè)過程可以矢量化(如上所示)并在 GPU 上執(zhí)行!!


流行的圖神經(jīng)網(wǎng)絡(luò)

在本節(jié)中,我將介紹文獻(xiàn)中的一些流行作品,并將其方程式和數(shù)學(xué)歸類為上述 3 個(gè) GNN 步驟(或者至少我嘗試過)。許多流行的體系結(jié)構(gòu)將消息傳遞和聚合步驟合并到一個(gè)一起執(zhí)行的函數(shù)中,而不是一個(gè)接一個(gè)地顯式執(zhí)行。我試圖在本節(jié)中分解它們,但為了數(shù)學(xué)上的方便,最好將它們視為一個(gè)單一的運(yùn)算!

我調(diào)整了本節(jié)中介紹的網(wǎng)絡(luò)符號(hào),使其與本文的符號(hào)一致。

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

量子化學(xué)的神經(jīng)信息傳遞

消息傳遞神經(jīng)網(wǎng)絡(luò)(MPNN)將前向傳遞分解為具有消息傳遞功能的消息傳遞階段,以及具有頂點(diǎn)更新功能?MlUl的讀出階段。

MPNN 將消息傳遞和聚合步驟合并到單個(gè)消息傳遞階段:

ml+1i=∑j∈NiMl(hli,?hlj,?eij)(15)(15)

讀出階段是更新步驟:

hl+1i=Ul(hli,?ml+1i)(16)(16)?

其中?ml+1v是聚合消息,?hl+1v?是嵌入的更新節(jié)點(diǎn)。這與我上面提到的過程非常相似。消息函數(shù)是?F?和?G?的混合,函數(shù)?Ul?Ml是?K?。這里,?eij指的是也可以省略的可能邊緣特征。

本文以MPNN為一般框架,并將文獻(xiàn)中的其他作品作為MPNN的特殊變體。作者進(jìn)一步將MPNN用于量子化學(xué)應(yīng)用。

圖卷積網(wǎng)絡(luò)

基于圖卷積網(wǎng)絡(luò)的半監(jiān)督分類

圖卷積網(wǎng)絡(luò) (GCN) 論文以鄰接矩陣的形式研究整個(gè)圖。首先,將自連接添加到鄰接矩陣中,以確保所有節(jié)點(diǎn)都連接到自身以獲得?~A~?.這確保了我們?cè)谙⒕酆掀陂g考慮了源節(jié)點(diǎn)的嵌入。組合的 Message Aggregation 和 Update 步驟如下所示:

Hl+1=σ(~AHlWl)(17)(17)

其中?Wl是可學(xué)習(xí)的參數(shù)矩陣。當(dāng)然,我改?X?為?H?在任意層?l?概括節(jié)點(diǎn)特征,其中?H0=X

?? 由于矩陣乘法 (?A(BC)=(AB)C 的關(guān)聯(lián)性質(zhì),我們?cè)谀膫€(gè)序列中復(fù)配矩陣并不重要(要么是?~AHl第一個(gè),下一個(gè)乘法后,要么是?HlWl?下一個(gè)乘法前乘法?~AWl?)。

然而,作者 Kipf 和 Welling 進(jìn)一步引入了度矩陣?~D作為重整化的一種形式,以避免數(shù)值不穩(wěn)定和梯度爆炸/消失:

~Dii=∑j~Aij(18)(18)

“重整化”是在增強(qiáng)鄰接矩陣上進(jìn)行的?^A=~D?12~A~D?12??偠灾碌慕M合消息傳遞和更新步驟如下所示:

Hl+1=σ(^AHlWl)(19)(19)

 圖注意力網(wǎng)絡(luò)

聚合通常涉及在總和、平均值、最大值和最小值設(shè)置中平等對(duì)待所有鄰居。然而,在大多數(shù)情況下,一些鄰居比其他鄰居更重要。圖注意力網(wǎng)絡(luò)(GAT)通過使用Vaswani等人(2017)的自注意力對(duì)源節(jié)點(diǎn)與其鄰居之間的邊緣進(jìn)行加權(quán)來確保這一點(diǎn)。

邊緣權(quán)重?αij?的生成方式如下。

αij=Softmax(LeakyReLU(WaT?[Whli?⊕?Whlj]))(20)(20)

其中?Wa∈R2d′和?W?Rd′×d是學(xué)習(xí)參數(shù),是嵌入維度,?d′?⊕⊕?是向量串聯(lián)操作。

雖然初始消息傳遞步驟與 MPNN/GCN 相同,但組合的消息聚合和更新步驟是所有鄰居和節(jié)點(diǎn)本身的加權(quán)總和:

hi=∑j∈Ni ∪ {i}αij ? Whlj

邊緣重要性權(quán)重有助于了解鄰居對(duì)源節(jié)點(diǎn)的影響程度。

與 GCN 一樣,添加了自循環(huán),以便源節(jié)點(diǎn)可以考慮自己的表示,以便將來的表示。

GraphSAGE 

GraphSAGE 代表 Graph SAmple 和 AggreGatE。這是一個(gè)為大型、非常密集的圖形生成節(jié)點(diǎn)嵌入的模型(用于 Pinterest 等公司)。

這項(xiàng)工作介紹了節(jié)點(diǎn)鄰域上的學(xué)習(xí)聚合器。與考慮鄰域中所有節(jié)點(diǎn)的傳統(tǒng) GAT 或 GCN 不同,GraphSAGE 統(tǒng)一對(duì)鄰域進(jìn)行采樣,并在其上使用學(xué)習(xí)到的聚合器。

假設(shè)我們?cè)诰W(wǎng)絡(luò)(深度)中有層,每一?L層?l∈{1,…,L}都著眼于源節(jié)點(diǎn)的較大?l?躍點(diǎn)鄰域(正如人們所期望的那樣)。然后,在通過 MLP?F和非線性?σ?傳遞之前,通過將嵌入的節(jié)點(diǎn)與采樣消息連接起來來更新每個(gè)源節(jié)點(diǎn)。

對(duì)于某一層?l?,

hlN(i)=AGGREGATEl({hl?1j:j∈N(i)})hli=σ(F(hl?1i?⊕?hlN(i)))(22)

其中?⊕⊕?是向量串聯(lián)運(yùn)算,?N(i)?是返回所有鄰居的子集的統(tǒng)一采樣函數(shù)。因此,如果一個(gè)節(jié)點(diǎn)有 5 個(gè)鄰居?{1,2,3,4,5}{1,2,3,4,5}?,則可能的?N(i)輸出將是?{1,4,5}{1,4,5}?或?{2,5}{2,5}?。

聚合器?k=1聚合來自 -hop 鄰域的采樣節(jié)點(diǎn)(彩色),而聚合器?k=2聚合來自?22?11?-hop 鄰域的采樣節(jié)點(diǎn)(彩色)

未來可能的工作可能是試驗(yàn)非均勻抽樣函數(shù)來選擇鄰居。

注意:在本文中,作者使用?K和?k?來表示圖層索引。在本文中,我分別使用?L?和?l?來保持一致。此外,本文還用于?v?表示源節(jié)點(diǎn)和?u?表示鄰居?j?。?i

獎(jiǎng)勵(lì):GraphSAGE之前的工作包括DeepWalk。一探究竟!

 時(shí)態(tài)圖網(wǎng)絡(luò)

用于動(dòng)態(tài)圖深度學(xué)習(xí)的時(shí)態(tài)圖網(wǎng)絡(luò)

到目前為止所描述的網(wǎng)絡(luò)在靜態(tài)圖上工作。大多數(shù)現(xiàn)實(shí)情況都適用于動(dòng)態(tài)圖,其中節(jié)點(diǎn)和邊在一段時(shí)間內(nèi)添加、刪除或更新。時(shí)態(tài)圖網(wǎng)絡(luò) (TGN) 適用于連續(xù)時(shí)間動(dòng)態(tài)圖 (CTDG),可以表示為按時(shí)間順序排序的事件列表。

本文將事件分為兩種類型:節(jié)點(diǎn)級(jí)事件和交互事件。節(jié)點(diǎn)級(jí)事件涉及一個(gè)孤立的節(jié)點(diǎn)(例如:用戶更新其個(gè)人資料的簡歷),而交互事件涉及兩個(gè)可能連接或可能不連接的節(jié)點(diǎn)(例如:用戶 A 轉(zhuǎn)發(fā)/關(guān)注用戶 B)。

TGN 提供模塊化的 CTDG 處理方法,包括以下組件:

  1. 消息傳遞函數(shù) →隔離節(jié)點(diǎn)或交互節(jié)點(diǎn)之間的消息傳遞(對(duì)于任一類型的事件)。
  2. 消息聚合函數(shù) → **通過查看多個(gè)時(shí)間步長的時(shí)間鄰域而不是給定時(shí)間步長的局部鄰域來使用 GAT 的聚合。
  3. 內(nèi)存更新程序→允許節(jié)點(diǎn)具有長期依賴關(guān)系,并表示節(jié)點(diǎn)在潛在(“壓縮”)空間中的歷史記錄。該模塊根據(jù)隨時(shí)間發(fā)生的交互來更新節(jié)點(diǎn)的內(nèi)存。
  4. 時(shí)間嵌入→一種表示捕獲時(shí)間本質(zhì)的節(jié)點(diǎn)的方法。
  5. 鏈路預(yù)測→事件中涉及的節(jié)點(diǎn)的時(shí)間嵌入通過一些神經(jīng)網(wǎng)絡(luò)來計(jì)算邊緣概率(即,邊緣將來會(huì)發(fā)生嗎?當(dāng)然,在訓(xùn)練過程中,我們知道邊緣存在,所以邊緣標(biāo)簽是 11 。我們需要訓(xùn)練基于 Sigmoid 的網(wǎng)絡(luò)來像往常一樣預(yù)測這一點(diǎn)。

每當(dāng)節(jié)點(diǎn)參與活動(dòng)(節(jié)點(diǎn)更新或節(jié)點(diǎn)間交互)時(shí),內(nèi)存都會(huì)更新。

(1) 對(duì)于每個(gè)事件和 22 批處理中,TGN 為涉及該事件 11 的所有節(jié)點(diǎn)生成消息。

(2)接下來,for TGN聚合每個(gè)節(jié)點(diǎn)?mi?所有時(shí)間步?t?的消息;這稱為節(jié)點(diǎn)?i?的時(shí)間鄰域。

(3)接下來,TGN使用聚合的消息?ˉmi(t)來更新每個(gè)節(jié)點(diǎn)?si(t)?的內(nèi)存。

(4) 一旦所有節(jié)點(diǎn)的內(nèi)存?si(t)?都是最新的,它就用于計(jì)算批處理中特定交互中使用的所有節(jié)點(diǎn)的“臨時(shí)節(jié)點(diǎn)嵌入”。?zi(t)

(5) 然后將這些節(jié)點(diǎn)嵌入輸入 MLP 或神經(jīng)網(wǎng)絡(luò),以獲得每個(gè)事件發(fā)生的概率(使用 Sigmoid 激活)。

(6) 然后,我們可以像往常一樣使用二元交叉熵 (BCE) 計(jì)算損失(未顯示)。


 結(jié)論

上面就是我們對(duì)圖神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)總結(jié),圖深度學(xué)習(xí)在處理具有類似網(wǎng)絡(luò)結(jié)構(gòu)的問題時(shí)是一個(gè)很好的工具。它們很容易理解,我們可以使用PyTorch Geometric、spectral、Deep Graph Library、Jraph(jax)以及TensorFlow-gnn來實(shí)現(xiàn)。GDL已經(jīng)顯示出前景,并將繼續(xù)作為一個(gè)領(lǐng)域發(fā)展。

本文章轉(zhuǎn)載微信公眾號(hào)@Python人工智能前沿

上一篇:

使用 Node.js + OPEN AI 實(shí)現(xiàn)一個(gè)自動(dòng)生成圖片項(xiàng)目

下一篇:

神經(jīng)網(wǎng)絡(luò)算法 - 一文搞懂CNN(卷積神經(jīng)網(wǎng)絡(luò))
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場景實(shí)測,選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)