一文讀懂圖卷積GNN原理、應用和庫

神經網絡最近的成功促進了模式識別和數據挖掘的研究。CNN、RNN和Transformer網絡結構在計算機視覺和自然語言處理中有眾(zhong) 多應用。

深度學習(xi) 非常擅長用於(yu) 矩陣輸入的數據,但是那些從(cong) 非歐幾裏得域生成數據的應用程序又如何呢?比如對象之間具有複雜關(guan) 係和相互依賴關(guan) 係?

我們(men) 將介紹圖神經網絡 (GNN),將從(cong) 圖論和基本定義(yi) 開始,然後介紹GNN的形式和原理,最後介紹GNN的一些應用。

什麽是圖?

GNN 最基本的部分是圖。在計算機科學中,圖是由兩(liang) 個(ge) 部分組成的數據結構:節點(頂點)和邊。

圖可以定義(yi) 為(wei) ,其中 是節點集, 是它們(men) 之間的邊。如果節點之間存在方向依賴性,則邊是有向的。如果不是,則邊是無向的。

一文讀懂:圖卷積GNN原理、應用和庫

圖表可以表示社交媒體(ti) 網絡或分子之類的東(dong) 西。將節點視為(wei) 用戶,將邊視為(wei) 連接。社交媒體(ti) 圖可能如下所示:

一文讀懂:圖卷積GNN原理、應用和庫

圖通常由鄰接矩陣 表示。如果圖有 個(ge) 節點,則 的維度為(wei) 。有時節點具有一組特征(例如,用戶配置文件)。如果節點有 個(ge) 特征,則節點特征矩陣 的維度為(wei) 。

圖為什麽難分析?

圖數據非常複雜,給現有的機器學習(xi) 算法帶來了很多挑戰。原因是傳(chuan) 統的機器學習(xi) 和深度學習(xi) 工具專(zhuan) 門處理簡單的數據類型,像具有相同結構和大小的圖像,我們(men) 可以認為(wei) 是固定大小的網格圖。文本和語音是序列,因此我們(men) 可以將它們(men) 視為(wei) 折線圖。

一文讀懂:圖卷積GNN原理、應用和庫

但是有更複雜的圖,沒有固定的形式,具有可變大小的無序節點,其中節點可以有不同數量的鄰居。

現有的機器學習(xi) 算法有一個(ge) 核心假設,即樣本彼此獨立。這對於(yu) 圖形數據是錯誤的,因為(wei) 每個(ge) 節點都通過各種類型的鏈接與(yu) 其他節點相關(guan) 。

Graph Neural Network

圖神經網絡 (GNN) 是一類深度學習(xi) 方法,旨在對圖描述的數據進行推理。GNN 是可以直接應用於(yu) 圖的神經網絡,並提供一種簡單的方法來執行節點級、邊級和圖級預測任務。GNN 可以完成卷積神經網絡 (CNN) 無法做到的事情。

為什麽CNN不行?

CNN 可用於(yu) 處理視覺輸入,並執行圖像分類、圖像識別或對象檢測等任務。這是 CNN 最受歡迎的地方。

CNN 背後的核心概念引入了隱藏的卷積層和池化層,以通過一組內(nei) 核形式的感受野來識別空間局部特征。

一文讀懂:圖卷積GNN原理、應用和庫

卷積如何對規則網格的圖像進行操作?我們(men) 在二維圖像上滑動卷積運算符窗口,然後在該滑動窗口上計算一些函數。然後,我們(men) 將它傳(chuan) 遞給許多層。

我們(men) 的目標是將卷積的概念推廣到這些簡單的二維格之外。使我們(men) 能夠達到目標的洞察力是卷積采用圖像的一個(ge) 小子塊(圖像的一個(ge) 小矩形部分),對其應用一個(ge) 函數,並產(chan) 生一個(ge) 新部分(一個(ge) 新像素)。

由於(yu) 圖的任意大小和複雜的拓撲結構,這意味著沒有空間局部性,因此很難在圖上執行 CNN。還有不固定的節點順序。如果我們(men) 第一次將節點標記為(wei) A、B、C、D、E,第二次標記為(wei) B、D、A、E、C,那麽(me) 網絡中矩陣的輸入就會(hui) 發生變化。圖對於(yu) 節點排序是不變的,因此無論我們(men) 如何對節點進行排序,我們(men) 都希望獲得相同的結果。

圖深度學習基礎

