图神经网络通用框架信息传递网络(MPNNs)

  • 介绍
  • 机制
    • 理论
      • 信息传递阶段
      • 读取阶段
    • 实际案例
    • 代码
  • 第三方库

介绍

信息传递网络(Message Passing Neural Networks, MPNNs)是由Gilmer等人提出的一种图神经网络通用计算框架。原文以量子化学为例,根据原子的性质(对应节点特征)和分子的结构(对应边特征)预测了13种物理化学性质。查看论文原文请点击这里。

机制

理论

MPNN的前向传播包括两个阶段,第一个阶段称为message passing(信息传递)阶段,第二个阶段称为readout(读取)阶段。定义一张图G=(V,E)G=(V,E)G=(V,E),其中VVV是所有节点,EEE是所有边。

信息传递阶段

message passing阶段会执行多次信息传递过程。对于一个特定的节点v,我先给出公式。
mvt+1=∑w∈N(v)Mt(hvt,hwt,evw)(1)m_v^{t+1}=\sum_{w\in N(v)}M_t\left( h_v^{t},h_w^{t},e_{vw} \right)\tag{1} mvt+1=wN(v)Mt(hvt,hwt,evw)(1)hvt+1=Ut(hvt,mvt+1)(2)h_v^{t+1}=U_t\left(h_v^{t},m_v^{t+1}\right)\tag{2} hvt+1=Ut(hvt,mvt+1)(2)
其中,在公式(1)(1)(1)中,mvt+1m_v^{t+1}mvt+1是结点vt+1时间步所接收到的信息,N(v)N(v)N(v)是结点v的所有邻结点,hvth_v^{t}hvt是结点vt时间步的特征向量,evwe_{vw}evw是结点vw的边特征,MtM_tMt是消息函数。该公式的意义是节点v收到的信息来源于节点v本身状态(hvth_v^{t}hvt),周围的节点状态(hwth_w^{t}hwt)和与之相连的边特征(evwe_{vw}evw)。生成信息后,就需要对结点进行更新。

在公式(2)(2)(2)中,UtU_tUt是结点更新函数,该函数把原节点状态hvth_v^{t}hvt和信息mvt+1m_v^{t+1}mvt+1作为输入,得到新的节点状态hvt+1h_v^{t+1}hvt+1。熟悉RNN的同学可能会眼熟这个公式,这个更新函数和RNN里的更新函数是一样的。后面我们也可以看到,我们可以用GRU或LSTM来表示UtU_tUt

最后再强调一下时间步的概念。计算完一次(1)(1)(1)(2)(2)(2)算一个时间步,因此如果时间步设为TTT,上述两个公式会各运行TTT次,最终得到的结果是hvTh_v^{T}hvT

读取阶段

readout阶段使用读取函数RRR计算基于整张图的特征向量,可以表示为
y^=R({hvT∣v∈G})(3)\hat{y}=R\left(\{h_v^T|v \in G \} \right)\tag{3} y^=R({hvTvG})(3)
其中,y^\hat{y}y^是最终的输出向量,RRR是读取函数,这个函数有两个要求:1、要可以求导。2、要满足置换不变性(结点的输入顺序不改变最终结果,这也是为了保证MPNN对图的同构有不变性)

实际案例

在MPNN的框架下,我们可以自定义消息函数、更新函数和读取函数,下面我举一个实际的案例,也是这篇文章所提及的门控图神经网络(Gated Graph Neural Networks, GG-NN)。这里,信息函数、结点更新函数和读取函数被定义为
Mt(hvt,hwt,evw)=Aevwhwt(4)M_t\left( h_v^{t},h_w^{t},e_{vw} \right)=A_{e_{vw}}h_w^t\tag{4} Mt(hvt,hwt,evw)=Aevwhwt(4)Ut(hvt,mvt+1)=GRU(hvt,mvt+1)(5)U_t\left(h_v^{t},m_v^{t+1}\right)=GRU\left(h_v^{t},m_v^{t+1}\right)\tag{5} Ut(hvt,mvt+1)=GRU(hvt,mvt+1)(5)R=∑v∈Vσ(i(hv(T),hv0))⊙(j(hv(T)))(6)R=\sum_{v\in V}\sigma\left(i\left(h_v^{(T)},h_v^0\right)\right)\odot \left(j\left(h_v^{(T)}\right)\right)\tag{6} R=vVσ(i(hv(T),hv0))(j(hv(T)))(6)

