什么是GNN?——聚合、更新與循環

在傳統的深度學習中,卷積神經網絡(CNN)擅長處理網格結構數據(如圖像),循環神經網絡(RNN)擅長處理序列數據(如文本)。但當數據以的形式存在時(如社交網絡、分子結構、推薦系統),我們需要一種全新的架構——圖神經網絡(Graph Neural Network, GNN)

文章目錄

    • 一、GNN核心思想:圖上的信息傳遞
    • 二、GNN三大核心流程
      • 1. 聚合(Aggregate):收集鄰居信息
      • 2. 更新(Update):融合自身信息
      • 3. 循環(Loop):多層信息傳遞
    • 三、 GNN的完整計算流程
    • 四、GNN的應用場景
    • 五、GNN的優勢與挑戰
    • 六、總結

一、GNN核心思想:圖上的信息傳遞

GNN的核心思想是通過鄰居節點的信息聚合來學習節點表示。與傳統神經網絡不同,GNN考慮了圖結構中的拓撲關系,使每個節點的表示都包含其鄰居信息。

節點特征
聚合鄰居信息
更新節點狀態
循環多層
最終節點表示

二、GNN三大核心流程

1. 聚合(Aggregate):收集鄰居信息

聚合操作是GNN的第一步,也是最重要的一步。每個節點從其鄰居節點收集信息,將這些信息聚合成一個單一向量。

數學表達:

hN(v)(k)=AGGREGATE(k)({hu(k?1),?u∈N(v)})h_{N(v)}^{(k)} = \text{AGGREGATE}^{(k)}\left(\{h_u^{(k-1)}, \forall u \in N(v)\}\right)hN(v)(k)?=AGGREGATE(k)({hu(k?1)?,?uN(v)})

其中:

  • N(v)N(v)N(v) 表示節點 vvv 的鄰居集合
  • hu(k?1)h_u^{(k-1)}hu(k?1)? 是鄰居節點 uuu 在上一層的表示
  • AGGREGATE\text{AGGREGATE}AGGREGATE 可以是多種函數:均值、最大值、求和等

常用聚合函數:

聚合方式公式特點
均值聚合hN(v)(k)=1N(v)∑u∈N(v)hu(k?1)h_{N(v)}^{(k)} = \frac{1}{ N(v) }\sum_{u\in N(v)}h_u^{(k-1)}hN(v)(k)?=N(v)1?uN(v)?hu(k?1)?平等對待所有鄰居
最大池化hN(v)=max?({hu,?u∈N(v)})h_{N(v)} = \max(\{h_u, \forall u\in N(v)\})hN(v)?=max({hu?,?uN(v)})捕獲最顯著特征
求和聚合hN(v)=∑u∈N(v)huh_{N(v)} = \sum_{u\in N(v)}h_uhN(v)?=uN(v)?hu?保留鄰居信息總量
# 偽代碼示例:均值聚合
def aggregate(neighbors):total = sum(neighbor_features for neighbor in neighbors)return total / len(neighbors)

2. 更新(Update):融合自身信息

在聚合鄰居信息后,節點需要將鄰居信息與自身信息結合,更新自己的狀態表示。

數學表達:

hv(k)=UPDATE(k)(hv(k?1),hN(v)(k))h_v^{(k)} = \text{UPDATE}^{(k)}\left(h_v^{(k-1)}, h_{N(v)}^{(k)}\right)hv(k)?=UPDATE(k)(hv(k?1)?,hN(v)(k)?)

其中:

  • hv(k?1)h_v^{(k-1)}hv(k?1)? 是節點 vvv 上一層的表示
  • hN(v)(k)h_{N(v)}^{(k)}hN(v)(k)? 是當前聚合的鄰居信息
  • UPDATE\text{UPDATE}UPDATE 通常是一個神經網絡(如MLP)或線性變換

更新函數示例:

