深度学习十大算法之图神经网络(GNN)

一、图神经网络的基础

在这里插入图片描述

图的基本概念

图是数学中的一个基本概念,用于表示事物间复杂的关系。在图论中,图通常被定义为一组节点(或称为顶点)以及连接这些节点的边。每个边可以有方向,称为有向边,或者没有方向,称为无向边。在不同的应用场景中,节点可以代表不同的实体,如人、地点、物品等,而边则代表这些实体间的关系或者连接,如友谊、路线、交互等。

神经网络概述

神经网络是一种模仿生物神经网络(例如大脑)工作方式的算法,是人工智能和机器学习领域的核心。最简单的神经网络由输入层、若干隐藏层和输出层组成,其中每层包含多个神经元。这些神经元通过带权重的连接相互作用。输入数据在网络中传播,并在每个神经元处进行加权求和和激活函数处理,最终产生输出。神经网络能够通过学习数据中的模式来执行各种复杂任务,如分类、预测等。

GNN的起源与发展

图神经网络(GNN)起源于传统神经网络,是一种专门用于处理图结构数据的神经网络。早期的研究主要集中在如何将神经网络模型应用于图数据上,以及如何在图结构中有效传播信息。随着深度学习的兴起,GNN得到了快速发展。

GNN的核心思想是在图的节点间传播信息,从而学习节点的表示。这种方法使GNN能够捕捉节点之间的复杂关系和依赖性。早期的GNN模型包括Spectral CNN、Graph Convolutional Network (GCN) 等。这些模型在不同的图结构数据上表现出色,比如社交网络、化学分子结构等。

近年来,GNN已经发展出多种变体,如Graph Attention Networks (GAT)、GraphSAGE等,它们在效率、扩展性和表达能力上有所改进。此外,GNN在多个领域内的应用也日益增多,例如在推荐系统、交通网络、药物发现等领域展现出巨大的潜力。

GNN的发展不仅推动了图数据处理技术的进步,也为深度学习领域带来了新的研究方向和挑战。

二、GNN的工作原理

基础知识

在图深度学习中,理解节点嵌入的概念是至关重要的。在图论中,节点嵌入指的是将图中的每个节点映射到一个低维空间(d维嵌入空间),这一过程旨在使得嵌入空间中的相似节点在网络中彼此靠近。这种映射使得我们能够在图数据中捕获复杂的关系和特征。