消息函数(4)(4)(4)中,矩阵AevwA_{e_{vw}}Aevw决定了图中的结点是如何与其他结点进行相互作用的,一条边对应一个矩阵。但是这个函数描述得有些笼统。GGNN文章中的公式更清晰一些,如下所示
av(t)=Av:T[h1(t−1)T,h2(t−1)T,...,h∣V∣(t−1)T]T+b(7)a_v^{\left(t\right)}=A_{v:}^T\left[h_1^{(t-1)^T},h_2^{(t-1)^T},...,h_{|V|}^{(t-1)^T}\right]^T+b\tag{7} av(t)=Av:T[h1(t1)T,h2(t1)T,...,hV(t1)T]T+b(7)
其中,av(t)a_v^{\left(t\right)}av(t)是结点vt时刻接收到的信息向量,和我们之前定义的mvt+1m_v^{t+1}mvt+1是一样的,只是换了些字母。h(t−1)h^{(t-1)}h(t1)表示节点在t-1个时间步的状态,因此[h1(t−1)T,h2(t−1)T,...,h∣V∣(t−1)T]T\left[h_1^{(t-1)^T},h_2^{(t-1)^T},...,h_{|V|}^{(t-1)^T}\right]^T[h1(t1)T,h2(t1)T,...,hV(t1)T]T把每个结点的状态拼接在一个维度上,维度大小为D∣V∣D|V|DVbbb是偏置项,至于Av:A_{v:}Av:,我们先看下面这张图

这里有一个边的特征矩阵AAA,矩阵AAA考虑了边的方向,因此它是由outin两个部分拼接而成,图中的不同字母代表了不同的相互作用类型(也可以视为每条边的特征,注意每一条边的特征维度都是(D,D)(D, D)(D,D),而不是我们常见的一维向量,在实际应用中,如果边的初始特征维度不是DDD,可以进行embedding或线性变换到D×DD\times DD×D维,再reshape(D,D)(D, D)(D,D)),最终的维度是(D∣V∣,2D∣V∣)(D|V|,2D|V|)(DV,2DV),其中∣V∣|V|V是结点个数。有了矩阵AAA之后,我们需要针对某一个结点选出“两列”(并非真正意义上的两列)。以2号结点作为v结点为例,我们在Outgoing EdgesIncoming Edges中分别找到2号结点,再把这两列拼接起来,得到一个维度是(D∣V∣,2D)(D|V|,2D)(DV,2D)的矩阵Av:A_{v:}Av:。将该矩阵的转置与所有节点的状态拼接成的列向量相乘,最终得到一个维度为2D2D2D的信息向量av(t)a_v^{\left(t\right)}av(t)。而对于无向图而言,只需要考虑一半的情况就行了。

结点更新函数(5)(5)(5)GRU,对GRU不熟悉的同学可以看一下这方面的知识,在此就不再多做解释了。

读取函数(6)(6)(6)看起来是较为复杂的,我们可以拆开来看。首先⊙\odot表示逐元素相乘,iiijjj分别表示一个全连接神经网络,并且在iii的外面又套了一层sigmoid函数,用符号σ\sigmaσ表示。对于神经网络iii而言,输入是结点的初始状态和最终状态,因此输入维度是2 * in_dim,而对于神经网络jjj而言,输入只有结点的最终状态,因此输入维度是in_dim。但是这两个神经网络的输出维度是一样的,这样才能逐元素相乘。再往深入一点讲,这里包含了self attention机制,就是在读取阶段要注意该节点最初的特征。

代码

我分别找到了Pytorch和Tensorflow的实现,以后有时间我会分析一下Pytorch版的实现过程。
Pytorch版
Tensorflow版(原作者)

第三方库

torch-geometric