hv(k)=σ(W(k)?CONCAT(hv(k?1),hN(v)(k)))h_v^{(k)} = \sigma\left(W^{(k)} \cdot \text{CONCAT}(h_v^{(k-1)}, h_{N(v)}^{(k)})\right)hv(k)?=σ(W(k)?CONCAT(hv(k?1)?,hN(v)(k)?))

其中:

  • W(k)W^{(k)}W(k) 是可學習的權重矩陣
  • σ\sigmaσ 是非線性激活函數(如ReLU)
  • CONCAT\text{CONCAT}CONCAT 表示向量拼接操作
# 偽代碼示例:更新函數
def update(self_feature, aggregated_neighbors):combined = concatenate([self_feature, aggregated_neighbors])return relu(dense_layer(combined))

3. 循環(Loop):多層信息傳遞

單層GNN只能聚合直接鄰居的信息。通過堆疊多層GNN,信息可以在圖中傳播得更遠,捕獲更廣泛的圖結構信息。

數學表達:

H(k)=GNNLayer(k)(H(k?1),A)H^{(k)} = \text{GNNLayer}^{(k)}(H^{(k-1)}, A)H(k)=GNNLayer(k)(H(k?1),A)

其中:

  • H(k)H^{(k)}H(k) 是第 kkk 層所有節點的表示矩陣
  • AAA 是圖的鄰接矩陣
  • 通常 H(0)H^{(0)}H(0) 是節點的初始特征矩陣 XXX

循環過程:

graph LRH0[初始特征 H???] --> L1[GNN層1]L1 --> H1[H?1?]H1 --> L2[GNN層2]L2 --> H2[H?2?]H2 --> L3[...]L3 --> HK[H??? 最終表示]

層數選擇:

  • 2-3層通常足夠處理大多數任務
  • 層數過多可能導致過度平滑(所有節點表示趨同)
  • 層數過少則無法捕獲長距離依賴

三、 GNN的完整計算流程

讓我們通過一個具體例子理解三步流程:

聚合
更新
循環
節點A初始特征
收集鄰居B,C信息
節點C初始特征
節點B初始特征
節點A新特征
下一層輸入

一個完整的K層GNN可以表示為:

hN(v)(k)=∑u∈N(v)hu(k?1)∣N(v)∣(均值聚合)hv(k)=σ(W(k)?[hv(k?1)∥hN(v)(k)]+b(k))(更新)hvfinal=hv(K)(經過K層循環)\begin{aligned} h_{N(v)}^{(k)} &= \sum_{u \in N(v)} \frac{h_u^{(k-1)}}{|N(v)|} \quad \text{(均值聚合)} \\ h_v^{(k)} &= \sigma\left(W^{(k)} \cdot [h_v^{(k-1)} \| h_{N(v)}^{(k)}] + b^{(k)}\right) \quad \text{(更新)} \\ h_v^{\text{final}} &= h_v^{(K)} \quad \text{(經過K層循環)} \end{aligned} hN(v)(k)?hv(k)?hvfinal??=uN(v)?N(v)hu(k?1)??(均值聚合)=σ(W(k)?[hv(k?1)?hN(v)(k)?]+b(k))(更新)=hv(K)?(經過K層循環)?

四、GNN的應用場景

  1. 節點分類:預測節點類別(如用戶分類)
  2. 鏈接預測:預測缺失的邊(如推薦好友)
  3. 圖分類:對整個圖進行分類(如分子性質預測)
  4. 聚類:發現圖中的社區結構
  5. 生成任務:生成新的圖結構(如分子設計)

五、GNN的優勢與挑戰

優勢

  • 顯式利用圖結構信息
  • 強大的關系推理能力
  • 對不規則數據建模能力強

挑戰

  • 過度平滑問題
  • 動態圖處理困難
  • 大規模圖計算的效率問題

六、總結

GNN通過聚合-更新-循環的三步流程,巧妙地解決了圖結構數據的表示學習問題。這種架構讓神經網絡能夠理解復雜的關系網絡,在社交分析、生物化學、推薦系統等領域展現出強大潛力。隨著研究的深入,GNN正在不斷發展出更強大的變體,成為現代AI不可或缺的工具。

