dgl.svd_pe

dgl.svd_pe(g, k, padding=False, random_flip=True)[source]

基于 SVD 的位置编码,如 Global Self-Attention as a Replacement for Graph Convolution 中介绍的

此函数计算最大的 \(k\) 个奇异值以及相应的左奇异向量和右奇异向量,以形成位置编码。

参数:
  • g (DGLGraph) – 要进行编码的 DGLGraph,必须是同质图。

  • k (int) – 用于位置编码的最大奇异值及其对应奇异向量的数量。

  • padding (bool, optional) – 如果为 False,当 \(k > N\) 时会抛出错误,其中 \(N\)g 中的节点数。如果为 True,当 \(k > N\) 时会在编码向量末尾添加零填充。默认为 False。

  • random_flip (bool, optional) – 如果为 True,会随机翻转编码向量的符号。建议在训练期间启用以获得更好的泛化能力。默认为 True。

返回值:

返回形状为 \((N, 2k)\) 的基于 SVD 的位置编码。

返回类型:

Tensor

示例

>>> import dgl
>>> g = dgl.graph(([0,1,2,3,4,2,3,1,4,0], [2,3,1,4,0,0,1,2,3,4]))
>>> dgl.svd_pe(g, k=2, padding=False, random_flip=True)
tensor([[-6.3246e-01, -1.1373e-07, -6.3246e-01,  0.0000e+00],
        [-6.3246e-01,  7.6512e-01, -6.3246e-01, -7.6512e-01],
        [ 6.3246e-01,  4.7287e-01,  6.3246e-01, -4.7287e-01],
        [-6.3246e-01, -7.6512e-01, -6.3246e-01,  7.6512e-01],
        [ 6.3246e-01, -4.7287e-01,  6.3246e-01,  4.7287e-01]])