图神经网络模型的扩展(5)--1

news2024/9/21 21:28:52
1.深层图卷积网络

        前面讲到,随着图卷积网络层数的叠加,其表达力反而会丢失,因为过深的图卷积网络会造成过平滑的现象。同时,在标准数据集上的实验结果似乎也可以佐证:在我们常用的Cora 等图数据集上,如图卷积网络的作者Kipf 建议的那样,图卷积网络一般两层就够用了,层数再多也不能对结果有很大的提升,反而会增加模型的复杂度。

        那么,是不是深层图卷积网络就没有用武之地了呢?当然不是的。我们之所以没有看到深层图卷积网络的优势,一是没有找到好的训练方法,正如深层卷积神经网络也需要采用残差网络或稠密连接网络的结构消除梯度消失等问题一样,深层图卷积网络也需要一些特殊处理;二是我们常用的标准图数据不够大(除了过平滑的问题,深层图卷积网络在小数据上还面临着过拟合的问题),在更新、更大的图分类公开数据集上,一些深层图卷积网络模型 ( Deep图卷积网络)取得了非常明显的优势。另外,从信息传播的角度考虑,每一层图卷积网络相当于对一阶邻接节点传播信息,浅层图卷积网络没有办法把信息传播到相隔很远的节点上,因此合理地增加层数有助于图中相隔较远的节点之间的信息传递。

        前面讲了两个解决过平滑问题的方法,一个方法是在浅层图卷积网络的基础上增加一个随机游走模型,使得信息可以传播到无穷远,然后把这两个模型用协同训练的方式结合;另一个方法是将图卷积网络与个性化PageRank联系起来,建立一个包含根节点信息的传播模型。

2.残差连接

        一个很自然的想法是:将深层卷积神经网络上的残差连接模块迁移到图卷积网络中。残差连接是深度学习中一个广为人知的概念,它的主要作用是改善深层卷积神经网络训练时的梯度消失(当输入值非常大或非常小的时候,Sigmoid函数的梯度接近于0,这会导致在神经网络的深层中梯度更新非常缓慢,从而使得网络难以训练)、梯度爆炸(梯度爆炸是深度学习中常见的问题,尤其在训练深层神经网络时。它指的是在梯度下降过程中,由于多层网络层之间的梯度连乘,导致梯度值变得异常大,从而使得网络权重更新过大,造成模型训练不稳定,甚至导致模型失效)问题。同时,通过打破神经网络的对称性,提升神经网络的表达力。

        假设我们在某一层有一个输入X, 期望的输出为H(X),  一个残差块可以表示为H(X)=F(X)+X,      其中F(X)被称为残差部分。它的含义是输入信号可以直接从任意一个低层传播到高层,反过来,梯度也可以从这些跨层的残差连接直接传回来,这样底层的梯度不会变得越来越小。在理想情况下,网络训练时会先经过浅层网络(X的部分)学习,浅层网络不能拟合的部分需要更深层的残差部分F(X)=H(X)-X 来学习,以保证残差网络至少和浅层网络的性能一样好。对应到图卷积网络中,过平滑的其中一个原因是节点自身的信息在传播过程中丢失。很显然,通过残差连接,节点的信息随着图卷积网络层数的增加,可以在传播的路径上一直保留。

        假设每一层的节点状态是H¹, 经过一层图卷积网络之后,节点的嵌入是 z¹+¹=σ(AH'w¹), 改成残差模块后,我们把这一层的输出变为H¹+¹=H¹+z¹+1=σ(AH'w¹)+H¹。再输入到下一层。Kipf最早在介绍图卷积网络的论文中提出了使用残差连接的方式,他发现残差网络也只能在一定程度上缓解过平滑的问题,随着层数的增加, 图卷积网络的性能仍然会降低。

        Chiang等人在介绍Cluster-GCN的论文中提出这种残差连接方式不够好是因为没有考虑到图卷积网络层数的影响。简而言之,节点对离得近的邻居的影响力应该更大。于是他们又对模型做了一些改进,给前一层的表示更多的权重:在此之上,他们进一步考虑了邻接点的数量,提出了一个新的正则化方法:,其中。随后,又有一个简单但更有效的改进,不仅对残差部分做了小的改动,而且通过在图卷积网络的参数部分增加恒等映射来获取更好的效果。这个模型叫作GCNII(Graph Convolutional Networks via Initial residualand Identity mapping), 具有初始残差和恒等映射的图卷积网络),它的每层节点状态更新公式为:

3.JK-Net

        JK-Net(Jumping Knowledge Networks,跳跃知识网络)是最早正式提出的深层图卷积网络模型框架。不同于残差连接的方法,它将图卷积网络的每一层出在最后聚合在一起,作为最终的输出。例如一个三层的JK-Net,Ag-gregate函数用来聚合各层输出,可以是拼接、最大池化或者LSTM。 假设每一层图卷积网络的输入为H¹, 输出为H¹+1=\sigma(A^Hlwl),    则以拼接方式的聚合函数为例,最终K层JK-Net的输出为:H=H¹||H²ll…||HK(上标)。

        其中Ⅱ表示矩阵的拼接。事实上,JK-Net的拼接方式和卷积神经网络中的DenseNet 有点接近。也有人用DenseNet的稠密连接代替残差连接和JK-Net,直接用在深层图卷积网络上。稠密连接和JK-Net中的拼接稍有不同,它不只是在最后一层 拼接所有之前层的输出,而是在每一层都拼接前面所有层的输出。

4.DropEdge PairNorm

        既然残差连接、稠密连接这些深层卷积神经网络上的法宝都被拿来用在了图卷积网络上,说不定 dropout、BatchNorm这些工具也都可以迁移到图卷积网络上。DropEdge就是dropout 在图神经网络上的扩展。我们知道,在训练过程中,dropout 会随机删除一些输入数据的特征,而DropEdge则随机删除邻接矩阵中的一些边。假设图的邻接矩阵A  N 条边,我们随机选取 Np条边进行删除(p是一个预设的概率值),然后用剩余的邻接矩阵代替原来的A 输入图卷积网络进行训练(当图卷积网络有多层时,每层删除的边可以不一样)。很巧,与DropEdge同一时间发表的Pair-Norm就是这样一种方法。假设每层图卷积网络的输出为x^=GCN(A,X),    则PairNorm的目的是使这些输出正则化后的 X 可以保持总的相互距离不变。 正则化的步骤分为两步,第一步是中心化:

 第二步是重新拉伸:

拉伸后最终的输出仍然是中心化的:

        让图卷积网络变深的其中一个动机是使信息可以传得更远,也就是每个节点的信息可以影响到离得更远的邻居。

5.图的池化

        池化(Pooling)是一个在传统卷积神经网络里常用的概念,简而言之,池化的作用就是某种形式的降采样。池化层通常接在卷积层后面,用来保留显著特征,降低特征维度,减少网络的参数数量,而这也在一定程度上控制了过拟合。换言之,池化为深度学习的对象提供了一种层次化表达的方法。 例如,在图像卷积中,常用的是平均化和最大化的池化,每一层池化作用在一个局域的接受野,只输出一个单独的平均值或最大值,这样在池化后就会得到图像的更粗粒度的模糊表示。

        现在我们考虑怎么从节点的嵌入得到整个图的嵌入。很自然地,我们可以想到对所有节点做平均池化或最大池化,但这样操作会损失图的层级结构信息。在真的图数据中,图的结构通常是具有层级的。例如在社交网络中,相近的用户可以组成社区或朋友圈我们可以把图像中卷积网络的池化方式推广到图上。

(1)聚类与池化

        在没有任何图神经网络知识储备的情况下,我们会怎么解决图上的池化问题?一个最简单的想法是模拟图像中的池化层。先定义一 个个邻,然后只需要在每个邻域中做最大化或平均化取值。那么如何在图结构中定义邻域?

        我们可以把每个点和它的邻接点集合当成一个池化邻域吗?从形式上讲当然是可以的。但是,这样并没有使图变小或减少参数量,也就是脱离了池化本身的目标。所以怎么做才合理呢?那就是对图进行分块/ 分层。

        直观地讲,合理的分块要求相似的邻接点被分到一起,也就是聚类。如果要进行多层的池化,就相当于多粒度的图聚类。在多层池化时,每一层池化后,我们都得到了一个相对原图来说更粗粒度的压缩图,称为粗图(Coarse Graph),得到粗图的过程称为“粗化”(Graph Coar- sening)。图的“粗化”是一个在传统图分析领域经常用到的概念,在图神经网络的研究中也常常被称作“池化”。虽然谱聚类是一个很好的图聚类方法,但是在涉及多粒度、多层的图聚类时依然不够高效,因此在大图和多层池化的场景下, 我们可能需要选择更高效的图池化方法。切比雪夫网络就利用了Graclus多层聚类算法的粗化阶段来实现图的快速池化。

        Graclus是通过最小化谱聚类的目标(如归一化切割)得到每一层的粗图的,它是一个贪心算法,因此具有很高的效率。具体到切比雪夫网络,在每一 层粗化过程中,每次选取一个没有标记的节点i 和它的一个未标记节点邻居j来最大化归一化切割Wij(1/di+1/dj),( Wij是边的权重,di dj是节点的度)。然后这两个节点被标记,并合并成一个粗化节点。重复这样的选取过程,直所有的节点都被探索过。这样,每一层可以得到一个近似于原来节点数1/2的新图,但并非所有的点都能找到对应的、一起粗化的邻居,所以存在 一些没有粗化的单节点。另外,考虑到那些粗化的节点并没有一个有意义的排序,如果直接进行池化,就需要一个额外的表来存取这些节点信息,造成了内存的浪费和低效,也影响平行计算的实现,而切比雪夫网络稍微做了改进,它利用Graclus的机制先把粗化过程做成一个二叉树,然后通过对最终的粗图进行节点排序并进行倒推,得到原图的节点排序,从而实现了一个类似普通卷积网络中的一维池化操作。

