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

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

與圖像的聯(lián)系

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

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

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

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

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

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

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

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

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

圖的節(jié)點

請記住:節(jié)點表示實體或?qū)ο螅缬脩艋蛟印R虼耍斯?jié)點具有所表示實體的一系列特征屬性。這些節(jié)點屬性構(gòu)成了節(jié)點的特征(即“節(jié)點特征”或“節(jié)點嵌入”)。

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

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

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

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

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

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

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

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

消息傳遞

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

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

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

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

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

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

現(xiàn)在,為了數(shù)學上的方便,讓我們說?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è)我們使用一個函數(shù)?G來聚合鄰居的消息(使用總和、平均值、最大值或最小值)。最終聚合的消息可以表示如下:

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

 更新

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

 使用加法:

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

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

 使用串聯(lián):

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

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

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

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

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

 把它們放在一起

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

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

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

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

使用 Edge 功能

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

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

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

使用鄰接矩陣

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

~A=A+IN

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

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

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

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

 堆疊 GNN 層

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

  1. 第一GNN層的輸入是節(jié)點特征?X?RN×d。輸出是中間節(jié)點嵌入,?H1?RN×d1?其中?d1是第一個嵌入維度。?H1由?h1i?:?1→N∈Rd1??.
  2. H1是第二層的輸入。下一個輸出是?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é)點特征/嵌入(“表示”)通過 GNN 傳遞。結(jié)構(gòu)保持不變,但節(jié)點表示在各層中不斷變化。或者,邊表示也會更改,但不會更改連接或方向。

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

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

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

這就是為什么對于非常小的、稀疏的(很少的邊)圖,大量的GNN層通常會導致性能下降。這是因為所有嵌入的節(jié)點都收斂到一個單一向量,因為每個節(jié)點都看到了許多跳之外的節(jié)點。這是一個無用的情況!!

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


訓練 GNN(上下文:節(jié)點分類)

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

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

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

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

 透導性

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

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

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

 歸納

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

與常規(guī) ML 一樣,訓練和測試數(shù)據(jù)是分開保存的。GNN 僅使用來自訓練節(jié)點的特征和標簽。這里不需要二進制掩碼來隱藏測試節(jié)點,因為它們來自不同的集合。

反向支撐和梯度下降

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

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

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


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

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

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

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

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

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

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

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

讀出階段是更新步驟:

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

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

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

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

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

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

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

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

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

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

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

“重整化”是在增強鄰接矩陣上進行的?^A=~D?12~A~D?12。總而言之,新的組合消息傳遞和更新步驟如下所示:

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

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

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

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

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

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

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

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

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

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

GraphSAGE 

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

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

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

對于某一層?l?,

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

其中?⊕⊕?是向量串聯(lián)運算,?N(i)?是返回所有鄰居的子集的統(tǒng)一采樣函數(shù)。因此,如果一個節(jié)點有 5 個鄰居?{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é)點(彩色),而聚合器?k=2聚合來自?22?11?-hop 鄰域的采樣節(jié)點(彩色)

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

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

獎勵:GraphSAGE之前的工作包括DeepWalk。一探究竟!

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

用于動態(tài)圖深度學習的時態(tài)圖網(wǎng)絡(luò)

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

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

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

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

每當節(jié)點參與活動(節(jié)點更新或節(jié)點間交互)時,內(nèi)存都會更新。

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

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

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

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

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

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


 結(jié)論

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

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

上一篇:

使用 Node.js + OPEN AI 實現(xiàn)一個自動生成圖片項目

下一篇:

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

我們有何不同?

API服務(wù)商零注冊

多API并行試用

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

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

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

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費