考虑图中的两个节点 u 和 v。我们可以使用特征向量 x u \mathbf{x}_u xu x v \mathbf{x}_v xv 来表示这些节点的特征。目标是通过一个编码器函数(例如 E n c ( ⋅ ) Enc(\cdot) Enc()将这些特征向量转换成低维空间中的嵌入向量 z u \mathbf{z}_u zu z v \mathbf{z}_v zv

例如,编码器函数可以定义为:

E n c ( u ) = f ( W ⋅ x u + b ) Enc(u) = f(\mathbf{W} \cdot \mathbf{x}_u + \mathbf{b}) Enc(u)=f(Wxu+b)

其中 W \mathbf{W} W是权重矩阵, b \mathbf{b} b 是偏置向量, f f f是激活函数,例如ReLU。

在图深度学习中,度量嵌入空间中两个节点相似性的一种常用方法是计算它们嵌入向量之间的距离。相似性函数可以是欧几里得距离,定义为两个向量之间的直线距离。公式如下:

Similarity ( u , v ) = ∑ i = 1 d ( z u , i − z v , i ) 2 \text{Similarity}(u, v) = \sqrt{\sum_{i=1}^{d} (z_{u,i} - z_{v,i})^2} Similarity(u,v)=i=1d(zu,izv,i)2

其中 z u , i z_{u,i} zu,i z v , i z_{v,i} zv,i 分别是节点 u 和 v 在嵌入空间中的第 i 个维度的坐标。

此外,图神经网络(GNN)的设计目标是捕获图中节点间的复杂结构和关系。在GNN中,节点的嵌入是通过聚合邻居信息来更新的。例如,在图卷积网络(GCN)中,节点的更新公式可以表示为:

z u = f ( ∑ v ∈ N ( u ) 1 c u v W ⋅ x v ) \mathbf{z}_u = f\left(\sum_{v \in \mathcal{N}(u)} \frac{1}{c_{uv}} \mathbf{W} \cdot \mathbf{x}_v\right) zu=f(vN(u)cuv1Wxv)

其中, N ( u ) \mathcal{N}(u) N(u)是节点 u 的邻居集合, c u v c_{uv} cuv 是归一化常数,用于平衡不同节点间的影响。

节点表示学习

在GNN中,节点表示学习是一个核心过程,它的目标是将每个节点转换为数值形式的向量表示。这些向量包含了节点本身的特征信息以及与其相连的其他节点的信息。节点的表示向量可以用于后续的图分析任务,如节点分类、链接预测等。

提取特征
用于
节点
向量表示
图分析任务

邻接矩阵与特征聚合

GNN使用邻接矩阵来表示图中的节点间关系。邻接矩阵是一个二维数组,其中的元素表示节点间是否有边相连。特征聚合是GNN处理图数据的一个关键步骤,它涉及将一个节点的邻居节点信息聚合到该节点的表示中。

邻接矩阵
特征聚合
节点
邻居节点
更新节点表示

在这里插入图片描述

GNN的主要类型

GNN有多种不同的类型,每种类型在特征聚合和信息传播方面有所不同。

  1. Graph Convolutional Network (GCN): GCN通过将邻接矩阵和节点特征矩阵结合起来,利用卷积操作来更新节点表示。
卷积
结合
节点特征矩阵
更新后的节点表示
邻接矩阵
  1. Graph Attention Network (GAT): GAT引入了注意力机制,允许节点根据其邻居的重要性动态调整连接的权重。
注意力机制
加权邻居特征
节点
计算权重
更新节点表示

三、GNN的应用场景

社交网络分析

在社交网络分析中,GNN被用来识别社群结构、推荐朋友或内容,甚至预测用户行为。例如,通过分析用户间的互动,GNN可以预测用户可能感兴趣的新朋友或信息流内容。GraphSAGE是一个流行的开源框架,能够有效地生成社交网络中节点的嵌入表示。

生物信息学

GNN在生物信息学领域也显示出巨大潜力。它被用于蛋白质结构预测、基因表达分析等领域。例如,DeepMind的AlphaFold 使用GNN来预测蛋白质的三维结构,这对药物发现和生物医学研究具有重大意义。

推荐系统

GNN也被广泛应用于推荐系统中。它能够根据用户的历史交互数据,预测用户对未知项目的偏好。例如,Pinsage是Pinterest开发的一种基于图的深度学习模型,用于增强其推荐系统的效果。

四、GNN的实际案例

案例研究:使用GNN进行社交网络分析

在社交网络分析的案例中,GNN能够帮助揭示用户间复杂的互动模式。例如,使用GNN分析Twitter上的用户互动数据,可以识别出影响力大的用户、话题趋势,甚至是传播虚假信息的模式。相关研究和案例可以在arXiv找到。

简单实现:

在这个简单实现中,将使用PyTorch Geometric(一种流行的GNN库)和一个公开的社交网络数据集。使用的是Cora数据集,这是一个常用于图神经网络研究的学术论文引用网络。

请注意,要运行以下代码,需要安装torchtorch_geometric。代码会构建一个简单的图卷积网络(GCN),用于节点分类任务。

数据集:

  • 方法一:直接下载:数据集下载链接:https://networkrepository.com/cora.php 解压后放在和主函数同级的data文件夹下
  • 方法二:使用PyTorch Geometric库,它提供了一个简便的方法来下载和加载Cora数据集​​。以下是在Python中使用PyTorch Geometric获取Cora数据集的代码示例:
from torch_geometric.datasets import Planetoid
dataset = Planetoid(root='data/Cora', name='Cora')data = dataset[0]
print(f'Dataset: {dataset}:')
print('======================')
print(f'Number of graphs: {len(dataset)}')
print(f'Number of features: {dataset.num_features}')
print(f'Number of classes: {dataset.num_classes}')print(f'Number of nodes: {data.num_nodes}')
print(f'Number of edges: {data.num_edges}')
print(f'Average node degree: {data.num_edges / data.num_nodes:.2f}')
print(f'Number of training nodes: {data.train_mask.sum()}')
print(f'Training node label rate: {int(data.train_mask.sum()) / data.num_nodes:.2f}')
print(f'Contains isolated nodes: {data.contains_isolated_nodes()}')
print(f'Contains self-loops: {data.contains_self_loops()}')
print(f'Is undirected: {data.is_undirected()}')
  • 方法三:如果更倾向于使用TensorFlow,可以通过以下链接下载Cora数据集,并按照TensorFlow Neural Structured Learning的格式对其进行处理。下载和处理数据集的命令如下
wget --quiet -P /tmp https://linqs-data.soe.ucsc.edu/public/lbc/cora.tgz
tar -C /tmp -xvzf /tmp/cora.tgz!wget https://raw.githubusercontent.com/tensorflow/neural-structured-learning/master/neural_structured_learning/examples/preprocess/cora/preprocess_cora_dataset.py!python preprocess_cora_dataset.py \
--input_cora_content=/tmp/cora/cora.content \
--input_cora_graph=/tmp/cora/cora.cites \
--max_nbrs=5 \
--output_train_data=/tmp/cora/train_merged_examples.tfr \
--output_test_data=/tmp/cora/test_examples.tfr

main.py

import torch
from torch_geometric.datasets import Planetoid
import torch_geometric.transforms as T
from torch_geometric.nn import GCNConv# 加载Cora数据集
dataset = Planetoid(root='/data/Cora', name='Cora', transform=T.NormalizeFeatures())# 定义图卷积网络模型
class GCN(torch.nn.Module):def __init__(self):super(GCN, self).__init__()self.conv1 = GCNConv(dataset.num_node_features, 16)self.conv2 = GCNConv(16, dataset.num_classes)def forward(self, data):x, edge_index = data.x, data.edge_indexx = self.conv1(x, edge_index)x = torch.relu(x)x = self.conv2(x, edge_index)return torch.log_softmax(x, dim=1)# 初始化模型和优化器
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = GCN().to(device)
data = dataset[0].to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)# 训练模型
model.train()
for epoch in range(200):optimizer.zero_grad()out = model(data)loss = torch.nn.functional.nll_loss(out[data.train_mask], data.y[data.train_mask])loss.backward()optimizer.step()# 测试模型
model.eval()
_, pred = model(data).max(dim=1)
correct = pred[data.test_mask].eq(data.y[data.test_mask]).sum().item()
accuracy = correct / data.test_mask.sum().item()
print('Accuracy: {:.4f}'.format(accuracy))