(2)可学习的池化: DiffPoo

        图的粗化或池化通常作为预处理来帮助图神经网络得到图的最终表示,但是在深度学习时代,我们总是更倾向于实现端到端的系统,这样可以在很大程度上提升系统的可用性。图的粗化有很多方法,除了之前讲到的谱聚类和Graclus,常用的方法还有代数多重网格(Algebraic     Multigrid,AMG)。代数多重网络属于解线性系统Ax=b  的多重网格方法。假设A 是一个对称矩阵A∈Rn×n, 一个最简单的代数多重网格算法可以通过如下步骤得到:

(1)用一个快速近似算法得到一个近似解x', 并假设残差为r=b-Ax'。

(2)找到一个矩阵SRnxm,    的解y

(3)得到一个更好的近似解x=x′+Sy

(4)重复上述步骤直到残差足够小。

观察第二步,ST(转置)AS将线性系统从n维降到m 维,实际上就是对图做了粗 ( 为Galerkin粗化算子)。回到图数据中,对于一个邻接矩阵A, 它的粗化 表示为Ac=ST(转置)AS

对应地,图信号X 池化为Xc=STx。DiffPool是一个基于代数多重网格的池化方法。不同于传统的代数多重网络,DiffPool S可以根据上层的图信息参数化,这样我们就得到了一个端到端可学习的池化图网络。在每一层L中,我们定义两个不同的图神经网络层,一个图神经网络用来嵌入,另一个图神经网络用来学习粗化矩阵S。

        然后用类似代数多重网格的方法,得到下一层的邻接矩阵 A¹+1 和节点特征 xl+1 。这样,我们就实现了图的层次化表达。值得一提的是,在之前的池化 方法中(如基于聚类的方法),大多只考虑图结构本身而忽略了节点的属性信息,而DiffPool中的粗化矩阵S¹是基于图神经网络的,因此既包含了图结构的信息,也包含了节点属性信息。实验证实,DiffPool可以很好地学习到图的层次 信息,并且在图分类问题上有着很好的表现。

(3)Top-k池化和SAGPool

        虽然 DiffPool取得了很好的效果,但它有一个明显的缺点:即使图本身是一个稀疏图,得到的S¹仍然是一个稠密矩阵,这样粗化后的图也会变得稠密, 因此在要处理的图很大的时候,消耗的内存和计算时间都是不可接受的介绍一个更简洁的池化方法——Top-k池化,它直接选取k 个最重要的节点作为粗化节点,在图中只保留这些粗化节点之间的连接,因此粗化后的图是原图的一个子图。

       Top-k池化在Graph U-Net中被提出。对于一个有4个节点的图,其中节点属性特征X¹∈R4×5,邻接矩阵A¹∈R4×4,输出一个只有2个节点的子图(包含节点xl+¹∈R²×5和邻接矩阵A¹+¹∈R²×2) 作为粗化的结果。其中p是一个可学习的向量参数,\bigodot表示矩阵的元素乘。假设我们在第1层将图粗化到一个只有k 个节点的粗图上,则Top-k 池化的过程如下:

        其 中 ,x¹ 为上一层的节点属性矩阵,A¹ 为上一层的邻接矩阵,1表示全1向量。我们先定义一个可学习的向量参数 pL, 把节点的属性矩阵映射到一个向量 y  ,y 的每一个元素代表每个节点的重要性。通过对y 进行排序,我们选取前k 个最重要的节点,它们的序号集合为idx。然后,我们通过这些序号选取一个包含最重要信息的子图,这个子图包含最重要的k 个节点X~¹, 以及它们之间所有的连接A¹+1,而其他的节点和边都被删除了。最后,我们根据节点的重要性y 对节点的属性赋予不同的权重,得到一个最终的输出xl+1。

        在Top-k 池化中,我们用节点的属性  和一个参数p¹得到节点的重要性, 没有考虑图的结构信息。SAGPool对Top-k池化进行了改进,把节点的重要性向量阐释为一个自注意力机制,而自注意力的分数则通过一层图卷积网络来计算,即

        Top-k池化只保留了原图的一部分节点和边,因此注定比原图更稀疏,这就解决了DiffPool的复杂度问题。由于Top-k池化直接删掉了很多节点和边,理论上会损失很多信息;而DiffPool或其他代数多重网络的方法则是将所有的节点映射到新的粗化节点上,因此这些节点的信息在某种程度上保存在了粗化图中。然而,在实际的图分类实验中,我们发现这两种方法的差距并不是很大,这说明在大多数情况下,图中用来分类的信息本身就是冗余的,Top-k 池化选择的重要信息也足以帮助我们做出很好的分类。

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

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

