图神经网络从入门到入门(下)

简介: 图神经网络从入门到入门

3. Graph Attention Networks(GAT)[9]


为了解决GNN聚合邻居节点的时候没有考虑到不同的邻居节点重要性不同的问题,GAT借鉴了Transformer的idea,引入masked self-attention机制,在计算图中的每个节点的表示的时候,会根据邻居节点特征的不同来为其分配不同的权值。


具体的,对于输入的图,一个graph attention layer如图9所示,



图9


其中 采用了单层的前馈神经网络实现,计算过程如下(注意权重矩阵 对于所有的节点是共享的):



计算完attention之后,就可以得到某个节点聚合其邻居节点信息的新的表示,计算过程如下:



为了提高模型的拟合能力,还引入了多头的self-attention机制,即同时使用多个 计算self-attention,然后将计算的结果合并(连接或者求和):



此外,由于GAT结构的特性,GAT无需使用预先构建好的图,因此GAT既适用于Transductive Learning,又适用于Inductive Learning。


那么GAT的具体效果如何呢?作者分别在三个Transductive Learning和一个Inductive Learning任务上进行实验,实验结果如下:



无论是在Transductive Learning还是在Inductive Learning的任务上,GAT的效果都要优于传统方法的结果。


至此,GAT的介绍完毕,我们来总结一下,GAT的一些优点,


(1)训练GCN无需了解整个图结构,只需知道每个节点的邻居节点即可


(2)计算速度快,可以在不同的节点上进行并行计算


(3)既可以用于Transductive Learning,又可以用于Inductive Learning,可以对未见过的图结构进行处理


(仍然是简单的idea,解决了问题,效果还好!!!)


到此,我们就介绍完了GNN中最经典的几个模型GCN、GraphSAGE、GAT,接下来我们将针对具体的任务类别来介绍一些流行的GNN模型与方法。


四、无监督的节点表示学习(Unsupervised Node Representation)


由于标注数据的成本非常高,如果能够利用无监督的方法很好的学习到节点的表示,将会有巨大的价值和意义,例如找到相同兴趣的社区、发现大规模的图中有趣的结构等等。



图10


这其中比较经典的模型有GraphSAGE、Graph Auto-Encoder(GAE)等,GraphSAGE就是一种很好的无监督表示学习的方法,前面已经介绍了,这里就不赘述,接下来将详细讲解后面两个。


Graph Auto-Encoder(GAE)[10]


在介绍Graph Auto-Encoder之前,需要先了解自编码器(Auto-Encoder)、变分自编码器(Variational Auto-Encoder),具体可以参考[11],这里就不赘述。


理解了自编码器之后,再来理解变分图的自编码器就容易多了。如图11输入图的邻接矩阵和节点的特征矩阵,通过编码器(图卷积网络)学习节点低维向量表示的均值和方差,然后用解码器(链路预测)生成图。



图11


编码器(Encoder)采用简单的两层GCN网络,解码器(Encoder)计算两点之间存在边的概率来重构图,损失函数包括生成图和原始图之间的距离度量,以及节点表示向量分布和正态分布的KL-散度两部分。具体公式如图12所示:



图12


另外为了做比较,作者还提出了图自编码器(Graph Auto-Encoder),相比于变分图的自编码器,图自编码器就简单多了,Encoder是两层GCN,Loss只包含Reconstruction Loss。


那么两种图自编码器的效果如何呢?作者分别在Cora、Citeseer、Pubmed数据集上做Link prediction任务,实验结果如下表,图自编码器(GAE)和变分图自编码器(VGAE)效果普遍优于传统方法,而且变分图自编码器的效果更好;当然,Pumed上GAE得到了最佳结果。可能是因为Pumed网络较大,在VGAE比GAE模型复杂,所以更难调参。



五、Graph Pooling


Graph pooling是GNN中很流行的一种操作,目的是为了获取一整个图的表示,主要用于处理图级别的分类任务,例如在有监督的图分类、文档分类等等。



图13


Graph pooling的方法有很多,如简单的max pooling和mean pooling,然而这两种pooling不高效而且忽视了节点的顺序信息;这里介绍一种方法:Differentiable Pooling (DiffPool)。


1.DiffPool[12]


在图级别的任务当中,当前的很多方法是将所有的节点嵌入进行全局池化,忽略了图中可能存在的任何层级结构,这对于图的分类任务来说尤其成问题,因为其目标是预测整个图的标签。针对这个问题,斯坦福大学团队提出了一个用于图分类的可微池化操作模块——DiffPool,可以生成图的层级表示,并且可以以端到端的方式被各种图神经网络整合。


DiffPool的核心思想是通过一个可微池化操作模块去分层的聚合图节点,具体的,这个可微池化操作模块基于GNN上一层生成的节点嵌入 以及分配矩阵 ,以端到端的方式分配给下一层的簇,然后将这些簇输入到GNN下一层,进而实现用分层的方式堆叠多个GNN层的想法。(图14)



图14


那么这个节点嵌入和分配矩阵是怎么算的?计算完之后又是怎么分配给下一层的?这里就涉及到两部分内容,一个是分配矩阵的学习,一个是池化分配矩阵


  • 分配矩阵的学习


