Cluster-GCN为什么使用随机游走归一化而不是对称归一化?

1.1 问题

我在看GCN特征传播的时候,第三代GCN(Semi-Supervised Classification with Graph Convolutional Networks)认为:随机游走归一化没有解决度较大的节点对描述其他节点贡献比较低的问题,因此使用对称归一化替代

随机游走归一化: A ~ = D ~ − 1 A \tilde A = \tilde{D}^{-1}A A~=D~1A

对称归一化: A ~ = D ~ − 1 2 A D ~ − 1 2 \tilde A = \tilde{D}^{- \frac{1}{2}}A\tilde{D}^{- \frac{1}{2}} A~=D~21AD~21

但是我读Cluster-GCN论文的时候,发现Cluster-GCN使用随机游走归一化,而不是对称归一化

随机游走归一化只完成了矩阵的横向标准化,而对称归一化在此基础上还完成了纵向标准化:

横向标准化,即只考虑值之间的相对大小而不是绝对大小,从而避免了训练时产生的梯度消失或梯度爆炸导致的无法收敛;

纵向标准化,即通过邻居节点 j j j的度 D ~ j j \tilde{D}_{jj} D~jj判断邻居节点 j j j对节点 i i i特征表达所带来的贡献大小,惩罚度大的节点

1.2 猜想

是不是对称归一化解决的是度比较大的结点贡献不足的问题,但是Cluster-GCN用图聚类方法划分节点的同时,去掉了小批次训练中节点以外的边,这样节点之间度都相对变小了,而且节点之间相关性更强,每个节点与其相连节点间描述更多,是不是就不需要纵向标准化了?

1.3 老师给的解答

随机游走归一化计算快。。

1.4 参考文章

[1][https://www.cnblogs.com/BlairGrowing/p/15826824.html]

[2][https://blog.csdn.net/zfhsfdhdfajhsr/article/details/124552753]

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Pytorch Geometric提供了一些内置的归一和池方法,可以方便地用于GCN模型中。下面分别介绍这些方法的用法。 1. 归一 Pytorch Geometric提供了两种常见的归一方法:对称归一随机归一对称归一: ```python import torch_geometric.transforms as T data = T.NormalizeSymm()(data) ``` 随机归一: ```python import torch_geometric.transforms as T data = T.RandomWalk()(data) ``` 其中,`data`是一个包含图数据的对象,比如`torch_geometric.data.Data`。 2. 池操作可以将一张大图缩小到一张小图,从而减少模型参数和计算量。Pytorch Geometric提供了几种常见的池方法,比如TopK池、SAG Pooling和Diff Pooling。 TopK池: ```python import torch_geometric.nn.pool as pool x, edge_index, batch = pool.topk(x, ratio=0.5, batch=batch) ``` 其中,`x`是节点特征矩阵,`edge_index`是边的索引矩阵,`batch`是节点所属的图的标识符。`ratio`是池后每个图保留的节点数占原图节点数的比例。 SAG Pooling: ```python import torch_geometric.nn.pool as pool x, edge_index, _, batch, _, _ = pool.sag_pool(x, edge_index, batch) ``` 其中,`x`、`edge_index`和`batch`的含义同TopK池。SAG Pooling使用节点嵌入向量计算每个节点的注意力权重,根据权重进行池。 Diff Pooling: ```python import torch_geometric.nn as nn diffpool = nn.DiffPool(in_channels, hidden_channels, num_classes) x, edge_index, edge_attr, batch, perm, score = diffpool(x, edge_index) ``` 其中,`in_channels`是输入节点特征的维度,`hidden_channels`是池后节点特征的维度,`num_classes`是分类的类别数。`x`、`edge_index`和`batch`的含义同TopK池。Diff Pooling使用GraphSAGE卷积层计算每个节点的嵌入向量,根据嵌入向量进行池

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinBalll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值