整合在一起
現(xiàn)在我們已經(jīng)完成了消息傳遞、聚合和更新步驟,讓我們把它們放在一起,在單個(gè)節(jié)點(diǎn)i上形成單個(gè)GNN層:
這里我們使用求和聚合和一個(gè)簡(jiǎn)單的前饋層作為函數(shù)F和H。設(shè)hi∈Rd, W1,W2?Rd ' ×d其中d '為嵌入維數(shù)。
使用鄰接矩陣
到目前為止,我們通過(guò)單個(gè)節(jié)點(diǎn)i的視角觀(guān)察了整個(gè)GNN正向傳遞,當(dāng)給定整個(gè)鄰接矩陣a和X?RN×d中所有N=∥V∥節(jié)點(diǎn)特征時(shí),知道如何實(shí)現(xiàn)GNN正向傳遞也很重要。
在 MLP 前向傳遞中,我們想要對(duì)特征向量 xi 中的項(xiàng)目進(jìn)行加權(quán)。這可以看作是節(jié)點(diǎn)特征向量 xi∈Rd 和參數(shù)矩陣 W?Rd′×d 的點(diǎn)積,其中 d′ 是嵌入維度:
如果我們想對(duì)數(shù)據(jù)集中的所有樣本(矢量化)這樣做,我們只需將參數(shù)矩陣和特征矩陣相乘,就可以得到轉(zhuǎn)換后的節(jié)點(diǎn)特征(消息):
在gnn中,對(duì)于每個(gè)節(jié)點(diǎn)i,消息聚合操作包括獲取相鄰節(jié)點(diǎn)特征向量,轉(zhuǎn)換它們,并將它們相加(在和聚合的情況下)。
單行Ai對(duì)于A(yíng)ij=1的每個(gè)指標(biāo)j,我們知道節(jié)點(diǎn)i和j是相連的→eij∈E。例如,如果A2=[1,0,1,1,0],我們知道節(jié)點(diǎn)2與節(jié)點(diǎn)1、3和4連接。因此,當(dāng)我們將A2與Z=XW相乘時(shí),我們只考慮列1、3和4,而忽略列2和5:
比如說(shuō)A的第二行。
矩陣乘法就是A中的每一行與Z中的每一列的點(diǎn)積,這就是消息聚合的含義!!
獲取所有N的聚合消息,根據(jù)圖中節(jié)點(diǎn)之間的連接,將整個(gè)鄰接矩陣A與轉(zhuǎn)換后的節(jié)點(diǎn)特征進(jìn)行矩陣乘法:
但是這里有一個(gè)小問(wèn)題:觀(guān)察到聚合的消息沒(méi)有考慮節(jié)點(diǎn)i自己的特征向量(正如我們上面所做的那樣)。所以我們將自循環(huán)添加到A(每個(gè)節(jié)點(diǎn)i連接到自身)。
這意味著對(duì)角線(xiàn)的而數(shù)值需要進(jìn)行修改,用一些線(xiàn)性代數(shù),我們可以用單位矩陣來(lái)做這個(gè)!
添加自循環(huán)可以允許GNN將源節(jié)點(diǎn)的特征與其鄰居節(jié)點(diǎn)的特征一起聚合!!
有了這些,你就可以用矩陣而不是單節(jié)點(diǎn)來(lái)實(shí)現(xiàn)GNN的傳遞。
?要執(zhí)行平均值聚合(mean),我們可以簡(jiǎn)單地將總和除以1,對(duì)于上面的例子,由于A(yíng)2=[1,0,0,1,1]中有三個(gè)1,我們可以將∑j∈N2Wxj除以3,但是用gnn的鄰接矩陣公式來(lái)實(shí)現(xiàn)最大(max)和最小聚合(min)是不可能的。
GNN層堆疊
上面我們已經(jīng)介紹了單個(gè)GNN層是如何工作的,那么我們?nèi)绾问褂眠@些層構(gòu)建整個(gè)“網(wǎng)絡(luò)”呢?信息如何在層之間流動(dòng),GNN如何細(xì)化節(jié)點(diǎn)(和/或邊)的嵌入/表示?
- 第一個(gè)GNN層的輸入是節(jié)點(diǎn)特征X?RN×d。輸出是中間節(jié)點(diǎn)嵌入H1?RN×d1,其中d1是第一個(gè)嵌入維度。H1由h1i: 1→N∈Rd1組成。
- H1是第二層的輸入。下一個(gè)輸出是H2?RN×d2,其中d2是第二層的嵌入維度。同理,H2由h2i: 1→N∈Rd2組成。
- 經(jīng)過(guò)幾層之后,在輸出層L,輸出是HL?RN×dL。最后,HL由hLi: 1→N∈RdL構(gòu)成。
這里的{d1,d2,…,dL}的選擇完全取決于我們,可以看作是GNN的超參數(shù)。把這些看作是為MLP層選擇單位(“神經(jīng)元”的數(shù)量)。
節(jié)點(diǎn)特征/嵌入(“表示”)通過(guò)GNN傳遞。雖然結(jié)構(gòu)保持不變,但節(jié)點(diǎn)表示在各個(gè)層中不斷變化。邊表示也將改變,但不會(huì)改變連接或方向。
HL也可以做一些事情:
我們可以沿著第一個(gè)軸(即∑Nk=1hLk)將其相加,得到RdL中的向量。這個(gè)向量是整個(gè)圖的最新維度表示。它可以用于圖形分類(lèi)(例如:這是什么分子?)
我們可以在HL中連接向量(即?Nk=1hk,其中⊕是向量連接操作),并將其傳遞給一個(gè)Graph Autoencoder。當(dāng)輸入圖有噪聲或損壞,而我們想要重建去噪圖時(shí),就需要這個(gè)操作。
我們可以做節(jié)點(diǎn)分類(lèi)→這個(gè)節(jié)點(diǎn)屬于什么類(lèi)?在特定索引hLi (i:1→N)處嵌入的節(jié)點(diǎn)可以通過(guò)分類(lèi)器(如MLP)分為K個(gè)類(lèi)(例如:這是碳原子、氫原子還是氧原子?)
我們還可以進(jìn)行鏈接預(yù)測(cè)→某個(gè)節(jié)點(diǎn)i和j之間是否存在鏈接?hLi和hLj的節(jié)點(diǎn)嵌入可以被輸入到另一個(gè)基于sigmoid的MLP中,該MLP輸出這些節(jié)點(diǎn)之間存在邊的概率。
這些就是GNN在不同的應(yīng)用中所進(jìn)行的操作,無(wú)論哪種方式,每個(gè)h1→N∈HL都可以被堆疊,并被視為一批樣本。我們可以很容易地將其視為批處理。
對(duì)于給定的節(jié)點(diǎn)i, GNN聚合的第l層具有節(jié)點(diǎn)i的l跳鄰域。節(jié)點(diǎn)看到它的近鄰,并深入到網(wǎng)絡(luò)中,它與鄰居的鄰居交互。
這就是為什么對(duì)于非常小、稀疏(很少邊)的圖,大量的GNN層通常會(huì)導(dǎo)致性能下降:因?yàn)楣?jié)點(diǎn)嵌入都收斂到一個(gè)向量,因?yàn)槊總€(gè)節(jié)點(diǎn)都看到了許多跳之外的節(jié)點(diǎn)。對(duì)于小的圖,這是沒(méi)有任何作用的。
這也解釋了為什么大多數(shù)GNN論文在實(shí)驗(yàn)中經(jīng)常使用≤4層來(lái)防止網(wǎng)絡(luò)出現(xiàn)問(wèn)題。
以節(jié)點(diǎn)分類(lèi)為例訓(xùn)練GNN
在訓(xùn)練期間,對(duì)節(jié)點(diǎn)、邊或整個(gè)圖的預(yù)測(cè)可以使用損失函數(shù)(例如:交叉熵)與來(lái)自數(shù)據(jù)集的ground-truth標(biāo)簽進(jìn)行比較。也就是說(shuō)gnn能夠使用反向傳播和梯度下降以端到端方式進(jìn)行訓(xùn)練。
訓(xùn)練和測(cè)試數(shù)據(jù)
與常規(guī)ML一樣,圖數(shù)據(jù)也可以分為訓(xùn)練和測(cè)試。這有兩種方法:
訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)都在同一個(gè)圖中。每個(gè)集合中的節(jié)點(diǎn)相互連接。只是在訓(xùn)練期間,測(cè)試節(jié)點(diǎn)的標(biāo)簽是隱藏的,而訓(xùn)練節(jié)點(diǎn)的標(biāo)簽是可見(jiàn)的。但所有節(jié)點(diǎn)的特征對(duì)于GNN都是可見(jiàn)的。
我們可以對(duì)所有節(jié)點(diǎn)進(jìn)行二進(jìn)制掩碼(如果一個(gè)訓(xùn)練節(jié)點(diǎn)i連接到一個(gè)測(cè)試節(jié)點(diǎn)j,只需在鄰接矩陣中設(shè)置Aij=0)。
訓(xùn)練節(jié)點(diǎn)和測(cè)試節(jié)點(diǎn)都是同一個(gè)圖的一部分。訓(xùn)練節(jié)點(diǎn)暴露它們的特征和標(biāo)簽,而測(cè)試節(jié)點(diǎn)只暴露它們的特征。測(cè)試標(biāo)簽對(duì)模型隱藏。二進(jìn)制掩碼需要告訴GNN什么是訓(xùn)練節(jié)點(diǎn),什么是測(cè)試節(jié)點(diǎn)。
2、Inductive
另外一種方法是單獨(dú)的訓(xùn)練圖和測(cè)試圖。這類(lèi)似于常規(guī)的ML,其中模型在訓(xùn)練期間只看到特征和標(biāo)簽,并且只看到用于測(cè)試的特征。訓(xùn)練和測(cè)試在兩個(gè)獨(dú)立的圖上進(jìn)行。這些測(cè)試圖分布在外,可以檢查訓(xùn)練期間的泛化質(zhì)量。
與常規(guī)ML一樣,訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)是分開(kāi)保存的。GNN只使用來(lái)自訓(xùn)練節(jié)點(diǎn)的特征和標(biāo)簽。這里不需要二進(jìn)制掩碼來(lái)隱藏測(cè)試節(jié)點(diǎn),因?yàn)樗鼈儊?lái)自不同的集合。
反向傳播和梯度下降
在訓(xùn)練過(guò)程中,一旦我們向前通過(guò)GNN,我們就得到了最終的節(jié)點(diǎn)表示hLi∈HL, 為了以端到端方式訓(xùn)練,可以做以下工作:
- 將每個(gè)hLi輸入MLP分類(lèi)器,得到預(yù)測(cè)^yi
- 使用ground-truth yi和預(yù)測(cè)yi→J(yi,yi)計(jì)算損失
- 使用反向傳播來(lái)計(jì)算?J/?Wl,其中Wl是來(lái)自l層的參數(shù)矩陣
- 使用優(yōu)化器更新GNN中每一層的參數(shù)Wl
- (如果需要)還可以微調(diào)分類(lèi)器(MLP)網(wǎng)絡(luò)的權(quán)重。
-
芯片
+關(guān)注
關(guān)注
455文章
50721瀏覽量
423165 -
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100719 -
數(shù)學(xué)
+關(guān)注
關(guān)注
0文章
99瀏覽量
19235
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論