GNN如何利用图上的边信息?
链接:https://zhuanlan.zhihu.com/p/432923190
Backgrounds
图表示学习近年来取得巨大进展,以GCNs为代表的一系列图神经网络模型在节点分类、图分类、链接预测等图领域任务取得亮眼的成果。其中大部分模型基于message-passing方式构建,即“聚合邻居信息,更新节点自身状态”,在此范式中,节点特征得到充分的学习。而现实的许多图中,边上存在丰富的信息,它们在当前大多模型中未被充分利用。
Edge Features同样描述着网络,学习edge features能强化图神经网络的表达能力。
以下图为例:
社交网络中,edge features更具体地描述着用户(nodes)间关系。
Recently Works
当前图神经网络对边信息主要有如下几种利用方式:
2.1 Implicit Utilization
每个节点只aggregate其邻居的信息,这一聚合方式本身就基于节点间的边实现。此情况下只视作各个边为binary feature,只有“有边/无边”区别。
2.1 Naive Utilization
对于边上特征为scalar的情况,最简单直接的方式是使用带权的邻接矩阵描述,与之对应的,使用支持edge weight的模型学习即可。
2.3 Aggregate from Different Types of Edge
在许多场景中,边上特征为类别标签,如社交网络中,边上可以标注两人为工作关系、家人等。
对于存在多种类型边的图(边异构),常见处理方法是依照边的类型分别聚合信息。
如早期工作Relational GCN[2],
其只在GCN
的基础上,增加了
其他模型也是类似思路,仅在聚合方式上做进一步细化。如下图:
2.4 Multi-dimensional Edge Features
上述3个方式并不能较好地处理边上多维特征。面对多维边特征,常见手段也是在aggregation阶段将边特征、邻居节点特征通
为边特征维度数。
在GAT基础上,单独处理每一维的特征。聚合函数中加入节点特征,并为每一维特征单独学一组注意力权重,最后将各维输出concate。本文的edge embeddings,为每层所学的边多维特征注意力权重。
在GAT基础上,单独处理每一维的特征。聚合函数中加入节点特征,并为每一维特征单独学一组注意力权重,最后将各维输出concate。本文的edge embeddings,为每层所学的边多维特征注意力权重。过某种function结合在一起,再传给目标节点。
General Idea 如下图:
2.5 Learn Edge Embeddings
与2.4区别在于,下述方法以多维边特征为输入,并在模型每层更新,类似学习node embedding一般,同时学习edge embeddings。其实现方式多为创建某种辅助图,在该图中将边也视作节点,再用现有GAT等模型学习边和节点的表示。
1.EGNN [5]
为边特征维度数。
在GAT基础上,单独处理每一维的特征。聚合函数中加入节点特征,并为每一维特征单独学一组注意力权重,最后将各维输出concate。本文的edge embeddings,为每层所学的边多维特征注意力权重。
为边特征维度数。
在GAT基础上,单独处理每一维的特征。聚合函数中加入节点特征,并为每一维特征单独学一组注意力权重,最后将各维输出concate。本文的edge embeddings,为每层所学的边多维特征注意力权重。
2. CensNet [6]
使用line graph(原始图中节点变为line graph中的边,边变为节点)构建辅助图,在original graph和line graph上训练模型,交替更新node, edge embeddings。
3. NENN [7]
以GAT为基础,提出Node-level Attention Layer, Edge-level Attention Layer。
每个layer区别主要在于输入的图的观察角度。
如下图中两矩形方框部分,分别以node、edge为视角,重新定义“邻居”,将边/节点视作新图中的节点,在新图中学习边和节点的embeddings。
4. EGAT [8]
与CensNet类似,使用line graph+GAT学习节点和边的表示。
Discussion
- 2.5中多用GAT编码边特征信息,带来较大的计算开销,能否更轻量且优雅的编码边特征?
- 2.5中使用诸如line graph等构建辅助图,把原图中的边变换为辅助图中的节点,从而可以利用已有GNN进行边嵌入的学习。但是,对于“边的邻居边”,是否同样满足节点与其邻居相近的假设?
- 如何评估边特征与节点的关系,边特征如何切实的帮助图表示学习?
相关文章
- pytest学习和使用6-fixture如何使用?
- pytest学习和使用7-fixture参数scope作用域(范围)执行顺序
- “社恐”人也可以成为保研er呀
- 中文NER的那些事儿2. 多任务,对抗迁移学习详解&代码实现
- CTR学习笔记&代码实现6-深度ctr模型 后浪 xDeepFM/FiBiNET
- CTR学习笔记&代码实现5-深度ctr模型 DeepCrossing -> Deep&Cross
- CTR学习笔记&代码实现4-深度ctr模型 NFM/AFM
- CTR学习笔记&代码实现3-深度ctr模型 FNN->PNN->DeepFM
- CTR学习笔记&代码实现2-深度ctr模型 MLP->Wide&Deep
- CTR学习笔记&代码实现1-深度学习的前奏LR->FFM
- [中医经络学习一]足阳明胃经
- 发现IE6的一个BUG,添加受信任站点后,页面无法跳转
- 五项原则助力敏捷数字化转型
- Quantexa CDI(场景决策智能)Syneo平台介绍
- 阿里云的免费型DV SSL证书
- Libevent官方代码样例学习(二)
- Libevent官方代码样例学习(一)
- 使用华为U8860测试时出现“Unable to open log device '/dev/log/main': No such file or directory”
- 火山引擎数智平台ByteHouse入围稀土掘金《Top10 年度创新产品》
- 火山引擎 DataTester:在广告投放场景下的 A/B 实验实践