DW_图深度学习_Task_6 学习内容:基于图神经网络的图表征学习方法 学习地址: github/datawhalechina/team-learning-nlp/GNN/
基于图同构网络(GIN)的图表征网络的实现
本节内容主要是介绍基于图神经网络的图表征学习方法,其过程大致为: 首先,计算得到节点表征。然后对节点表征做图池化,从而得到图的表征。
图表征模块(GINGraphRepr Module)
图表征模块结构
GINNodeEmbedding:进行节点嵌入 -> 得到节点表征 对节点表征进行图池化 -> 得到图的表征 对图的表征进行一层线性变换 -> 得到图的预测
可选的几个计算图表征的方法
- “sum”: 对节点表征求和;
- “mean”:对节点表征求平均;
- “max”:取节点表征的最大值。对一个batch中所有节点计算节点表征各个维度的最大值;
- “attention”:基于Attention对节点表征加权求和;
- “set2set”: 另一种基于Attention对节点表征加权求和的方法;
节点嵌入模块(GINNodeEmbedding Module)\
图同构卷积层(GINConv)
PyG中实现的GINConv不支持存在边属性的图,所以我们需要自定义该模块,其遵循“消息传递、消息聚合、消息更新”这一过程。
AtomEncoder 与 BondEncoder
节点和边属于不同的空间(我认为这里可理解为处于不同的范畴),无法直接进行融合操作。所以我们需要通过嵌入操作,将节点和边的属性映射到一个新的空间,在新空间内对二者进行信息融合。
理论内容
图同构性测试
这部分是利用Weisfeiler-Lehman Test (WL Test)对两个图的拓扑结构是否相同进行测试,其对两个图相似与否进行判断。其流程如下:
重复执行:
- 聚合自身与邻接节点的标签得到一串字符串,自身标签与邻接节点的标 签中间用,分隔,邻接节点的标签按升序排序
- 将较长的字符串映射到一个简短的标签
- 给节点重新打上标签
- 当出现两个图相同节点标签的出现次数不一致时,即可判断两个图不相似
- 如果上述的步骤重复一定的次数后,没有发现有相同节点标签的出现次数不一致的情况,那么我们无法判断两个图是否同构
图相似性评估
是否相似只是简单的判断,对图的相似度进行衡量,就需要使用到WL Subtree Kernel方法。 该方法的思想是用WL Test算法得到节点的多层的标签,然后我们可以分别统计图中各类标签出现的次数,存于一个向量,这个向量可以作为图的表征。两个图的表征向量的内积,即可作为这两个图的相似性估计,内积越大表示相似性越高。
|