在圖論中,我們(men) 實現了節點嵌入的概念。意思是將節點映射到一個(ge) d維的嵌入空間(低維空間而不是圖的實際維度),使得圖中相似的節點相互靠近嵌入。

我們(men) 的目標是映射節點,使嵌入空間中的相似性近似於(yu) 網絡中的相似性。

假設和定義(yi) 為(wei) 圖中的兩(liang) 個(ge) 節點, 和 是兩(liang) 個(ge) 特征向量。現在我們(men) 將定義(yi) 編碼器函數 和 ,它們(men) 將特征向量轉換為(wei) 和 。

一文讀懂:圖卷積GNN原理、應用和庫

相似度函數可以是歐氏距離。現在的挑戰是如何想出encoder函數呢?

位置信息可以通過使用計算圖來實現。如下圖所示,是紅色節點,我們(men) 可以看到該節點如何連接到它的鄰居以及那些鄰居的鄰居。我們(men) 將看到所有可能的連接,並形成一個(ge) 計算圖。

一文讀懂:圖卷積GNN原理、應用和庫

一旦位置信息保存了計算圖,我們(men) 就開始聚合。這基本上是使用神經網絡完成的。神經網絡以灰色方框呈現。它們(men) 要求聚合是順序不變的,例如求和、平均值、最大值,因為(wei) 它們(men) 是置換不變函數。此屬性允許執行聚合。

一文讀懂:圖卷積GNN原理、應用和庫

讓我們(men) 繼續討論 GNN 中的前向傳(chuan) 播規則。它決(jue) 定了輸入的信息如何進入神經網絡的輸出端。

因此,為(wei) 了在這個(ge) 計算圖中執行前向傳(chuan) 播,我們(men) 需要 3 個(ge) 步驟:

步驟1:初始化網絡結構

步驟2:完成逐層計算 

第一部分是平均節點 的所有鄰居。

第二部分是節點 的前一層嵌入乘以偏差 ,這是一個(ge) 可訓練的權重矩陣,它基本上是節點 的自循環計算。

計算得到輸出,是K層鄰域聚合後的embedding。

現在,為(wei) 了訓練模型,我們(men) 需要在嵌入上定義(yi) 損失函數。我們(men) 可以將嵌入輸入任何損失函數並運行隨機梯度下降來訓練權重參數。

訓練過程可以是無人監督的或有監督的:

無監督訓練:僅(jin) 使用圖形結構:相似的節點具有相似的嵌入。

有監督訓練:為(wei) 節點分類、正常或異常節點等監督任務訓練模型。

GCN原理

GCN 首次在“Spectral Networks and Deep Locally Connected Networks on Graphs”(Bruna 等人,2014 年)中引入,作為(wei) 將神經網絡應用於(yu) 圖結構數據的方法。

最簡單的 GCN 隻有三個(ge) 不同的算子:

  • 圖卷積
  • 線性層
  • 非線性激活

這些操作通常按此順序完成。它們(men) 一起構成一個(ge) 網絡層。我們(men) 可以組合一個(ge) 或多個(ge) 層來形成一個(ge) 完整的 GCN。

在 Python 中,我們(men) 可以使用 PyTorch 輕鬆構建 GCN:

import torch from torch import nn

class GCN(nn.Module): def __init__(self, *sizes): super().__init__()
self.layers = nn.ModuleList([
nn.Linear(x, y) for x, y in zip(sizes[:-1], sizes[1:])
]) def forward(self, vertices, edges): # ----- Build the adjacency matrix ----- # Start with self-connections adj = torch.eye(len(vertices)) # edges contain connected vertices: [vertex_0, vertex_1] adj[edges[:, 0], edges[:, 1]] = 1 adj[edges[:, 1], edges[:, 0]] = 1

# ----- Forward data pass ----- for layer in self.layers:
vertices = torch.sigmoid(layer(adj @ vertices))

return vertices

GraphSAGE

GraphSAGE(Hamilton 等人,NIPS 2017)是一種動態圖的表示學習(xi) 技術。它可以預測新節點的嵌入,而不需要重新訓練過程。

一文讀懂:圖卷積GNN原理、應用和庫

為(wei) 此,GraphSAGE使用歸納學習(xi) 。它根據節點的特征和鄰域學習(xi) 可以引入新節點嵌入的聚合函數。

可以注意到兩(liang) 個(ge) 很大的不同。GraphSAGE不是將兩(liang) 件事加在一起然後忘記它們(men) ,而是使用一個(ge) 通用的聚合函數,通過將它們(men) 連接起來使它們(men) 分開。