相关文章

【AcWing】875. 快速幂

#include<iostream> using namespace std; typedef long long LL;LL qmi(int a,int b,int p){LL res1%p;//%p是为了p1的时候&#xff0c;余数是0while(b){if(b&1) resres*a%p;//位数是1的b>>1;aa*(LL)a%p;//a*a再modp是为了防止溢出}return res; }int main(){i…

IO 多路转接之 select

文章目录 IO 多路转接之 select1、初识 select2、select 函数及其参数解释3、select 函数返回值4、select 的执行过程5、socket 就绪条件5.1、读就绪5.2、写就绪5.3、异常就绪 5、select 的特点6、select 的缺点7、select 使用实例7.1、只检测检测标准输入输出7.2、使用 select…

YOLOv8改进 | 自定义数据集训练 | AirNet助力YOLOv8检测

目录 一、本文介绍 二、AirNet原理介绍 2.1 对比基降解编码器&#xff08;CBDE&#xff09; 2.2 降解引导修复网络&#xff08;DGRN&#xff09; 三、yolov8与AirNet结合修改教程 3.1 核心代码文件的创建与添加 3.1.1 AirNet.py文件添加 3.1.2 __init__.py文件添加 3…

ONES 与华为云深度合作,共同打造企业智能研发管理平台

9月20日&#xff0c;在华为全联接大会&#xff08;HUAWEI CONNECT 2024&#xff09;上&#xff0c;深圳复临科技有限公司&#xff08;以下简称“ONES”&#xff09;与华为云计算技术有限公司&#xff08;以下简称“华为云”&#xff09;正式签署合作协议&#xff0c;双方将在企…

Java线程池实现父子线程上下文传递以及MDC追踪

文章目录 1. 总览2. 代码实现2.1. 日志配置2.2. ThreadPoolExecutor 父子线程信息不传递2.3. ContextPassThreadPoolExecutor 父子线程信息传递 3. 整体架构 1. 总览 在公司的项目中&#xff0c;为了解决慢接口问题&#xff0c;主线程经常会引入线程池并发调用下游的 RPC&…

pg_start_backup

pg_start_backup()函数在主库上发起一个在线备份&#xff0c;命令执行成功后&#xff0c;将数据文件拷贝到备份接口中 select pg_start_backup(full0918,false,false); 以上会话不要关闭&#xff0c;复制数据目录。 cp -r /pgdata/data/postgres-f66f5f7a/ /opt/qfusion/mnt/st…

Android实战经验之如何使用DiffUtil提升RecyclerView的刷新性能

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 DiffUtil 是一个用于计算两个列表之间差异的实用程序类&#xff0c;它可以帮助 RecyclerView 以更高效的方式更新数据。使用 DiffUtil 可以减少…

行业落地分享:大模型 RAG 难点与创新应用

最近这一两周不少互联网公司都已经开始秋招面试了 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球友解惑答疑…

网络信息传输安全

目录 机密性-加密 对称加密 非对称加密 身份认证 摘要算法和数据完整性 数字签名 签名验签 数字证书 申请数字证书所需信息 数字证书的生成 数字证书的应用 https协议 数字证书的申请 数据在网络中传输过程中&#xff0c;怎么做到 数据没有被篡改&#xff1f;hash算…

