GNN理论学习(五)GNN的表达能力


前言

许多研究证明了前馈神经网络可以逼近任意感兴趣的函数,然而这个结论还没有推广到GNN中。这主要是由GNN参数空间中的附加限制引起的归纳偏置导致的。
本章中,先介绍了一种常用的GNN架构——Massage passing,然后介绍了MPGNN的优势和不足。随后,介绍了一种当前能够克服MPGNN在表达能力上的缺陷的技术,例如,附加随机属性(inject random attributes),附加绝对距离属性(inject deterministic distance attributes),构建高阶GNN(high-order GNN)等.


一、图表达学习(GRL)和问题公式化表达

1.什么是表达能力

将一个机器学习模型记为 f θ f_{\theta} fθ,该模型通过优化参数 θ \theta θ来逼近 f ∗ f^* f由于 f ∗ f^* f在实际中是未知的,所以期望 f θ f_{\theta} fθ能够逼近一个很宽范围的 f ∗ f^* f一个模型能够逼近函数的范围的估计,被称为模型的表达能力(expressive power)。
Cybenko在1989年首次证明了定义在紧致空间上的连续函数可以一个只有一个隐藏层和一个Sigmoid激活函数的NN逼近。然而,这并不能够证明在训练过程中, f θ f_{\theta} fθ确实是在逼近 f ∗ f^* f的。图5.1展示了不同类型ML模型间,数据数量 与 ML模型性能的性能的关系。
图1
可以看出,只有在数据量足够大的时候NN的表现才能够超过传统的ML模型。一个重要的原因是,NN要进行数据量和模型复杂度之间的基本权衡。虽然NN可以具有更高的表达能力,但是当与更多的参数进行匹配时,NN很有可能会与训练样本过拟合。(数据量不足->参数过多->模型复杂->与训练样本过拟合)。所以有必要在对模型参数进行一些限制时,保持NN的表达能力。
在实际任务中,模型参数的限制通常时通过关于数据的先验知识得到的,这些模型的限制被称为**归纳偏置(inductive biases)**图5.2展示了有归纳偏置和没有归纳偏置可以显著影响模型的表达能力。
在这里插入图片描述
下面是对图5.2的一些解释(个人理解):
1.随着模型复杂度的增大,训练集错误率降低,测试集错误率升高,即出现过拟合现象。
2.实线是没有加入归纳偏置的测试集错误率和训练集错误率;虚线是加入了归纳偏置后的测试集错误率和训练集错误率。(这里应该是用测试集错误率越低来认定模型的表达能力越强)
3.最优的模型复杂度是取测试集错误率最低的时候的复杂度。从红线到×是单纯的通过增加模型复杂度来提高NN的表达能力,根据上面的介绍,这可能会导致模型过拟合,这也与图中测试集错误率升高对应。
4.从红线到⚪是通过在模型中加入归纳偏置来提高模型表达能力。可以看出,该方法没有
增大模型的复杂度,即不会出现过拟合现象,但是有效降低了测试集的错误率,即有效提高了模型的表达能力。

2.GNN的置换不变性

序列数据和图像数据是具有规整的结构的,但图数据是非常规数据,所以会GNN面临更多的挑战。在图机器学习中有一个基本假设:模型预测的目标应该与图中节点的顺序无关。为了匹配这一假设,GNN具有通用的归纳偏差(general inductive biases),即置换不变性(permutation invariance)。特别是,GNN的输出应该与如何分配图的节点索引无关,从而独立于节点的处理顺序。GNN的参数需要独立利于节点的顺序,并且参数应该在是整个图共享的。图5.4是置换不变性的一个示例。
在这里插入图片描述
下面是对图5.4的一些解释(个人理解):每种颜色的节点表示一类节点,那么两张图的结构是一样的(每个节点均与1蓝1橙两个节点相邻),但是GNN对节点的索引不同。如果GNN满足置换不变性,那么两张图应该具有相同的输出,即右侧的结果。

3.图表达学习的公式表达