之前使用的是均值聚合函數,簡單地從(cong) 鄰居那裏獲取消息並將它們(men) 相加,然後根據鄰居的數量對其進行歸一化。GraphSAGE也可以采用池化方法,或者也可以使用像 LSTM 這樣的深度神經網絡。

圖卷積庫

接下來我們(men) 介紹一些高質量的圖形神經網絡開源庫,它們(men) 將幫助搭建GNN模型。

PyTorch Geometric

https://pytorch-geometric.readthedocs.io/en/latest/

PyTorch Geometric (PyG) 是一個(ge) 用於(yu) 深度學習(xi) 圖形等不規則結構的 Python 庫。該項目由兩(liang) 位博士開發和發布。來自多特蒙德大學的學生 Matthias Fey 和 Jan E. Lenssen。

除了一般的圖形數據結構和處理方法外,它還包含關(guan) 係學習(xi) 和 3D 數據處理領域的各種最近發布的方法。PyTorch Geometric 通過利用稀疏 GPU 加速、提供專(zhuan) 用 CUDA 內(nei) 核以及為(wei) 不同大小的輸入示例引入高效的小批量處理來實現高數據吞吐量。

Deep Graph Library (DGL)

https://www.dgl.ai/

Deep Graph Library (DGL) 是另一個(ge) 易於(yu) 使用、高性能和可擴展的 Python 庫,用於(yu) 圖的深度學習(xi) 。它有一個(ge) 非常幹淨簡潔的 API。DGL 引入了一個(ge) 有用的高級抽象,允許自動批處理。

Graph Nets

https://github.com/deepmind/graph_nets

Graph Nets用於(yu) 在 Tensorflow 和 Sonnet 中構建圖形網絡。該庫適用於(yu) TensorFlow 的 CPU 和 GPU 版本。它提供了靈活性,幾乎任何現有的 GNN 都可以使用 6 個(ge) 核心函數來實現,並且可以擴展到時間圖。Graph Nets 需要 TensorFlow 1,所以它感覺已經過時了,盡管它隻有大約 3 年的曆史。

Spektral

https://graphneural.network/

Spektral 是一個(ge) 基於(yu) Keras API 和 TensorFlow 2 的開源 Python 圖深度學習(xi) 庫。該庫的主要目標是提供一個(ge) 簡單、靈活的框架來創建 GNN。您可以使用 Spektral 對社交網絡的用戶進行分類、預測分子特性、使用 GAN 生成新圖、聚類節點、預測鏈接以及任何其他由圖描述數據的任務。

圖卷積應用

圖結構數據無處不在。GNN 解決(jue) 的問題可以分為(wei) 以下幾類:

節點分類:這裏的任務是通過查看其鄰居的標簽來確定樣本(表示為(wei) 節點)的標簽。通常,此類問題以半監督方式進行訓練,僅(jin) 標記圖的一部分。

圖分類:這裏的任務是將整個(ge) 圖分類為(wei) 不同的類別。這就像圖像分類,但目標變成了圖域。圖分類的應用很多,範圍從(cong) 確定蛋白質是否是生物信息學中的酶,到 NLP 中的文檔分類或社交網絡分析。

圖可視化:是數學和計算機科學的一個(ge) 領域,處於(yu) 幾何圖論和信息可視化的交叉點。它關(guan) 注圖形的可視化表示,揭示數據中可能存在的結構和異常,並幫助用戶理解圖形。

鏈接預測:在這裏,算法必須了解圖中實體(ti) 之間的關(guan) 係,並且它還試圖預測兩(liang) 個(ge) 實體(ti) 之間是否存在連接。在社交網絡中推斷社交互動或向用戶推薦可能的朋友是必不可少的。它還被用於(yu) 推薦係統問題和預測犯罪團夥(huo) 。

圖聚類:指以圖的形式對數據進行聚類。對圖數據執行兩(liang) 種不同形式的聚類。頂點聚類試圖根據邊權重或邊距離將圖的節點聚類成密集連接的區域組。圖聚類的第二種形式將圖視為(wei) 要聚類的對象,並根據相似性對這些對象進行聚類。

【競賽報名/項目谘詢+微信:mollywei007】

上一篇

聖路易斯華盛頓大學ED1錄取率約35%!ED1申請人比去年增長12%……

下一篇

11年級寒假提前做美本申請?

你也可能喜歡

  • 暫無相關文章!

評論已經被關(guan) 閉。

插入圖片
返回頂部