案例研究:GNN在药物发现中的应用

药物发现领域中,图神经网络(GNN)的一个重要应用是通过分析化学结构来预测化合物的生物活性。具体来说,研究人员开发了新型的GNN模型,如RG-MPNN,这种模型将药效团信息层次性地融入到消息传递神经网络(MPNN)架构中,从而提高了化学属性预测的准确性。这种方法不仅吸收了原子和键的信息,还吸收了药效团的信息,能有效地用于虚拟筛选和先导化合物优化​​。

GNN在预测化合物与蛋白质相互作用(CPI)方面也显示出巨大潜力。在这方面的深度学习方法,如分层图卷积网络(HGCN),能够学习复杂的从原始数据中提取的抽象特征,从而提高性能。这些模型通常包括三个主要组件:负责分别编码化合物和蛋白质的两个组件,以及将这些编码层的输出转化为CPI预测的最终组件。例如,利用SMILES字符串来表示化合物,可以将其转换为独特的分子图,其中节点代表原子,边代表原子间的共价键。通过这种方法,研究人员可以更有效地预测化合物和蛋白质之间是否发生相互作用​​。。一个实际案例是使用GNN来加速新药的发现过程,这在ChemRXiv上有详细的论文和研究报告。

五、GNN的未来趋势与挑战