【Python深度学习系列】基于Flask将深度学习模型部署到web应用上(完整案例)

这是我的第356篇原创文章。 一、引言 使用 Flask 在 10 分钟内将您自己训练的模型或预训练的模型&#xff08;VGG、ResNet、Densenet&#xff09;部署到网络应用程序中。以图像分类模型为例&#xff0c;本地直接部署和本地使用docker部署两种方式实现。 二、实现过程 2.1 准备…

扎克伯格的未来愿景:用智能眼镜引领数字社交新时代

Meta Connect 2024大会前夕&#xff0c;创始人马克扎克伯格的90分钟播客访谈&#xff0c;为我们描绘了Meta未来的蓝图。这场访谈&#xff0c;不仅是大会的热身&#xff0c;更是对科技未来的一次深刻洞察。 人工智能 - Ai工具集 - 未来办公人的智能办公生活导航网 扎克伯格的未…

实操学习——题目的管理

实操学习——题目的管理 一、基础配置二、权限控制三、分页1. PageNumberPagination分页器2. LimitOffsetPagination分页器3.总结 四、题目操作模块1. 考试2. 题目练习——顺序刷题3. 模拟考试 补充&#xff1a;前端调用接口写法 本文主要讲解题目的管理案例 1.题目的基本增删改…

FastAPI 的隐藏宝石:自动生成 TypeScript 客户端

在现代 Web 开发中&#xff0c;前后端分离已成为标准做法。这种架构允许前端和后端独立开发和扩展&#xff0c;但同时也带来了如何高效交互的问题。FastAPI&#xff0c;作为一个新兴的 Python Web 框架&#xff0c;提供了一个优雅的解决方案&#xff1a;自动生成客户端代码。本…

必知!5大AI生成模型

大数据文摘授权转载自数据分析及应用 随着Sora、diffusion等模型的大热&#xff0c;深度生成模型再次成为了研究的焦点。这类模型&#xff0c;作为强大的机器学习工具&#xff0c;能够从输入数据中学习其潜在的分布&#xff0c;并生成与训练数据高度相似的新样本。其应用领域广…

【IDEA】使用IDEA连接MySQL数据库并自动生成MySQL的建表SQL语句

前言&#xff1a; 在软件开发过程中&#xff0c;数据库的设计与实现是至关重要的一环。IntelliJ IDEA作为一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了丰富的数据库工具&#xff0c;使得连接MySQL数据库并自动生成建表SQL语句变得简单快捷。本文将详细…

ansible远程自动化运维、常用模块详解

一、ansible是基于python开发的配置管理和应用部署工具&#xff1b;也是自动化运维的重要工具&#xff1b;可以批量配置、部署、管理上千台主机&#xff1b;只需要在一台主机配置ansible就可以完成其它主机的操作。 1.操作模式&#xff1a; 模块化操作&#xff0c;命令行执行…

竹云赋能“中国·贵州”全省统一移动应用平台建设,打造政务服务“新引擎”

近日&#xff0c;2024中国国际大数据产业博览会在贵州贵阳圆满落幕。会上&#xff0c;由贵州省政府办公厅牵头建设的“中国贵州”全省统一移动应用平台正式发布&#xff0c;聚焦民生办事、政务公开、政民互动、扁平高效、数据赋能五大模块&#xff0c;旨在打造公平普惠的服务平…

解决Python Debug没有反应的问题

应该有伙伴和我一样&#xff0c;用的2024版本的VS code&#xff0c;但是用到的python解释器是3.6.x&#xff0c;或者是更旧版本的Python. 想要进行Debug就会在扩展里面安装 一般安装就会安装最新版本&#xff0c;但是debug时又没有反应&#xff0c;其主要原因是Python的版本与…

基于Springboot的助学金管理系统设计与实现

文未可获取一份本项目的java源码和数据库参考。 一、研究背景 利用计算机来实现助学金管理系统&#xff0c;已经成为一种趋势&#xff0c;相比传统的手工管理方式&#xff0c;利用软件进行助学金管理系统&#xff0c;有着执行快&#xff0c;可行性高、容量存储大&#xff0c;…

前端入门:HTML+CSS

引言: 前端三大件:HTML、CSS、JS,每一个部分都很重要,我听过比较形象的比喻就是HTML(HYPER TEXT MARKUP LANGUAGE)相当于骨架,而CSS就是装饰渲染,JS则是动作功能实现。 之前的文章我已经讲过HTML,这篇文章我将讲解HTML和CSS的案例。 网页开发: 我开发出来的网页如…