【GNN】dgl 卷积方式 RelGraphConv

本文对 dgl 的卷积方式 RelGraphConv 说明文档进行翻译。

原文链接

译者注: RelGraphConv 关系图卷积方式是在 GraphConv 图卷积方式上的改进,解决了 GraphConv 无法考虑到图中具有不同属性的边的问题,使用 RelGraphConv 可以同时汇聚边信息和结点信息。

RelGraphConv

class dgl.nn.pytorch.conv.RelGraphConv(
	in_feat, 
	out_feat, 
	num_rels,
	regularizer=None, 
	num_bases=None, 
	bias=True, 
	activation=None, 
	self_loop=True, 
	dropout=0.0, 
	layer_norm=False)

关系图卷积层 来自于用图卷积网络对关系数据进行建模。
它可以用以下方式描述。
h i ( l + 1 ) = σ ( ∑ r ∈ R ∑ j ∈ N r ( i ) ϵ j , i W r ( l ) h j ( l ) + W 0 ( l ) h i ( l ) ) h_{i}^{(l+1)}=\sigma(\sum_{r\in\mathcal{R}}\sum_{j\in\mathcal{N}^{r}(i)}\epsilon_{j,i}W_{r}^{(l)}h_{j}^{(l)}+W_{0}^{(l)}h_{i}^{(l)}) hi(l+1)=σ(rRjNr(i)ϵj,iWr(l)hj(l)+W0(l)hi(l))

N r ( i ) \mathcal{N}^r(i) Nr(i) 代表结点 i i i 关于关系 r r r 的邻域集合。 e j , i e_{j,i} ej,i 是归一化系数。 σ \sigma σ 是激活函数。 W 0 W_0 W0 是自环权重。
基础正则化通过以下方式分解了 W r W_r Wr
W r ( l ) = ∑ b = 1 B a r b ( l ) V b ( l ) W_{r}^{(l)}=\sum_{b=1}^{B}a_{r b}^{(l)}V_{b}^{(l)} Wr(l)=b=1Barb(l)Vb(l)
B B B 代表基的个数, V b ( l ) V_b^{(l)} Vb(l) 和系数 a r b ( l ) a_{rb}^{(l)} arb(l)线性组合。
块对角线分解正则化将 W r W_r Wr分解为 B B B个块对角线矩阵。我们称 B B B为基数。
块状正则化通过以下方式分解了 W r W_r Wr
W r ( l ) = ⊕ b = 1 B Q r b ( l ) W_{r}^{(l)}=\oplus_{b=1}^{B}Q_{r b}^{(l)} Wr(l)=b=1BQrb(l)

其中 B B B是基数, Q r b ( l ) Q^{(l)}_{rb} Qrb(l)是形状为 R ( d ( l + 1 ) B ) ∗ ( d l / B ) R^{(d^{(l+1)}B)*(d^{l}/B)} R(d(l+1)B)(dl/B)的块基。

参数:

in_feat (int) – 输入特征大小;即 h j ( l ) h^{(l)}_j hj(l)的维数。

out_feat (int) – 输出特征大小;即 h i ( l + 1 ) h^{(l+1)}_i hi(l+1)的维数。

num_rels (int) – 关系的数量。

regularizer (str, optional) –使用哪种权重正则器 "basis "或 “bdd”。
"basis "是basis-decomposition的缩写。
"bdd "是块对角线分解的简称。
默认情况下不使用正则化。

num_bases (int, optional) – 基数的数量。在指定regularizer时需要。默认值:None

bias (bool, optional) – 如果添加了偏置,则为True。默认情况下。为True

activation (callable, optional) – 激活函数。默认情况下:None

self_loop (bool, optional) – True:包括自环信息。默认值:为True

dropout (float, optional) – Dropout 率. 默认: 0.0

layer_norm (float, optional) – 添加 layer norm. 默认: False

例子

import dgl
import numpy as np
import torch as th
from dgl.nn import RelGraphConv
g = dgl.graph(([0,1,2,3,2,5], [1,2,3,4,0,3]))
feat = th.ones(6, 10)
conv = RelGraphConv(10, 2, 3, regularizer='basis', num_bases=2)
etype = th.tensor([0,1,2,0,1,2])
res = conv(g, feat, etype)
res
tensor([[ 0.3996, -2.3303],
        [-0.4323, -0.1440],
        [ 0.3996, -2.3303],
        [ 2.1046, -2.8654],
        [-0.4323, -0.1440],
        [-0.1309, -1.0000]], grad_fn=<AddBackward0>)

前向计算

参数

g (DGLGraph) – 图.

feat (torch.Tensor) – 节点特征的二维张量。形状: ( ∣ V ∣ , D i n ) (|V|,D_{in}) (V,Din).

etypes (torch.Tensor or list[int]) – 一个边类型的一维整数张量。形状: ( ∣ E ∣ , ) (|E|,) (E,).

norm (torch.Tensor, optional) –边规范值的一维张量。形状: ( ∣ E ∣ , ) (|E|,) (E,).

presorted (bool, optional) – 输入图的边是否已按其类型进行了排序。在预先排序的图上进行前向传播可能会更快。由to_homogeneous()创建的图自动满足该条件。也可以参考reorder_graph()来手动排序边

返回值

新的节点特征。形状: ( ∣ V ∣ , D o u t ) (|V|,D_{out}) (V,Dout).

返回类型

torch.Tensor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>