基于图同构网络(GIN)的图表征网络的实现

基于图同构网络(GIN)的图表征网络的实现基于图同构网络的图表征学习主要包含以下两个过程:首先计算得到节点表征;其次对图上各个节点的表征做图池化(GraphPooling),或称为图读出(GraphReadout),得到图的表征(GraphRepresentation)。在这里,我们将采用自顶向下的方式,来学习基于图同构模型(GIN)的图表征学习方法。我们首先关注如何基于节点表征计算得到图的表征,而忽略计算结点表征的方法。基于图同构网络的图表征模块(GINGraphReprModu

大家好,又见面了,我是你们的朋友全栈君。

基于图同构网络(GIN)的图表征网络的实现
基于图同构网络的图表征学习主要包含以下两个过程:

  1. 首先计算得到节点表征;
  2. 其次对图上各个节点的表征做图池化(Graph Pooling),或称为图读
    出(Graph Readout),得到图的表征(Graph
    Representation)。
    在这里,我们将采用自顶向下的方式,来学习基于图同构模型(GIN)的图
    表征学习方法。我们首先关注如何基于节点表征计算得到图的表征,而忽
    略计算结点表征的方法。
    基于图同构网络的图表征模块(GINGraphRepr
    Module)
    此模块首先采用GINNodeEmbedding 模块对图上每一个节点做节点嵌入
    (Node Embedding),得到节点表征,然后对节点表征做图池化得到图
    的表征,最后用一层线性变换得到图的表征(graph representation)。

可以看到可选的基于结点表征计算得到图表征的方法有:
3. “sum”:
对节点表征求和;
使用模块torch_geometric.nn.glob.global_add_pool。
4. “mean”:
对节点表征求平均;
使用模块torch_geometric.nn.glob.global_mean_pool 。
5. “max”:取节点表征的最大值。
对一个batch中所有节点计算节点表征各个维度的最大值;
使用模块torch_geometric.nn.glob.global_max_pool。
6. “attention”:
基于Attention对节点表征加权求和;
使用模块 torch_geometric.nn.glob.GlobalAttention;
来自论文 “Gated Graph Sequence Neural Networks” 。
7. “set2set”:
8. 另一种基于Attention对节点表征加权求和的方法;
9. 使用模块 torch_geometric.nn.glob.Set2Set;
10. 来自论文 “Order Matters: Sequence to sequence for sets”。

基于图同构网络的节点嵌入模块
(GINNodeEmbedding Module)
此模块基于多层GINConv实现结点嵌入的计算。此处我们先忽略GINConv
的实现。此模块得到的节点属性输入为类别型向量,我们首先用
AtomEncoder 对其做嵌入得到第0 层节点表征(稍后我们再对
AtomEncoder做分析)。然后我们逐层计算节点表征,从第1层开始到第
num_layers 层,每一层节点表征的计算都以上一层的节点表征
h_list[layer] 、边edge_index 和边的属性edge_attr 为输入。需要注
意的是,GINConv的层数越多,此模块的感受野(receptive field)越
大,结点i 的表征最远能捕获到结点i 的距离为num_layers 的邻接节点的
信息。

GINConv–图同构卷积层
图同构卷积层的数学定义如下:
PyG中已经实现了此模块,我们可以通过torch_geometric.nn.GINConv
来使用PyG定义好的图同构卷积层,然而该实现不支持存在边属性的图。在
这里我们自己自定义一个支持边属性的GINConv 模块。
由于输入的边属性为类别型,因此我们需要先将类别型边属性转换为边表
征。我们定义的GINConv模块遵循“消息传递、消息聚合、消息更新”这一
过程。

背景:Weisfeiler-Lehman Test (WL Test)
图同构性测试
两个图是同构的,意思是两个图拥有一样的拓扑结构,也就是说,我们可
以通过重新标记节点从一个图中得到另外一个图。Weisfeiler-Lehman 图
的同构性测试算法,简称WL Test,是一种用于测试两个图是否同构的算
法。
WL Test 的一维形式,类似于图神经网络中的邻接节点聚合。WL Test 1)
迭代地聚合节点及其邻接节点的标签,然后2)将聚合的标签散列成唯一的
新标签,该过程形式化为下方的公示。在迭代过程中,发现两个图之间的
节点的标签不同时,就可以确定这两个图是非同构的。需要注意的是节点
标签可能的取值只能是有限个数。在上方的公示中, 表示节点 的第 次迭代的标签,第 次迭代的标签为
节点原始标签。
WL测试不能保证对所有图都有效,特别是对于具有高度对称性的图,如链
式图、完全图、环图和星图,它会判断错误。
Weisfeiler-Lehman Graph Kernels 方法提出用WL子树核衡量图之间相
似性。该方法使用WL Test不同迭代中的节点标签计数作为图的表征向量,
它具有与WL Test相同的判别能力。直观地说,在WL Test的第 次迭代中,
一个节点的标签代表了以该节点为根的高度为 的子树结构。
Weisfeiler-Leman Test 算法举例说明:给定两个图 和 ,每个节点拥
有标签(实际中,一些图没有节点标签,我们可以以节点的度作为标
签)。
Weisfeiler-Leman Test 算法通过重复执行以下给节点打标签的过程来实
现图是否同构的判断:

  1. 聚合自身与邻接节点的标签得到一串字符串,自身标签与邻接节点的标
    签中间用,分隔,邻接节点的标签按升序排序。排序的原因在于要保证
    单射性,即保证获得的结果不因邻接节点的顺序改变而改变。2. 标签散列,即标签压缩,将较长的字符串映射到一个简短的标签。
  2. 给节点重新打上标签。每重复一次以上的过程,就完成一次节点自身标签与邻接节点标签的聚
    合。
    当出现两个图相同节点标签的出现次数不一致时,即可判断两个图不相
    似。如果上述的步骤重复一定的次数后,没有发现有相同节点标签的出现
    次数不一致的情况,那么我们无法判断两个图是否同构。
    当两个节点的 层的标签一样时,表示分别以这两个节点为根节点的WL子
    树是一致的。WL子树与普通子树不同,WL子树包含重复的节点。下图展
    示了一棵以1节点为根节点高为2的WL子树。
    图相似性评估
    此方法来自于Weisfeiler-Lehman Graph Kernels。
    WL Test 算法的一点局限性是,它只能判断两个图的相似性,无法衡量图之
    间的相似性。要衡量两个图的相似性,我们用WL Subtree Kernel方法。
    该方法的思想是用WL Test算法得到节点的多层的标签,然后我们可以分别
    统计图中各类标签出现的次数,存于一个向量,这个向量可以作为图的表
    征。两个图的这样的向量的内积,即可作为这两个图的相似性的估计。图同构网络模型的构建
    能实现判断图同构性的图神经网络需要满足,只在两个节点自身标签一样
    且它们的邻接节点一样时,图神经网络将这两个节点映射到相同的表征,
    即映射是单射性的。可重复集合(Multisets)指的是元素可重复的集合,
    元素在集合中没有顺序关系。 一个节点的所有邻接节点是一个可重复集
    合,一个节点可以有重复的邻接节点,邻接节点没有顺序关系。因此GIN模
    型中生成节点表征的方法遵循WL Test算法更新节点标签的过程。
    在生成节点的表征后仍需要执行图池化(或称为图读出)操作得到图表
    征,最简单的图读出操作是做求和。由于每一层的节点表征都可能是重要
    的,因此在图同构网络中,不同层的节点表征在求和后被拼接,其数学定
    义如下,
    采用拼接而不是相加的原因在于不同层节点的表征属于不同的特征空间。
    未做严格的证明,这样得到的图的表示与WL Subtree Kernel得到的图的表
    征是等价的。

