【论文阅读笔记】GNN入门(A Gentle Introduction to Graph Neural Networks)

本文介绍了图神经网络的基础概念,如图的结构(V、E和U),数据表示方式(图片、文本和复杂图),以及GNN处理图结构的三个问题层次。重点讲解了GNN模型的原理,包括AGNN的优化和信息传递机制,以及图注意力网络的应用。同时讨论了图采样和池化策略,以及相关技术如复杂图处理和池化操作的选择。

A Gentle Introduction to Graph Neural Networks

什么是图

实体之间的关系

在这里插入图片描述

V:顶点

E:边

U:全局信息

表示成向量

在这里插入图片描述

数据如何表示成图?

1.图片(244 * 244 * 3)

之前我们都是把图片表示成三个维度的tensor,现在我们可以把每个像素当作节点,相邻的节点用边连接(感觉这样GNN数据比CNN数据包含的信息多好多)

在这里插入图片描述

中间的是邻接矩阵,蓝色的点表示一条边(那么对于图片来说所有的邻接矩阵都长得一样呀)

2.文本

词表示成节点,上一个词和下一个词之间有一条有向边(为什么是有向边呢,因为要区别上一个词和下一个词,那么可不可以用两个有向边?类似双向RNN,然后使用两个邻接矩阵,一个记录下一个词,一个记录上一个词)

在这里插入图片描述

另外很多的数据都能表示成图比如分子,社交关系

在这里插入图片描述

在这里插入图片描述

三个层级的问题

图层面

例子:对图进行分类,哪个图有两个环

在这里插入图片描述

顶点层面

例子:社交关系中的两个人决裂之后,其他人的站队问题,有点像聚类

在这里插入图片描述

边的层面

例子:预测人物之间关系

在这里插入图片描述

图与神经网络

图上一共有四种信息:顶点,边,全局和连接性(每条边和哪两个顶点项链相连)

前面三个都可以用向量进行表示,向量对神经网络来说是很方便的。全局连结性可以用邻接矩阵来表示,n个顶点就会得到n * n的方形矩阵,矩阵对神经网络来说也是很方便的,但是有几个问题:

  • 矩阵会非常大,比如处理NLP任务,每个节点是词表里的单词,对于wikipedia这个数据集,就有1200w个顶点。
  • 邻接矩阵把任意行和列交换之后,代表的信息是不变的,举个例子,如果有四个顶点,那也有A44=24种邻接矩阵,标识的信息都是相同的,但这些矩阵输入到神经网络中,我们需要其输出的结果应该是一样的,即排序不会对结果产生影响。

所以为了存储高效和排除顺序的影响

在这里插入图片描述

顶点,边和全局还是之前说的,用向量来表示(图上这里每个顶点,边和全局都是标量表示的)

连接性使用邻接表来表示,每条边只记录和哪两个顶点相连。

接下来的问题是给了这样的输入,如何用神经网络来处理它。

GNN的模型

A GNN is an optimizable transformation on all attributes of the graph (nodes, edges, global-context) that preserves graph symmetries (permutation invariances).

GNN是对图中所有属性(顶点,变,全局上下文)做的优化的变换,这个变化是能够保持对称信息的,也就是说对顶点进行另外的排序之后,整个的结果是不会改变的。

接下来我们讲的是“信息传递的神经网络”,一个GNN层的输入是一个图,输出也是一个图。每个GNN层会对这些属性进行向量的变换,但不会改变图的连结性。

一个最简单的例子

在这里插入图片描述

顶点,边,全局上下文分别对应一个MLP,输入的大小和输出的大小相同,这三个MLP构成了一个GNN层,而且经过GNN层之后,连结性没有改变,因为维持连结性的邻接表没有参与神经网络的计算。

最后一层的输出根据不同的任务自行构造。举个例子,比如想要做顶点的预测,社交网络两个人决裂之后,其他人的站队,简单的二分类问题。经过GNN层之后我们得到了顶点的向量,构造一个输出为2的全连接层,多分类就构造输出为n的全连接层,再做softmax,做回归合适一样的,单输出就行了

