GCN学习记录

GCN学习历程

一、GCN 说明

假设一张图中有N个节点(node),每个节点都有自己的特征,我们设这些节点的特征组成一个N×D维的矩阵X,然后各个节点之间的关系也会形成一个N×N维的矩阵A,也称为邻接矩阵(adjacency matrix)。
X和A便是我们模型的输入。

GCN也是一个神经网络层,它的层与层之间的传播方式是:
层间传播方式
这个公式中:

  • A波浪=A+I,I是单位矩阵
  • D波浪是A波浪的度矩阵(degree matrix),可以使用下面公式计算(疑问:如果A的值不是仅表示连接关系的0、1,而是表示边的权重,应该怎么计算D?)
    请添加图片描述
  • H是每一层的特征,对于输入层的话,H就是X(即H0=X)
  • W为参数矩阵
  • σ是非线性激活函数请添加图片描述上图中的GCN输入一个图,通过若干层GCN每个node的特征从X变成了Z,但是,无论中间有多少层,node之间的连接关系,即A,都是共享的。

二、GCN为什么是这样

我们的每一层GCN的输入都是邻接矩阵A和node的特征H,那么我们直接做一个内积,再乘一个参数矩阵W,然后激活一下,就相当于一个简单的神经网络层嘛。参考Kipf的博客
请添加图片描述
但是此模型存在局限性:

  • 只使用A的话,由于A的对角线上都是0,所以在和特征矩阵H相乘的时候,只会计算一个node的所有邻居的特征的加权和,该node自己的特征却被忽略了。因此,我们可以做一个小小的改动,给A加上一个单位矩阵 I ,这样就让对角线元素变成1了。
  • A是没有经过归一化的矩阵,这样与特征矩阵相乘会改变特征原本的分布,产生一些不可预测的问题。所以我们对A做一个标准化处理。通过归一化处理,可以将数据变得具有可比性,但又相对保持数据之间的关系。使得原来很难在一张纸上做出的图更方便给出图上的相对位置。首先,给A乘以度矩阵
    D − 1 / 2 D^{-1/2} D1/2,并进一步将其拆为两个 D − 1 / 2 D^{−1/2} D1/2,得到对称且归一化的矩阵: D − 1 / 2 A D − 1 / 2 D^{−1/2} A D^{−1/2} D1/2AD1/2

通过以上两种方式的改进,就能得到最终的层特征传播公式:请添加图片描述

三、关于GCN的一些特点

1.参数矩阵W的选择
即使不训练,完全使用随机初始化的参数W,GCN提取出来的特征就以及十分优秀了。这跟CNN不训练是完全不一样的,后者不训练是根本得不到什么有效特征的。
2.节点特征值
对于很多网络,我们可能没有节点的特征,这个时候可以使用GCN吗?答案是可以的,如论文中作者对那个俱乐部网络,采用的方法就是用单位矩阵 I 替换特征矩阵 X
3.GCN层数
根据作者的论文,GCN层数不宜过多,2~3层即可。

四、学习后的疑问

1.计算D时,如果A的值不是仅表示连接关系的0、1,而是表示边的权重,应该怎么计算D?
一种比较暴力的方法:考虑直接计算度,遍历A的所有元素,如果是0则度不变,不为零则度加一。

2.关于层间特征传播的公式,还没怎么弄明白。比如:为什么要用这个公式?公式推导中 D − 1 A = D − 1 / 2 A D − 1 / 2 D^{−1} A =D^{−1/2} A D^{−1/2} D1A=D1/2AD1/2等式为什么成立?

五、一些比较好的教程

(1)使用GCN的第一篇比较好理解的paper
(2)一般工业界使用GCN的改进版graphSAGE
(3)graphattenion
(4)图深度表示(GNN)的基础和前沿进展 视频讲解
(5)GCN挑战
怎么做大:采样fastgcn,asgcn
怎么做深:原因过拟合,过平滑。dropedge,highway

参考文献:
1.跳出公式,看清全局,图神经网络(GCN)原理详解
2.GCN之邻接矩阵标准化
3.GCN博客
4.Kipf的博客

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值