特征空间定义为 X : = Γ × f X: = \Gamma × f X:=Γ×f,其中 Γ \Gamma Γ是图结构数据空间, f f f包含所有感兴趣的节点. X X X中的一个点可以被记为 ( g , S ) (g,S) (g,S),其中 S S S g g g中感兴趣的节点的子集。我们将 ( g , S ) (g,S) (g,S)称为GRL样本。每一个 ( g , S ) ∈ Γ (g,S)\in \Gamma (g,S)Γ都对应一个目标空间 Y Y Y中的一个目标 y y y
假设一个实际的联系两个空间的映射函数为 f ∗ : X → Y f^*: X \to Y f:XY,即 f ∗ ( g , S ) = y f^*(g,S)=y f(g,S)=y.给定一个训练集 Θ = ( g ( i ) , S ( i ) , y ( i ) ) i = 1 k \Theta = {(g^{(i)},S^{(i)},y^{(i)})} ^k _{i=1} Θ=(g(i),S(i),y(i))i=1k,测试集样本记为 Φ = ( g ~ ( i ) , S ~ ( i ) , y ~ ( i ) ) i = 1 k \Phi = {(\tilde{g} ^{(i)},\tilde{S}^{(i)},\tilde{y}^{(i)})} ^k _{i=1} Φ=(g~(i),S~(i),y~(i))i=1k
GRL的目标是基于 Θ \Theta Θ学习一个函数以逼近基于 Φ \Phi Φ的函数 f ∗ f^* f
下面是几种可以表述为GRL问题的学习问题:
(1)图分类问题 / 图层次的预测问题:此时感兴趣的节点子集默认为整个节点集 V [ g ] V[g] V[g]图结构数据空间 Γ \Gamma Γ一般包含多个图。目标空间 Y Y Y包含不同图的标签。
(2)节点分类问题 / 节点层次的预测问题:此时, S S S默认为单个感兴趣的节点, g g g可以定义为 S S S周围的子图,或整个图。
**(3)连接预测问题 /节点配对层次的预测问题:**此时, S S S默认为感兴趣的一对节点,与节点分类问题类似, g g g可以定义为 S S S周围的子图,或整个图。目标空间 Y Y Y包含0-1标签来代指两个节点间是否有连接。 Y Y Y也可以推广到包含反应连接种类的标签。
图5.6给出了上述3类GRL问题的示例。

在这里插入图片描述

4.图表达学习的基本定义与基本假设