在这里插入图片描述

这里所有的顶点共享一个全连接层,这里所有的边共享一个全连接层,全局上下文一个全连接层。

简单来说,就像CNN对图片的信息进行抽取,RNN对序列信息进行抽取,GNN是对图的信息进行抽取,抽取到的信息全连接层输出。

复杂一些的情况,我们还是想对顶点做预测,但没有顶点向量的信息,这时候需要一个操作叫pooling

举个例子

在这里插入图片描述

没有这个顶点的向量,可以把和他连接的边的向量和全局向量拿出来相加,维度不一样的话,用全连接层映射一下就好了。你说这你也没有,啥也没有还训练个毛呢。

示意图

在这里插入图片描述

U是没有的,V和E是有的,做一个pooling在进输出层进行输出。这里说的都是最后一层GNN输出,也就是信息抽取之后的事情。

同样的,如果没有边的向量,只有顶点的向量,也可以使用变连接的两个顶点的向量和全局向量相加做pooling

GNN模型的示意图

在这里插入图片描述

上述的模型有个问题:并没有充分利用图的信息,顶点,边,全局都是各自进入GNN层的MLP,哪些节点是相邻的,这个信息并没有被抽取出来。

为了解决这个问题,提出了信息传递(Message Passing)

举个例子

在这里插入图片描述

在更新一个顶点的信息时,拿到他相邻的节点加和在丢入GNN层,这个过程和卷积很像,如果这就是图片的图表示,邻接的顶点是相邻的像素,那就是在做卷积,只是卷积核里面的权重是一样的。

简单来说就是在信息抽取之前就做pooling,更复杂一些的情况,可以把顶点的信息汇聚到边,再把边的信息汇聚到顶点。

在这里插入图片描述

一些相关技术

以上是一些最简单的图神经网络,更富啊的图,可能有一些有向边,有一些无向边

在这里插入图片描述

有的图片是分层的,有的顶点内部是一个子图

在这里插入图片描述

对图进行采样

之前说过,假设我们的GNN有很多层,且做了消息传递,那么越往后的层,对于每个顶点来说,于就算每一层里面只看它的1近邻,经过很多层的消息传递之后,它其实能看到的是一个很大的图。

而在计算梯度时,我们需要把正向传播的那些中间变量存下来,所以最后一层的顶点要看一个很大的图,对他进行计算需要把它的中间结果都存下来,这样的计算可能是很难承受的。所以可以对图进行采样:每次采样一个小图出来,在小图上做信息汇聚。几种采样方法:

  • 随机采样

在这里插入图片描述

随机找一些顶点,然后找邻居

  • 随机游走

在这里插入图片描述

随机找一个顶点,规定随机游走的步数,得到一个子图

  • 二者结合

在这里插入图片描述

先随机游走,再找他们的邻居

  • 广度采样

在这里插入图片描述

随机找一个点,对他广度遍历,找出1近邻,2近邻,3近邻

另一个加快训练效率的相关问题是怎么做batch,计算顶点的并行性,这里的问题是每个顶点的邻居个数是不一样的,如何把这些定点合并成一个规则的张量。

任何一个神经网络都是存在假设的,比如CNN的平移不变性和局部性,RNN的时序连续性,GNN则是之前说的图的对称性:不管顶点顺序怎么变,GNN对图的作用都是不变的。

几个不同的汇聚操作

  • sum
  • mean
  • max

在这里插入图片描述

但没有哪一种是特别好的,比如左图用max池化就区分不出两个图的区别,右图用max和mean都区分不出。所以还是根据实际处理的图采用合适的pooling

Graph attention network

之前也提到了我们在做pooling时,和卷积很像,只不过我们求的不是加权和,而是全都都一样。所以就可以让他自己去学一个权重,用attention,节点之间做点积,之后softmax,再乘value