图神经网络(GNN)正迅速成为处理图结构数据的重要工具。尽管在多个领域取得了显著的进展,但GNN的未来发展仍面临一些挑战和研究趋势。

  • 数据集不平衡:目前可用的数据集存在限制标签数据、领域依赖性数据和数据不平衡等问题。解决这些问题的方法之一是使用迁移学习和领域适应技术。

  • 现有系统/模型的准确性:可以利用深度学习模型如GCN、GAT和GraphSAGE等方法来提高当前系统的效率和精度。此外,在大型、特定领域的数据集上训练模型可以进一步提高性能。

  • 提高文本分类效果:文本分类是一个重大挑战,可以通过利用先进的深度学习方法,如图神经网络,来提高文本分类的准确性和性能。

  • 过度平滑(Oversmoothing):在GNN中使用过多的消息传递和聚合层可能会导致过度平滑现象。随着网络深度的增加,图中不同部分的节点表示可能变得难以区分。在极端情况下,所有节点特征可能会趋于相似状态,失去其独特信息。这是因为在多次平滑迭代后,节点特征从其邻域中聚合了太多信息,从而丢失了个体的独特特征。

GNN的不断发展强调了需要解决的一系列图分析问题。在GNN的研究领域中,我们探讨了几个关键的近期研究领域,包括链接预测、图生成和图分类等​​​​。

随着GNN的持续发展,它们在捕获数据中的复杂关系和依赖性方面显示出独特的能力,但同时也面临着数据不平衡、模型准确性和文本分类等方面的挑战。未来,GNN的发展方向可能会集中在解决这些问题上,以及探索新的应用场景和优化现有模型的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/287740.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++剑指offer与高频面试题源码解答与分析

这是博主在当初秋招刷题时候记录的剑指offer第二版以及一些高频题的C源码和解法分析,可以说把这上面的题练好了面试不虚,最后也顺利帮助我拿下baidu ali meituan等多家大厂offer。整篇文章写了大概5W个字,也是积累了很长一段时间的作品&#…

函数进阶-Python