定义1:GRL样本同构
给定两个GRL样本 ( g ( 1 ) , S ( 1 ) ) (g^{(1)},S^{(1)}) (g(1),S(1)), ( g ( 2 ) , S ( 2 ) ) ∈ X (g^{(2)},S^{(2)}) \in X (g(2),S(2))X.假设 g ( 1 ) = ( A ( 1 ) , X ( 1 ) ) g^{(1)}=(A^{(1)},X^{(1)}) g(1)=(A(1),X(1)), g ( 2 ) = ( A ( 2 ) , X ( 2 ) ) g^{(2)}=(A^{(2)},X^{(2)}) g(2)=(A(2),X(2)).如果存在一个双射映射 π : V [ g ( 1 ) ] → V [ g ( 2 ) ] \pi : V[g^{(1)}] \to V[g^{(2)}] π:V[g(1)]V[g(2)],也就是 A u v ( 1 ) = A π ( u ) π ( v ) ( 2 ) A^{(1)}_{uv}=A^{(2)}_{\pi{(u)}\pi{(v)}} Auv(1)=Aπ(u)π(v)(2), X u ( 1 ) = X π ( u ) ( 2 ) X^{(1)}_{u}=X^{(2)}_{\pi{(u)}} Xu(1)=Xπ(u)(2),同时 π \pi π也给予了 S ( 1 ) S^{(1)} S(1), S ( 2 ) S^{(2)} S(2)之间的双射映射。那么,我们认为 ( g ( 1 ) , S ( 1 ) ) (g^{(1)},S^{(1)}) (g(1),S(1)) ( g ( 2 ) , S ( 2 ) ) (g^{(2)},S^{(2)}) (g(2),S(2))是同构的(Isomorphism),记作 ( g ( 1 ) , S ( 1 ) ) ≅ ( g ( 2 ) , S ( 2 ) ) (g^{(1)},S^{(1)})\cong (g^{(2)},S^{(2)}) (g(1),S

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python是一个功能强大且易于学习的编程语言,已成为深度学习和图神经网络(GNN)的主要编程语言之一。在Python上构建深度学习GNN,我们需要注意以下几点。 1.首先,我们需要确定要使用的框架。Python有许多深度学习框架,如TensorFlow, PyTorch和Keras等,都可用于构建GNN。每个框架都有其独特的优点和局限性,应根据项目的具体需求选择合适的框架。 2.其次,我们需要学习GNN的基础知识并了解其层次结构,从而选择不同层次的GNN算法来解决特定的任务。 3.接下来,我们需要理解节点嵌入、图嵌入、图卷积等关键概念,并掌握如何在Python中使用它们构建GNN模型。 4.此外,我们还需要了解如何从数据中提取相关特征,并使用这些特征指导GNN学习过程。 5.最后,我们需要进行模型的训练和测试,通过调整超参数来提高模型的性能。 总的来说,Python是构建深度学习GNN的理想语言,只要我们掌握了相关知识和技能,就可以轻松地构建高效的GNN模型来解决各种图数据相关的问题。 ### 回答2: Python是一种高级编程语言,广泛应用于各种计算机应用领域。在机器学习和人工智能领域,Python成为了最常用的编程语言之一。特别是在深度学习和图神经网络(GNN)领域,Python的使用频率更是最高的。 Python构建深度学习GNN可以使用多种流行的深度学习库和图计算库。其中,PyTorch是最重要的深度学习库之一,因为它提供了丰富的深度学习模块和工具,例如自动微分、神经网络层、优化算法等。PyTorch也支持图神经网络领域最常用的图神经网络计算库DGL(Deep Graph Library)。 使用PyTorch和DGL可以构建各种图神经网络模型。例如,可以使用GCN(Graph Convolutional Network)模型来对图进行分类、聚类和预测。GCN模型基于卷积神经网络的结构,但是使用由图定义的邻接矩阵和特征矩阵来替代卷积核。GCN模型在节点分类、推荐系统和社交网络分析等领域具有广泛的应用。 另一个重要的库是PyG(PyTorch Geometric)。PyG是基于PyTorch的图神经网络架构,提供了更加高级的图神经网络模型和操作。例如,可以使用GAT(Graph Attention Network)模型来学习图结构中的节点关系。GAT模型使用多头注意力机制,可以学习节点之间复杂的非线性关系。GAT模型特别适用于社交网络和知识图谱分析。 总之,Python构建深度学习GNN需要掌握多种深度学习库和图计算库,例如PyTorch、DGL、PyG等。使用这些工具可以构建各种高级的图神经网络模型,用于图结构数据的分析、预测和决策。 ### 回答3: 近年来,图神经网络(GNN)成为了深度学习领域中备受关注的一个新兴方向。Python 作为一种功能强大的编程语言,被广泛应用于数据科学、机器学习、人工智能等领域,自然也是构建 GNN 的首选语言之一。 首先,Python 社区中有很多为 GNN 提供了良好支持的开源库和框架。例如,PyTorch、TensorFlow 和 MXNet 等都提供了图神经网络相关的模块、函数和工具。此外,还有一些专门的 GNN 库,如 DGL、PyG、Spektral 等,它们能够更加简便地构建 GNN、优化模型结构和训练模型。 其次,Python 相比其他语言更加易于学习和使用。Python 的语法结构简单易懂,而且开源社区提供了丰富的教程和样例代码,能够快速帮助新手入门。此外,Python 也具有强大的数据处理和可视化能力,能够方便地展示数据、分析特征和构建模型,为 GNN 的研究提供了充足支持。 最后,Python 可以快速实现一些最新的 GNN 模型,其中最著名的是图卷积网络(GCN)。以 PyTorch 为例,在 PyTorch 中支持 GCN 的库有 PyG。它提供了很多现成的 GCN 模型,如 GAT、GraphSAGE 等,以及一些其他常用的图神经网络模型。 总之,Python 的开源库、易用性和快速实现 GNN 模型等优势,使 Python 成为了构建深度学习 GNN 最佳的选择之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值