### ### 图神经网络在推荐系统中的应用综述 图神经网络GNNs)在推荐系统中的应用已经成为近年来研究的热点,其核心优势在于能够有效地建模用户与物品之间的复杂关系,并结合辅助信息(如社交网络、知识图谱等)来提升推荐的准确性。推荐系统的主要任务是从用户的历史行为和辅助信息中学习有效的用户和物品表示,以预测用户对未接触物品的兴趣程度。 #### 协同过滤中的图神经网络 在用户-物品协同过滤(User-item Collaborative Filtering)任务中,GNNs被广泛用于构建用户-物品交互图。这种图结构通常包含两类节点:用户和物品,边表示用户与物品之间的交互行为(如点击、评分、购买等)。GNN通过聚合用户或物品的邻居信息来生成节点嵌入,从而实现更精准的推荐。例如,在图构建阶段,用户和物品节点之间的连接可以基于评分矩阵或行为日志,在邻居聚合阶段,GNN采用图卷积、图注意力等机制来融合邻居信息[^1]。 #### 序列推荐中的图神经网络 序列推荐(Sequential Recommendation)任务中,GNN被用来建模用户行为序列中的复杂依赖关系。传统方法如RNN、LSTM和GRU通常用于捕捉顺序模式,但这些模型难以建模非线性依赖和长序列中的稀疏交互。GNN通过将行为序列建模为图结构,使得模型能够更灵活地捕捉用户的动态偏好。例如,自注意力机制虽然在建模序列模式方面表现出色,但其假设行为顺序是完全随机的,而GNN则可以更自然地建模行为之间的拓扑关系[^3]。 #### 社交推荐中的图神经网络 在社交推荐(Social Recommendation)任务中,GNN能够同时建模用户-物品交互图和用户社交关系图。这种双图结构可以通过两种方式整合:一种是分别从两个图中学习用户表示,然后进行融合;另一种是将两个图合并为一个统一的异构图,并在每一层中同时更新用户表示。后者的优势在于能够在每一层中融合两种不同类型的信息,从而提升推荐的个性化能力[^4]。 #### 基于知识图谱的推荐 知识图谱增强的推荐系统(Knowledge Graph-based Recommendation)也是GNN的重要应用场景。知识图谱提供了丰富的物品属性和关系信息,GNN可以通过图构建和关系感知的聚合机制来增强物品表示。例如,图构建阶段可以将物品、实体和关系建模为图结构,而关系感知的聚合机制则能够区分不同类型的关系对用户偏好的影响。 #### 其他推荐任务 除了上述主流任务外,GNN还被应用于一些小众推荐任务,如地点推荐(Points-of-Interest Recommendation)、群体推荐(Group Recommendation)、捆绑推荐(Bundle Recommendation)、点击率预测(Click-Through Rate Prediction)和多媒体推荐(Multimedia Recommendation)。这些任务通常涉及更复杂的用户-物品关系结构,而GNN能够通过建模高阶交互来提升推荐效果。 ### 代码示例 以下是一个基于PyTorch Geometric的简单图神经网络模型实现,适用于用户-物品交互图的协同过滤任务: ```python import torch import torch.nn.functional as F from torch_geometric.nn import GCNConv class CollaborativeFilteringGNN(torch.nn.Module): def __init__(self, num_features, hidden_dim, num_classes): super(CollaborativeFilteringGNN, self).__init__() self.conv1 = GCNConv(num_features, hidden_dim) self.conv2 = GCNConv(hidden_dim, num_classes) def forward(self, data): x, edge_index = data.x, data.edge_index x = self.conv1(x, edge_index) x = F.relu(x) x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1) ``` 该模型可以用于用户-物品交互图的节点分类任务,例如预测用户对物品的兴趣类别。 ### 未来研究方向 尽管GNN在推荐系统中展现出强大的建模能力,但仍面临多个挑战。例如,如何提升模型的可解释性,以便用户理解推荐结果的来源;如何在保护用户隐私的前提下利用社交关系信息;如何高效处理大规模图数据,以支持实时推荐。此外,跨域推荐、多任务学习以及基于图的强化学习策略也是未来的重要研究方向[^1]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值