师从黑马程序员 函数中多个返回值的接收 def test_return():return 1,"hello",3x,y,ztest_return() print(x) print(y) print(z) 多种参数的使用 函数参数种类 位置参数 关键字参数 def user_info(name,age,gender):print(f"姓名是{name},年龄是:{age},性别是…

小学生古诗文大会往届真题测一测和独家详细解析(题目来自官方)

新学期开学一眨眼已经过了一个多月了,有家长朋友开始关心2024年上海市小学生古诗文大会什么时候开始?如何准备小学生古诗文大会?如何激发孩子学习古诗词的兴趣?如何提高小学古诗词和古诗文大会的学习成绩?... 最近&…

增强现实(AR)在广告中的力量

The Power of AR in Advertising 写在前面 增强现实(AR -Augmented Reality)是指借助软件、应用程序和智能手机、平板电脑或耳机等设备,为日常生活添加视觉和音频元素的技术。如今,品牌和广告商可以在营销活动中使用AR&#xff0…

解决mysql问题: this is incompatible with sql_mode=only_full_group_by

今天在部署一趟测试环境的服务,各种配置文件都配好了,启动服务后台报错,解决后记录一下,小伙伴们也可以看看! ### Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause…

python爬虫-----输入输出与流程控制语句(第四天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

Ubuntu Desktop - Updates (不升级到新版本)

Ubuntu Desktop - Updates [不升级到新版本] 1. UpdatesReferences 1. Updates System Settings -> Software & Updates -> Updates ubuntu-16.04.3-desktop-amd64.iso 不升级到新版本 ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

【linux深入剖析】基础IO操作 | 使用Linux库函数实现读写操作 | 文件相关系统调用接口

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 前言1.复习C文件IO相关操…

UE4_旋转节点总结一

一、Roll、Pitch、Yaw Roll 围绕X轴旋转 飞机的翻滚角 Pitch 围绕Y轴旋转 飞机的俯仰角 Yaw 围绕Z轴旋转 飞机的航向角 二、Get Forward Vector理解 测试: 运行: 三、Get Actor Rotation理解 运行效果: 拆分旋转体测试一&a…

linux将未分配空间分配到指定挂载点

lsblk命令查看硬盘,空间有200G,子分区加起来才100个G,有100个G未使用 lsblk给硬盘分配盘符 fidisk /dev/vda n 回车 回车 w将所有未分配的空间分区,这里有100个GB 查看分配的分区 /dev/vda4 fidisk -lpvcreate /dev/vda4查看…

华为OD机试真题-推荐多样性-2024年OD统一考试(C卷)

题目描述: 推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略: 1. 各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表中为每屏选择一个元素,依次类推 2. 每个列表的元素尽量均…

双亲委派机制总结

回顾了一下双亲委派机制,在这记录记录,下一篇会基于打破双亲委派机制来更新 1. 类加载: 多个java文件经过编译打包后生成可运行jar包,最后启动程序。首先需要通过类加载器把主类加载到JVM。主类在运行过程中如果使用到其他类&a…

2016年认证杯SPSSPRO杯数学建模D题(第一阶段)NBA是否有必要设立四分线解题全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 D题 NBA是否有必要设立四分线 原题再现 NBA 联盟从 1946 年成立到今天,一路上经历过无数次规则上的变迁。有顺应民意、皆大欢喜的,比如 1973 年在技术统计中增加了抢断和盖帽数据;有应运而生、力挽狂澜的&am…

lvgl 窗口 windows lv_port_win_visual_studio 版本 已解决

不知道的东西,不知道lvgl窗口。一切从未知开始 lv_port_win_visual_studio 主分支 对应的分支 v7版本更新git submodule update --init --recursive同步 lvgl代码随后打开 visualSudio 打开.sln 文件 编译 release模式 允许 一切正常代码部分

建筑结构设计的内容与要求,建筑工程结构设计资料大全

一、资料描述 本套建筑设计资料,大小4.62G,1个压缩文件。 二、资料目录 0-结构设计 1-快速建模方法 A-satwe资料 B-剪力墙资料 C-地下室资料 D-基础 E-楼梯 F-水池 G-砖混结构 H-挡土墙 I-框剪结构 J-常用规范 K-配筋率计算方法 L-底框结…

jenkins配置源码管理的git地址时,怎么使用不了 credential凭证信息

前提 Jenkins使用docker部署 问题 (在jenlins中设置凭证的方式)在Jenkins的任务重配置Git地址,并且设置了git凭证,但是验证不通过,报错; 无法连接仓库:Command "git ls-remote -h -- http://192.1XX.0.98:X02/…

C语言 青蛙跳台阶问题

目录 ​编辑 1.问题描述 2.问题分析 3.全部代码 4.结语 1.问题描述 一只青蛙可以一次跳一级台阶,也可以一次跳两级台阶,如果青蛙要跳上n级台阶有多少种跳法? 2.问题分析 当台阶只有一级时,只能跳一级,所以只有一…

C语言数据结构基础————二叉树学习笔记(四)简单的OJ题目练习

1.单值二叉树 965. 单值二叉树 - 力扣(LeetCode) 建立一个新的函数,用函数传参的方法来记录val的值 如上一篇最后的对称二叉树的习题,建立新的函数来传参 多采用使用反对值的方法,因为如果是相等return true的话&am…

Spring框架介绍及详细使用

前言 本篇文章将会对spring框架做出一个比较详细的讲解,并且每个知识点基本都会有例子演示,详细记录下了我在学习Spring时所了解到全部知识点。 在了解是什么spring之前,我们要先知道spring框架在开发时,服务器端采用三层架构的方…

O2OA(翱途)开发平台-快速入门开发一个门户实例

O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]拥有门户页面定制与集成的能力,平台通过门户定制,可以根据企业的文化,业务需要设计符合企业需要的统一信息门户,系统首页等UI界面。本篇主要介绍通过门户管理系统如何快速的进行一个…