图神经网络通用框架信息传递网络(MPNNs)相关推荐

  1. PyG图神经网络框架--构建信息传递网络(MPN)

    信息传递网络 将卷积算子泛化到不规则域中,通常表示为邻域聚合或信息传递模式.xi(k−1)∈RFx_i^{(k-1)} \in \R^Fxi(k−1)​∈RF 表示节点 iii 在第 l−1l-1l− ...

  2. 性能超越图神经网络,将标签传递和简单模型结合实现SOTA

    译者 | 刘畅 出品 | AI科技大本营 头图 | CSDN付费下载自视觉中国 图神经网络(GNNs)是图学习中一种主流的技术.然而,对于GNN为什么在实际使用中很成功以及它们是否是优异性能所必需的技 ...

  3. KDD 2022 | 图“预训练、提示、微调”范式下的图神经网络泛化框架

    ©作者 | 社媒派SMP 来源 | 社媒派SMP 本文是SIGKDD 2022入选论文"GPPT: Graph Pre-training and Prompt Tuning to Gener ...

  4. 在多变环境中长期定位和建图的通用框架

    点云PCL免费知识星球,点云论文速读. 文章:A General Framework for Lifelong Localization and Mapping in Changing Environ ...

  5. 【复杂网络建模】——通过图神经网络来建模分析复杂网络

    目录 一.复杂网络介绍 二.复杂网络建模分析方法 三.基于图神经网络来建模 1.数据准备

  6. 清华大学图神经网络综述:模型与应用

    机器之心专栏 作者:PaperWeekly 近年来,图神经网络的研究成为深度学习领域的热点,机器之心曾介绍过清华大学朱文武等人综述的图网络.近日,清华大学孙茂松组在 arXiv 上发布预印版综述文章  ...

  7. 图神经网络综述:模型与应用

    近年来,图神经网络的研究成为深度学习领域的热点.近日,清华大学孙茂松组在 arXiv 上发布预印版综述文章 Graph Neural Networks: A Review of Methods and ...

  8. 图神经网络(一)--综述

    图是一种数据结构,它对一组对象(节点)及其关系(边)进行建模.近年来,由于图结构的强大表现力,用机器学习方法分析图的研究越来越受到重视.图神经网络(GNN)是一类基于深度学习的处理图域信息的方法.由于 ...

  9. WWW 2021最佳论文亚军:基于属性补全的异质图神经网络新架构

    ©作者 | 机器之心编辑部 来源 | 机器之心 4 月 23 日,万维网顶会 WWW-2021(The Web Conference 2021: International World Wide We ...

最新文章

  1. 【FFmpeg】便捷函数汇总(持续更新中...)
  2. 5种数据同分布的检测方法!
  3. PHP 表单和用户输入
  4. mybaits 字段设置null_为什么阿里巴巴禁止开发人员修改serialVersionUID 字段的值
  5. internetreadfile读取数据长度为0_【完结】TensorFlow2.0 快速上手手册
  6. 模拟生态圈_电源工程师必备求生技能——经典20种模拟电路
  7. python3.5.2安装pygame_#Python3.6.2(32位) pip安装 和 pygame 环境配置
  8. 会声会影x4素材_如何利用会声会影制作抖音短视频
  9. 你的老婆你做主:画风自定义,内容自定义,南加大AI助你走上人生巅峰
  10. 物联网市场潜力巨大,中国移动加强布局
  11. 软件工程大学大三课表_专业选修课 | 面向大二、大三同学的专业选修课全面介绍来啦!...
  12. 小公司如何部署实施Linux集群网站【转载】
  13. numpy python2_python2如何安装numpy
  14. python单行注释和多行注释分别用什么表示_Python多行注释和单行注释用法详解
  15. 国税局验证码识别 | 不讲武德篇
  16. (详细步骤)申请twitter api
  17. emule服务器地址列表地址
  18. 字节架构师:来说说 Kafka 的消费者客户端详解,你都搞懂了吗,Javaweb面试总结
  19. 解决web系统session劫持
  20. WinRar压缩图片捆绑EXE文件

热门文章

  1. 为什么总显示连接服务器失败怎么回事,为什么总是出现"与总服务器连接失败"的字样 – 手机爱问...
  2. iOS二维码生成、识别、扫描等
  3. 【转】Java程序性能优化
  4. 优秀不够,你是否无可替代
  5. YY直播如何嵌入网站?
  6. Android开发介绍
  7. Java——LocalDateTime
  8. Codeforces 1326 E. Bombs (线段树)
  9. 花店小程序商城开发,开展线上引流渠道
  10. PID中各个参数意义