輸入圖數據
聚合鄰居信息
更新節點狀態
循環多層傳播
得到節點表示
下游任務
節點分類
鏈接預測
圖分類

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89957.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89957.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89957.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入解析 Django REST Framework 的 APIView 核心方法

在 Python 3 中,Django 的 APIView 類是 Django REST Framework(DRF)中用于構建 API 視圖的核心基類。它提供了一個靈活的框架來處理 HTTP 請求,并通過一系列方法支持認證、權限檢查和請求限制等功能。self.perform_authenticatio…

神經網絡——卷積層

目錄 卷積層介紹 Conv2d 卷積動畫演示 卷積代碼演示 綜合代碼案例 卷積層介紹 卷積層是卷積神經網絡(CNN)的核心組件,它通過卷積運算提取輸入數據的特征。 基本原理 卷積層通過卷積核(過濾器)在輸入數據&…

神經網絡——線性層

在機器學習中,線性層(Linear Layer) 是一種基礎的神經網絡組件,也稱為全連接層(Fully Connected Layer) 或密集層(Dense Layer)。 其嚴格的數學定義為:對輸入數據執行線…

大模型高效適配:軟提示調優 Prompt Tuning

The Power of Scale for Parameter-Efficient Prompt Tuning ruatishi 軟提示向量 具體是什么 《The Power of Scale for Parameter-Efficient Prompt Tuning》中增加的部分是“軟提示(soft prompts)”,這是一種針對特定下游任務,添加到輸入文本中的可調參數序列。它與傳統…

https正向代理 GoProxy

背景: 在安全隔離的內網環境中,部署于內網的應用如需調用公網第三方接口(如支付、短信),可通過正向代理服務實現訪問。 GoProxy 下載: https://github.com/snail007/goproxy/releases 使用文檔&#xff…

Java IO流體系詳解:字節流、字符流與NIO/BIO對比及文件拷貝實踐

一、字節流與字符流:如何選擇? 1.1 核心區別特性字節流字符流處理單位字節(8位)字符(16位Unicode)適用場景二進制文件(圖片/視頻)文本文件(TXT/CSV)編碼處理需…

QT6 源,七章對話框與多窗體(5) 文件對話框 QFileDialog 篇二:源碼帶注釋

&#xff08;13&#xff09;本源代碼定義于頭文件 qfiledialog . h &#xff1a; #ifndef QFILEDIALOG_H #define QFILEDIALOG_H#include <QtWidgets/qtwidgetsglobal.h> #include <QtCore/qdir.h> #include <QtCore/qstring.h> #include <QtCore/qurl.h…

關于Ajax的學習筆記

Ajax概念&#xff1a;是一門使用了js語言&#xff0c;可以使用于Javaweb&#xff0c;實現前端代碼和后端代碼連結的的一種異步同步&#xff08;不需要等待服務器相應&#xff0c;就能夠發送第二次請求&#xff09;的一種技術&#xff0c;它主要用于網頁內容的局部刷新&#xff…

The Missing Semester of Your CS Education 學習筆記以及一些拓展知識(三)

文章目錄The Missing Semester of Your CS Education 學習筆記以及一些拓展知識Vim編輯器筆記部分程序員常用的編輯器Vim的模式Vim的普通模式Vim的插入模式Vim的可視模式Vim的替換模式Vim的命令行模式Vim的高級功能文本對象宏寄存器緩沖區標記代碼折疊Vim的常用配置Vim的常用插…

PyTorch常用的簡單數學運算

一、基礎算術運算1. 逐元素運算a torch.tensor([1, 2, 3]) b torch.tensor([4, 5, 6])# 加減乘除 a b # [5, 7, 9] a - b # [-3, -3, -3] a * b # [4, 10, 18] a / b # [0.25, 0.4, 0.5]# 冪運算、平方根 a ** 2 # [1, 4, 9] torch.sqrt(a) # [1.0, 1.414, 1.732]2. 標…

C++ Lambda 表達式詳解:從基礎到實戰

