在传统的深度学习中,卷积神经网络(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(k1),uN(v)})

其中:

  • N(v)N(v)N(v) 表示节点 vvv 的邻居集合
  • hu(k−1)h_u^{(k-1)}hu(k1) 是邻居节点 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)1uN(v)hu(k1)平等对待所有邻居
最大池化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(k1),hN(v)(k))

其中:

  • hv(k−1)h_v^{(k-1)}hv(k1) 是节点 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(k1),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(k1),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⁽¹⁾]H1 --> L2[GNN层2]L2 --> H2[H⁽²⁾]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(k1)(均值聚合)=σ(W(k)[hv(k1)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 装饰器来解决数…