这里使用两个分开的GNN来生成分配矩阵 和每一个簇节点新的嵌入 ,这两个GNN都是用簇节点特征矩阵 和粗化邻接矩阵 作为输入,



  • 池化分配矩阵


计算得到分配矩阵 和每一个簇节点新的嵌入 之后,DiffPool层根据分配矩阵,对于图中的每个节点/簇生成一个新的粗化的邻接矩阵 与新的嵌入矩阵 ,



总的来看,每层的DiffPool其实就是更新每一个簇节点的嵌入和簇节点的特征矩阵,如下公式:



至此,DiffPool的基本思想就讲完了。那么效果如何呢?作者在多种图分类的基准数据集上进行实验,如蛋白质数据集(ENZYMES,PROTEINS,D&D),社交网络数据集(REDDIT-MULTI-12K),科研合作数据集(COLLAB),实验结果如下:



其中,GraphSAGE是采用全局平均池化;DiffPool-DET是一种DiffPool变体,使用确定性图聚类算法生成分配矩阵;DiffPool-NOLPDiffPool的变体,取消了链接预测目标部分。总的来说,DiffPool方法在GNN的所有池化方法中获得最高的平均性能。


为了更好的证明DiffPool对于图分类十分有效,论文还使用了其他GNN体系结构(Structure2Vec(s2v)),并且构造两个变体,进行对比实验,如下表:



可以看到DiffPool的显著改善了S2V在ENZYMES和D&D数据集上的性能。



而且DiffPool可以自动的学习到恰当的簇的数量。


至此,我们来总结一下DiffPool的优点,


(1)可以学习层次化的pooling策略


(2)可以学习到图的层次化表示


(3)可以以端到端的方式被各种图神经网络整合


然而,注意到,DiffPool也有其局限性,分配矩阵需要很大的空间去存储,空间复杂度为 , 为池化层的层数,所以无法处理很大的图。


参考



本文亮点总结


1.GCN的缺点也是很显然易见的,第一,GCN需要将整个图放到内存和显存,这将非常耗内存和显存,处理不了大图;第二,GCN在训练时需要知道整个图的结构信息(包括待预测的节点)


2.GraphSAGE的优点:


(1)利用采样机制,很好的解决了GCN必须要知道全部图的信息问题,克服了GCN训练时内存和显存的限制,即使对于未知的新节点,也能得到其表示


(2)聚合器和权重矩阵的参数对于所有的节点是共享的


(3)模型的参数的数量与图的节点个数无关,这使得GraphSAGE能够处理更大的图


(4)既能处理有监督任务也能处理无监督任务


3.GAT的优点:


(1)训练GCN无需了解整个图结构,只需知道每个节点的邻居节点即可


(2)计算速度快,可以在不同的节点上进行并行计算


(3)既可以用于Transductive Learning,又可以用于Inductive Learning,可以对未见过的图结构进行处理

相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
1月前
|
监控 安全 数据安全/隐私保护
智能家居安全入门:保护你的网络家园
本文旨在为初学者提供一份简明扼要的指南,介绍如何保护自己的智能家居设备免受网络攻击。通过分析智能家居系统常见的安全漏洞,并提供实用的防御策略,帮助读者建立起一道坚固的数字防线。
|
16天前
|
弹性计算 人工智能 运维
Terraform从入门到实践:快速构建你的第一张业务网络(上)
本次分享主题为《Terraform从入门到实践:快速构建你的第一张业务网络》。首先介绍如何入门和实践Terraform,随后演示如何使用Terraform快速构建业务网络。内容涵盖云上运维挑战及IaC解决方案,并重磅发布Terraform Explorer产品,旨在降低使用门槛并提升用户体验。此外,还将分享Terraform在实际生产中的最佳实践,帮助解决云上运维难题。
83 1
Terraform从入门到实践:快速构建你的第一张业务网络(上)
|
1月前
|
域名解析 网络协议 应用服务中间件
网络编程入门如此简单(四):一文搞懂localhost和127.0.0.1
本文将以网络编程入门者视角,言简意赅地为你请清楚localhost和127.0.0.1的关系及区别等。
52 2
网络编程入门如此简单(四):一文搞懂localhost和127.0.0.1
|
17天前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习入门案例:运用神经网络实现价格分类
深度学习入门案例:运用神经网络实现价格分类
|
26天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习中的卷积神经网络(CNN)入门与实践
【9月更文挑战第19天】在这篇文章中,我们将探索深度学习的一个重要分支——卷积神经网络(CNN)。从基础概念出发,逐步深入到CNN的工作原理和实际应用。文章旨在为初学者提供一个清晰的学习路径,并分享一些实用的编程技巧,帮助读者快速上手实践CNN项目。
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:理解卷积神经网络(CNN)
【9月更文挑战第14天】本文旨在为初学者提供一个关于卷积神经网络(CNN)的直观理解,通过简单的语言和比喻来揭示这一深度学习模型如何识别图像。我们将一起探索CNN的基本组成,包括卷积层、激活函数、池化层和全连接层,并了解它们如何协同工作以实现图像分类任务。文章末尾将给出一个简单的代码示例,帮助读者更好地理解CNN的工作原理。
46 7
|
16天前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
17天前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)