圖卷積和訊息傳遞理論的視覺化詳解

本文中將研究如何基於訊息傳遞機制構建圖卷積神經網路,並建立一個模型來對具有嵌入視覺化的分子進行分類。

圖卷積和訊息傳遞理論的視覺化詳解

假設現在需要設計治療某些疾病的藥物。有一個其中包含成功治療疾病的藥物和不起作用的藥物資料集,現在需要設計一種新藥,並且想知道它是否可以治療這種疾病。如果可以建立一個有意義的藥物表示,就可以訓練一個分類器來預測它是否對疾病治療有用。我們的藥物是分子式,可以用圖表表示。該圖的節點是原子。也可以用特徵向量 x 來描述原子(它可以由原子屬性組成,如質量、電子數或其他)。為了對分子進行分類,我們希望利用有關其空間結構和原子特徵的知識來獲得一些有意義的表示。

圖卷積和訊息傳遞理論的視覺化詳解

以圖形表示的分子示例。原子有它們的特徵向量 X。特徵向量中的索引表示節點索引。

最直接的方法是聚合特徵向量,例如,簡單地取它們的平均值:

這是一個有效的解決方案,但它忽略了重要的分子空間結構。

圖卷積

我們可以提出另一種想法:用鄰接矩陣表示分子圖,並用特徵向量“擴充套件”其深度。我們得到了一個偽影象 [8, 8, N],其中 N 是節點特徵向量 x 的維數。現在可以使用常規卷積神經網路並提取分子嵌入。

圖卷積和訊息傳遞理論的視覺化詳解

圖結構可以表示為鄰接矩陣。節點特徵可以表示為影象中的通道(括號代表連線)。

這種方法利用了圖結構,但有一個巨大的缺點:如果改變節點的順序會得到不同的表示。所以這樣的表示不是置換不變數。但是鄰接矩陣中的節點順序是任意的, 例如,可以將列順序從 [0, 1, 2, 3, 4, 5, 6, 7] 更改為 [0, 2, 1, 3, 5, 4, 7, 6],它仍然是 圖的有效鄰接矩陣。所以可以建立所有可能的排列並將它們堆疊在一起,這會使我們有 1625702400 個可能的鄰接矩陣(8!* 8!)。資料量太大了,所以應該找到更好的解決方案。

所以圖卷積就出現了

