1 Motivation
在图神经网络中,如何像在欧式空间一样进行卷积操作,其重要的问题在于如何更新当前位置的信息。
其每个位置(或者叫节点node)的更新方式如下所示。
这一个式子既可以表达GCN,也可以表达Edge Conv。
2 函数分析
2.1 初始化
初始化默认有:
- 聚合方式aggr,默认是add,即上图中的【圆圈+】
- 数据流向flow,默认是source to target,是从邻居到中心(问:target to source是从中心到邻居吗)
- node_dim定义了沿着哪一维进行传播
2.2 propagate
必须输入edge_index
2.3 message
即上图中的fai函数
x_i表示中心节点central nodes,x_j表示邻居节点neignbouring nodes
2.4 update
即上图的gamma函数
3 GCN实例
3.1 分析
- 这个算子没有gamma函数的步骤,因此不需要update
- 在加和处有∪{i},因此需要增加自环self loop
- W.t()的部分,由于每一个节点都需要线性变化,所以可以在forward中做掉
- 除以中心节点的度和邻居节点的度,然后开根号,必须要在message中做
- propagate()会自动调用message()、aggregate()和update()
4 Edge Conv实例
4.1 分析
- 这个算子没有gamma步骤,也不需要update
- 在消息传递步骤,同时用到了中心节点和邻居节点,因此需要x_i x_j
- aggr要设置为max