鍵.png)
使用這些基本 REST API 最佳實(shí)踐構(gòu)建出色的 API
?? 我假設(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ā))。
圖像本身就是一個(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ì)于小型和大型圖形都是高效和全面的。
單個(gè)圖神經(jīng)網(wǎng)絡(luò) (GNN) 層具有在圖中的每個(gè)節(jié)點(diǎn)上執(zhí)行的一系列步驟:
它們共同構(gòu)成了通過圖形學(xué)習(xí)的構(gòu)建塊。GDL 中的創(chuàng)新主要涉及對(duì)這 3 個(gè)步驟的更改。
請(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ú)熱編碼一樣)。
邊緣也可以具有特征?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是嵌入維度。
在處理邊緣特征時(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
聚合。
現(xiàn)在我們已經(jīng)弄清楚了單個(gè)GNN層是如何工作的,我們?nèi)绾螛?gòu)建這些層的整個(gè)“網(wǎng)絡(luò)”呢?信息如何在層之間流動(dòng),以及GNN如何優(yōu)化節(jié)點(diǎn)(和/或邊緣)的嵌入/表示?
的選擇?{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)練。
與常規(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í)行以下操作:
?? 這意味著GNN在消息傳遞和訓(xùn)練方面都很容易并行化。整個(gè)過程可以矢量化(如上所示)并在 GPU 上執(zhí)行!!
在本節(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)一致。
量子化學(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ò)的半監(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)
聚合通常涉及在總和、平均值、最大值和最小值設(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。一探究竟!
用于動(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 處理方法,包括以下組件:
每當(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ì)算損失(未顯示)。
上面就是我們對(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人工智能前沿
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)