Lambda 表達式是 C11 引入的重要特性&#xff0c;它允許我們在代碼中定義匿名函數&#xff0c;極大地簡化了代碼編寫&#xff0c;尤其是在使用 STL 算法和多線程編程時。本文將詳細介紹 Lambda 表達式的語法、特性及實際應用場景。什么是 Lambda 表達式&#xff1f;Lambda 表達…

Spring Boot注解詳解

文章目錄前言1. 核心啟動注解SpringBootApplicationEnableAutoConfigurationSpringBootConfiguration2. 組件注解Component及其衍生注解ComponentServiceRepositoryControllerRestController3. 依賴注入注解AutowiredQualifierPrimary4. Web相關注解請求映射注解RequestMapping…

Web開發:ABP框架12——中間件Middleware的創建和使用

一、簡介中間件可以用于鑒權、日志&#xff0c;攔截器可以用于指定方法或url的業務邏輯處理&#xff0c;兩者分工不同&#xff0c;實現效果相似&#xff0c;先執行中間件&#xff0c;后執行攔截器&#xff0c;再到WebAPI接口。二、示例一個Token驗證中間件三、代碼1.Startup.cs…

京東商品評論如何獲取?API接口實戰指南

一、API接入準備1. 注冊開發者賬號訪問京東開放平臺&#xff1a;前往京東開放平臺注冊賬號&#xff0c;完成企業或個人實名認證。創建應用&#xff1a;在控制臺創建應用&#xff0c;獲取App Key和App Secret&#xff08;用于簽名認證&#xff09;。2. 申請API權限搜索接口&…

leetcode-sql-627變更性別

題目&#xff1a; Salary 表&#xff1a; --------------------- | Column Name | Type | --------------------- | id | int | | name | varchar | | sex | ENUM | | salary | int | --------------------- id 是這個表的主鍵…

【學習路線】C#企業級開發之路:從基礎語法到云原生應用

一、C#基礎入門&#xff08;1-2個月&#xff09; &#xff08;一&#xff09;開發環境搭建Visual Studio安裝配置 Visual Studio Community&#xff1a;免費版本&#xff0c;功能完整Visual Studio Code&#xff1a;輕量級&#xff0c;跨平臺支持JetBrains Rider&#xff1a;專…

Planning Agent:基于大模型的動態規劃與ReAct機制,實現復雜問題自適應執行求解

引言 在當今數據驅動的商業環境中&#xff0c;企業面臨著日益復雜的決策問題。傳統的數據分析工具往往難以應對多步驟、多依賴的復雜問題求解。例如&#xff0c;當企業需要分析"北美市場 Q1-Q2 主要產品的銷售增長趨勢并識別關鍵驅動因素"時&#xff0c;傳統工具可能…

人該怎樣活著呢?55

人該怎樣活著呢&#xff1f; A思考現實問題并記錄自己的靈感 。【生活的指南針】 &#xff08;20250212&#xff09; a1如何思考&#xff1f; 當有人問他用什么方法得到那么多發現時&#xff0c;牛頓說&#xff1a;“我只不過對于一件事情&#xff0c;總是花很長時間很熱…

rtthread - V5.1.0版本 HOOK 鉤子函數總結

rtthread - V5.1.0版本 鉤子函數 相對于V4.0.3版本做了很大的修改和優化&#xff1a;舊版本 V4.0.3&#xff1a;rt_thread_inited_sethook(thread_inited_hook);rt_thread_deleted_sethook(thread_deleted_hook);rt_scheduler_sethook(scheduler_hook);新版本 V5.1.0&#xff1…

Python特性:裝飾器解決數據庫長時間斷連問題

前言 在基于 Python 的 Web 應用開發里&#xff0c;數據庫連接是極為關鍵的一環。不過&#xff0c;像網絡波動、數據庫服務器維護這類因素&#xff0c;都可能造成數據庫長時間斷連&#xff0c;進而影響應用的正常運作。本文將詳細介紹怎樣運用 retry_on_failure 裝飾器來解決數…