博客详情

首页 / 博客详情
blog

2022年5月更新说明

用于开发图神经网络可解释性方法的合成数据集

我们添加了以下新数据集。BAShapeDatasetBACommunityDatasetTreeCycleDatasetTreeGridDataset 首次提出于 GNNExplainer:为图神经网络生成解释,用于节点分类。BA2MotifDataset 首次提出于 参数化图神经网络解释器,用于图分类。

syn_data

# A dataset for node classification
from dgl.data import BAShapeDataset

dataset = BAShapeDataset()
num_classes = dataset.num_classes
graph = dataset[0]
feat = graph.ndata['feat']
label = graph.ndata['label']

# A dataset for graph classification
from dgl.data import BA2MotifDataset

dataset = BA2MotifDataset()
num_classes = dataset.num_classes
graph, label = dataset[0]           # Get the first graph data
feat = graph.ndata['feat']

开发者建议: 这些合成图将特殊设计的子结构(motif)集成到传统的随机图模型中,并根据它们的存在分配标签。因此,这些子结构可作为节点/图标签的ground truth解释,使其成为评估图神经网络可解释性方法的常用基准。

SIGN扩散变换

我们添加了一个新的数据变换模块 SIGNDiffusion,首次提出于 SIGN:可扩展的Inception图神经网络,它将节点特征进行扩散以供后续使用。它支持四种内置的扩散矩阵,包括原始邻接矩阵、随机游走邻接矩阵、对称归一化邻接矩阵和个性化PageRank矩阵。

import dgl
import dgl.transforms as T

dataset = dgl.data.CoraGraphDataset(
    transform=T.SIGNDiffusion(k=2)) # Diffuse for 1 & 2 hops
g = dataset[0]  # diffused node features will be generated as ndata
feat1 = g.ndata['out_feat_1']       # feature diffused for 1 hop
feat2 = g.ndata['out_feat_2']       # feature diffused for 2 hops

开发者建议: 学习聚合邻居信息的能力是消息传递神经网络的关键创新之一,然而随着探索更多跳数的邻居,感受野呈指数级增长,这也带来了可扩展性挑战。SIGN 提出了一种廉价而有效的解决方案,通过使用各种算法扩散输入节点特征,解耦了模型深度和感受野大小。由于扩散过程不可训练,我们将其打包为一个数据变换模块,以便用户可以在运行自己的模型之前轻松地插入 SIGN。

标签传播

我们添加了一个新的神经网络模块 LabelPropagation,首次提出于 利用标签传播从未标记数据和已标记数据中学习,它在图上进行节点标签传播,用于推断未标记节点的标签。

import dgl

lp = dgl.nn.LabelPropagation(k=3, alpha=0.9)
dataset = dgl.data.CoraGraphDataset()
g = dataset[0]
labels = g.ndata['label']
train_mask = g.ndata['train_mask']
new_labels = lp(g, labels, train_mask)

开发者建议: 经典的标签传播是一种简单(非参数化)但有效的算法,使其成为许多节点分类数据集的强大基线。

方向图网络层

我们添加了一个新的神经网络模块 DGNConv,首次提出于 方向图网络,它基于图拉普拉斯矩阵低频特征向量的梯度,在消息传递中引入了方向聚合器。

import dgl
import torch

g = ...  # some graph
# Precompute 1 smallest non-trivial eigenvectors
transform = dgl.transforms.LaplacianPE(k=1)
g = transform(g)
x = torch.randn(g.num_nodes(), 10)  # node features
eig = g.ndata['PE']
conv = dgl.nn.DGNConv(10, 10,
                      aggregators=['dir1-av', 'dir1-dx'],
                      scalers=['identity', 'amplification'],
                      delta=2.5)
h = conv(g, x, eig_vec=eig)

开发者建议: 方向图网络(DGN)允许根据拓扑导出的方向流来定义图卷积。它是许多图分类任务的最先进基线。

带边特征的图同构网络层

我们添加了一个新的神经网络模块 GINEConv,首次提出于 预训练图神经网络的策略,它扩展了图同构网络(GIN)以处理边特征。

import dgl
import torch

g = ...  # some graph
xn = torch.randn(g.num_nodes(), 10)  # node features
xe = torch.randn(g.num_edges(), 10)  # edge features
conv = dgl.nn.GINEConv(torch.nn.Linear(10, 10))
hn = conv(g, xn, xe)

开发者建议: 带边特征的图同构网络已成为许多图分类任务的重要基线,例如 OGB 图属性数据集。

特征掩码

我们添加了一个新的数据变换模块 FeatMask,首次提出于 带有增强的图对比学习,它随机掩盖节点/边特征的列。

import dgl
import dgl.transforms as T

dataset = dgl.data.CoraGraphDataset(
    transform=T.FeatMask(p=0.1, node_feat_names=['feat']))
g = dataset[0]
feat = g.ndata['feat'] # The node feature tensor has been randomly masked.

开发者建议: 随机掩盖特征的列是一种简单但有用的图对比学习数据增强方法。

特征的行归一化器

我们添加了一个新的数据变换模块 RowFeatNormalizer,它执行特征的行归一化。

import dgl
import dgl.transforms as T

dataset = dgl.data.CoraGraphDataset(
    transform=T.RowFeatNormalizer(node_feat_names=['feat']))
g = dataset[0]
feat = g.ndata['feat'] # The node feature tensor has been row-normalized.

开发者建议: 原始特征的行归一化是一个有用的数据预处理步骤。

如需深入阅读,请查阅 发布说明,以获取新增内容、改进和错误修复的完整列表。如果您对 DGL 或一般的图神经网络有疑问,欢迎加入我们的 Slack 频道。如果您对 DGL 的后续发展有具体建议,可以在我们的 Github 上提交,或填写此 调查问卷