當對影象應用常規卷積時會發生什麼?相鄰畫素的值乘以過濾器權重並相加。我們可以在圖表上做類似的事情嗎?是的,可以在矩陣 X 中堆疊節點特徵向量並將它們乘以鄰接矩陣 A,然後得到了更新的特徵 X`,它結合了有關節點最近鄰居的資訊。為簡單起見,讓我們考慮一個具有標量節點特徵的示例:

圖卷積和訊息傳遞理論的視覺化詳解

標量值節點特徵的示例。僅針對節點 0 說明了 1 跳距離,但對於所有其他節點也是一樣的。

每個節點都會獲得有關其最近鄰居的資訊(也稱為 1 跳距離)。鄰接矩陣上的乘法將特徵從一個節點傳播到另一個節點。

在影象域中可以透過增加濾波器大小來擴充套件感受野。在圖中則可以考慮更遠的鄰居。如果將 A^2 乘以 X——關於 2 跳距離節點的資訊會傳播到節點:

圖卷積和訊息傳遞理論的視覺化詳解

節點 0 現在具有關於節點 2 的資訊,該資訊位於 2 跳距離內。該圖僅針對節點 0 說明了躍點,但對於所有其他節點也是如此。

矩陣 A 的更高冪的行為方式相同:乘以 A^n 會導致特徵從 n 跳距離節點傳播,所以可以透過將乘法新增到鄰接矩陣的更高次方來擴充套件“感受野”。為了概括這一操作,可以將節點更新的函式定義為具有某些權重 w 的此類乘法之和:

多項式圖卷積濾波器。A——圖鄰接矩陣,w——標量權重,x——初始節點特徵,x‘——更新節點特徵。

新特徵 x’ 是來自 n 跳距離的節點的某種混合,相應距離的影響由權重 w 控制。這樣的操作可以被認為是一個圖卷積,濾波器 P 由權重 w 引數化。與影象上的卷積類似,圖卷積濾波器也可以具有不同的感受野並聚合有關節點鄰居的資訊,但鄰居的結構不像影象中的卷積核那樣規則。

圖卷積和訊息傳遞理論的視覺化詳解

這樣的多項式與一般卷積一樣是置換等變性的。可以使用圖拉普拉斯運算元而不是鄰接矩陣來傳遞特徵差異而不是節點之間的特徵值(也可以使用標準化的鄰接矩陣)。

將圖卷積表示為多項式的能力可以從一般的譜圖卷積( spectral graph convolutions)中推匯出來。例如,利用帶有圖拉普拉斯運算元的切比雪夫多項式的濾波器提供了直接譜圖卷積的近似值 [1]。

並且可以輕鬆地將其推廣到具有相同方程的節點特徵的任何維度上。但在更高維度的情況下,處理的是節點特徵矩陣 X 而不是節點特徵向量。例如,對於 N 個節點和節點中的 1 或 M 個特徵,我們得到:

x——節點特徵向量,X——堆疊節點特徵,M——節點特徵向量的維度,N——節點數量。

可以將特徵向量的“深度”維度視為影象卷積中的“通道”。

訊息傳遞

現在用另外一種不同的方式看看上面的討論。繼續採用上面討論的一個簡單的多項式卷積,只有兩個第一項,讓 w 等於 1:

現在如果將圖特徵矩陣 X 乘以 (I + A) 可以得到以下結果:

圖卷積和訊息傳遞理論的視覺化詳解

對於每個節點,都添加了相鄰節點的總和。因此該操作可以表示如下:

N(i) 表示節點 i 的一跳距離鄰居。

在這個例子中,“update”和“aggregate”只是簡單的求和函式。

這種關於節點特徵更新被稱為訊息傳遞機制。這樣的訊息傳遞的單次迭代等效於帶有過濾器 P= I + A 的圖卷積。那麼如果想從更遠的節點傳播資訊,我們可以再次重複這樣的操作幾次,從而用更多的多項式項逼近圖卷積。

但是需要注意的是:如果重複多次圖卷積,可能會導致圖過度平滑,其中每個節點嵌入對於所有連線的節點都變成相同的平均向量。

那麼如何增強訊息傳遞的表達能力?可以嘗試聚合和更新函式,並額外轉換節點特徵:

W1——更新節點特徵的權重矩陣,W2——更新相鄰節點特徵的權重矩陣。

可以使用任何排列不變函式進行聚合,例如 sum、max、mean 或更復雜的函式,例如 DeepSets。

例如,評估訊息傳遞的基本方法之一是 GCN 層:

第一眼看到這個公式可能並不熟悉,但讓我們使用“更新”和“聚合”函式來看看它:

圖卷積和訊息傳遞理論的視覺化詳解

使用單個矩陣 W 代替兩個權重矩陣 W1 和 W2。更新函式是求和,聚合函式是歸一化節點特徵的總和,包括節點特徵 i。d——表示節點度。

這樣就使用一個權重矩陣 W 而不是兩個,並使用 Kipf 和 Welling 歸一化求和作為聚合,還有一個求和作為更新函式。聚合操作評估鄰居和節點 i 本身,這相當於將自迴圈( self-loops)新增到圖中。

所以具有訊息傳遞機制的 GNN 可以表示為多次重複的聚合和更新函式。訊息傳遞的每次迭代都可以被視為一個新的 GNN 層。節點更新的所有操作都是可微的,並且可以使用可以學習的權重矩陣進行引數化。現在我們可以構建一個圖卷積網路並探索它是如何執行的。

一個實際的例子

使用上面提到的 GCN 層構建和訓練圖神經網路。對於這個例子,我將使用 PyG 庫和 [2] 中提供的 AIDS 圖資料集。它由 2000 個代表分子化合物的圖表組成:其中 1600 個被認為對 HIV 無活性,其中 400 個對 HIV 有活性。每個節點都有一個包含 38 個特徵的特徵向量。以下是資料集中分子圖表示的示例:

圖卷積和訊息傳遞理論的視覺化詳解

使用 networkx 庫視覺化來自 AIDS 資料集的樣本。

為簡單起見,我們將構建一個只有 3 個 GCN 層的模型。嵌入空間視覺化的最終嵌入維度將是 2-d。為了獲得圖嵌入,將使用均值聚合。為了對分子進行分類,將在圖嵌入之後使用一個簡單的線性分類器。

具有三個 GCN 層、平均池化和線性分類器的圖神經網路。

對於第一次訊息傳遞的迭代(第 1 層),初始特徵向量被投影到 256 維空間。在第二個訊息傳遞期間(第 2 層),特徵向量在同一維度上更新。在第三次訊息傳遞(第 3 層)期間,特徵被投影到二維空間,然後對所有節點特徵進行平均以獲得最終的圖嵌入。最後,這些嵌入被輸送到線性分類器。選擇二維維度只是為了視覺化,更高的維度肯定會更好。這樣的模型可以使用 PyG 庫來實現:

from torch import nn

from torch。nn import functional as F

from torch_geometric。nn import GCNConv

from torch_geometric。nn import global_mean_pool

class GCNModel(nn。Module):

def __init__(self, feature_node_dim=38, num_classes=2, hidden_dim=256, out_dim=2):

super(GCNModel, self)。__init__()

torch。manual_seed(123)

self。conv1 = GCNConv(feature_node_dim, hidden_dim)

self。conv2 = GCNConv(hidden_dim, hidden_dim)

self。conv3 = GCNConv(hidden_dim, out_dim)

self。linear = nn。Linear(out_dim, num_classes)

def forward(self, x, edge_index, batch):

# Graph convolutions with nonlinearity:

x = self。conv1(x, edge_index)

x = F。relu(x)

x = self。conv2(x, edge_index)

x = F。relu(x)

x = self。conv3(x, edge_index)

# Graph embedding:

x_embed = global_mean_pool(x, batch)

# Linear classifier:

x = self。linear(x_embed)

return x, x_embed

在其訓練期間,可以視覺化圖嵌入和分類器決策邊界。可以看到訊息傳遞操作如何使僅使用 3 個圖卷積層的生成有意義的圖嵌入的。這裡使用隨機初始化的模型嵌入並沒有線性可分分佈:

圖卷積和訊息傳遞理論的視覺化詳解

上圖是對隨機初始化的模型進行正向傳播得到的分子嵌入

但在訓練過程中,分子嵌入很快變成線性可分:

圖卷積和訊息傳遞理論的視覺化詳解

即使是 3 個圖卷積層也可以生成有意義的二維分子嵌入,這些嵌入可以使用線性模型進行分類,在驗證集上具有約 82% 的準確度。

總結

在本文中介紹了圖卷積如何表示為多項式,以及如何使用訊息傳遞機制來近似它。這種具有附加特徵變換的方法具有強大的表示能力。本文中僅僅觸及了圖卷積和圖神經網路的皮毛。圖卷積層和聚合函式有十幾種不同的體系結構。並且在圖上能夠完成的任務任務也很多,如節點分類、邊緣重建等。所以如果想深入挖掘,PyG教程是一個很好的開始。

作者:Gleb Kumichev

MORE

kaggle比賽交流和組隊

加我的微信,邀你進群

圖卷積和訊息傳遞理論的視覺化詳解

喜歡就關注一下吧:

點個

在看

你最好看!

TAG: 節點卷積訊息傳遞特徵向量嵌入