深度学习十大算法之图神经网络(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.mzph.cn/news/773155.shtml

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

相关文章

网络原理讲解

目标 网络发展史 独立模式 独立模式:计算机之间相互独立; 网络互连 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成 业务,就有了网络互连。 网络互连&a…

学习笔记:MYSQL数据库基础知识

MYSQL数据库基础知识学习笔记 MYSQL基础学习数据库相关概念现主流数据库排名数据模型SQL分类SQL数据库基础操作 2024/3/27 学习资料:黑马程序员:MYSQL MYSQL基础学习 数据库和数据库管理系统(DBMS) 数据库: 是存储数据的集合,包括表、视图、索引等对象…

存内计算:释放潜能的黑科技

什么是存内计算? 存内计算技术是一种新型的计算架构,它将存储器和计算单元融合在一起,以实现高效的数据处理。存内计算技术的优势在于能够消除数据搬运的延迟和功耗,从而提高计算效率和能效比。目前,存内计算技术正处…

React Native获取及监听网络状态

在React Native中,要获取和监听网络状态,你可以使用react-native-netinfo库(以前是核心库的一部分,但在React Native 0.60之后被移出并作为一个独立的库提供)。以下是使用这个库来获取和监听网络状态的基本步骤&#x…

苹果Find My产品需求增长迅速,伦茨科技ST17H6x芯片供货充足

苹果的Find My功能使得用户可以轻松查找iPhone、Mac、AirPods以及Apple Watch等设备。如今Find My还进入了耳机、充电宝、箱包、电动车、保温杯等多个行业。苹果发布AirTag发布以来,大家都更加注重物品的防丢,苹果的 Find My 就可以查找 iPhone、Mac、Ai…

jupyter notebook导出含中文的pdf(LaTex安装和Pandoc、MiKTex安装)

用jupyter notebook导出pdf时,因为报错信息,需要用到Tex nbconvert failed: xelatex not found on PATH, if you have not installed xelatex you may need to do so. Find further instructions at https://nbconvert.readthedocs.io/en/latest/install…

pytorch中的torch.hub.load()

pytorch提供了torch.hub.load()函数加载模型,该方法可以从网上直接下载模型或是从本地加载模型。官方文档 torch.hub.load(repo_or_dir, model, *args, sourcegithub, trust_repoNone, force_reloadFalse, verboseTrue, skip_validationFalse, **kwargs)参数说明&a…

Focal Modulation Networks聚焦调制网络

摘要 我们提出了 焦点调制网络 (简称 FocalNets) ,其中 自注意( SA )被 Focal Modulation 替换,这种机制 包括三个组件:( 1 )通过 depth-wise Conv 提取分级的上下文信息&#xff0…

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.6-3.8

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.6 激活函数(Activation functions)3.7 为什么需要非线性激活函数?(why need a non…

Spring Cloud 九:服务间通信与消息队列

Spring Cloud 一:Spring Cloud 简介 Spring Cloud 二:核心组件解析 Spring Cloud 三:API网关深入探索与实战应用 Spring Cloud 四:微服务治理与安全 Spring Cloud 五:Spring Cloud与持续集成/持续部署(CI/C…

react native hooks 页面出现重绘问题,如何解决

在React Native应用中,使用Hooks导致页面出现频繁重绘或性能问题时,可以尝试以下策略来优化和解决问题: 减少不必要的状态更新: 使用 React.memo 高阶组件包裹那些不需要每次父组件状态改变时都重新渲染的子组件。它通过浅比较pro…

Java Web-Maven

Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具 Maven的作用 1.依赖管理:方便快捷的管理项目依赖资源(jar包),避免版本冲突问题 我们有的项目需要大量的jar包,采用手动导包的方式非常繁琐,并且版本升级也…

面试官:2PC和3PC有什么区别?

本文内容已收录至我的面试网站:www.javacn.site 在分布式事务中,通常使用两阶段协议或三阶段协议来保障分布式事务的正常运行,它也是 X/Open 公司定义的一套分布式事务标准。 X/Open 公司是由多家国际计算机厂商所组成的联盟组织,…

【前端】-【性能优化常识】

目录 前端性能优化指标首屏速度、白屏时间性能优化收效很大的操作:减少首屏资源体积收效不大或者特殊情况的优化操作 操作速度、渲染速度造成操作卡顿和渲染慢的场景性能优化 数据缓存 补充知识异步加载加载方式一:prefetch加载加载方式二:sc…

小迪安全48WEB 攻防-通用漏洞Py 反序列化链构造自动审计 bandit魔术方法

#知识点: 1、Python-反序列化函数使用 2、Python-反序列化魔术方法 3、Python-反序列化 POP 链构造(payload构造) 4、Python-自动化审计 bandit 使用 #前置知识: 函数使用: pickle.dump(obj, file) : 将对…

如何利用nginx在Centos上搭建文件服务器

第一步:创建export文件夹 其下soft文件夹和server文件夹 soft放软件压缩包,server放解压安装后的软件 第二步:yum -y install make gcc-c zlib zlib-devel libtool openssl openssl-devel libpcre3 libpcre3-dev 下载gcc 依赖环境安装 …

基于SIR模型的疫情发展趋势预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于SIR模型的疫情发展趋势预测算法.对病例增长进行SIR模型拟合分析,并采用模型参数拟合结果对疫情防控力度进行比较。整体思路为采用SIR微分方程模型…

微信小程序之多视频暂停播放,超出可视区域停止播放视频在自定义组件中实现案例

项目页面存在多个视频时&#xff0c;只播放视频可见范围内单个视频播放的解决方案 QQ录屏20240326175303 在自定义组件中无onPageScroll(e)监听页面滚动的函数所以在自定义组件中用<scroll-view>标签包裹所有组件&#xff08;以下为WXML页面源码&#xff09; <scroll…

免杀对抗-C2远控篇CC++SC转换格式UUID标识MAC物理IPV4地址减少熵值

参考文章&#xff1a; https://github.com/INotGreen/Bypass-AMSI https://mp.weixin.qq.com/s/oJ8eHdX8HGuk6dZv0kmFxg https://kyxiaxiang.github.io/2022/12/14/AMSIandEtw https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell 文章参考&#xff1a; https://www.…

Java锁与Redisson锁的坑

文章目录 Redisson问题引入Java锁问题问题重现问题原因如何解决 Redisson问题引入 系统中我们经常需要使用分布式锁&#xff0c;一个不错的选择是使用redisson。 那么&#xff0c;像下面这样使用redisson锁有问题吗&#xff1f; 如果有问题&#xff0c;是什么问题呢&#xf…