作业:
[6,[4,[1,5,6]]]
[3,[[4,[3,5,6]],[2,[1,3,5]]]]
[1,[[2,[1,3,5]],[5,[1,2,4]]]]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127041.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • excel如何合并相同项单元格内容_不能对合并单元格部分更改

    excel如何合并相同项单元格内容_不能对合并单元格部分更改工作中可能想要快速的实现将Excel相同项目单元格合并,下面就跟大家简单地介绍一下。1.如下图F列中含有很多相同项,现在我们想要将这些相同项目单元格合并。2.首选我们选中F列数据单元格区域3.点击下图选项(Excel工具箱,百度即可了解详细下载安装信息,本文这里就不做详细解说。)4.然后选择【合并转换】,【合并相同单元格】5.勾选【列方向】6.最后点击【确定】即可完成7完成效果如下图所示

    2022年11月3日
  • 浅谈 MVC与三层架构

    浅谈 MVC与三层架构引言:使用Eclipse开发工具写JavaWeb项目时会发现,一个中型或者大型项目随着代码的增多,会发现:代码既可以写在src目录下,也可以写在WebContent目录下。src下可以建很多包,WebContent下可以建很多文件夹。所以问题就来了:一个新的类到底往哪个目录下的哪个文件夹里写?此时解决办法就是:需要一个模式去规范,到底哪个类该往哪里写。…

    2022年6月25日
  • 评分卡设计_创建绿色饭店的原则

    评分卡设计_创建绿色饭店的原则本文主要讲“变量选择”“模型开发”“评分卡创建和刻度”变量分析首先,需要确定变量之间是否存在共线性,若存在高度相关性,只需保存最稳定、预测能力最高的那个。需要通过VIF(varianceinflationfactor)也就是方差膨胀因子进行检验。变量分为连续变量和分类变量。在评分卡建模中,变量分箱(binning)是对连续变量离散化(discretization)的一种称呼

    2022年10月22日
  • ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送「建议收藏」

    我们都买过火车票,买完后会有邮件提醒,有时候邮件并不是买完票立马就能收到邮件通知,这个就用到了异步邮件发送。这篇文章介绍了怎么实现异步邮件发送

    2022年2月16日
  • 安卓抓取直播源_港澳台rtmp直播源

    安卓抓取直播源_港澳台rtmp直播源很多时候你们在pc端看电视直播,都会出现直播源失效的情况,这样就可以用到电视直播源抓取工具箱,帮助你们自动抓取最新的直播源,让你们能够随时的观看自己喜欢的电视内容。软件简介:经常看到大家电视直播源群里找各种直播源,也会在欢社区的论坛找找到相关的直播源,由于直播源失效性很快,所以一般不能用的比能用得还多。与其这么麻烦不如自己麻烦点,虽然需求自己动手丰衣足食,但起码找到的都是有效的!从源代码里找直播源…

    2022年10月20日
  • CodeBlocks控制台中文乱码

    CodeBlocks控制台中文乱码中文乱码是个老问题了,涉及乱码的问题无非是编码不统一造成的;涉及编码的地方常见有:1.源文件本身编码2.编译器读取源文件编码3.数据编码(数据库,IO文件等)4.执行输出编码 知道乱码的原因有利于解决乱码问题,这些原因在哪个IDE都是通用的 关于codeblock这款IDE,这里…

    2022年7月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号