一、从CNN到GNN
1、CNN可被视为一类特殊的GNN,相邻节点大小顺序固定的GNN。
2、利用消息传递进行节点分类的例子:
给定上面的图,和少量已经分类的节点(红&绿),对剩余其他节点进行分类,这是一个半监督机器学习问题,使用关系分类(Relational Classification)的方法对其进行分类。
第1步:初始化,红色和绿色节点的概率分别标为0和1,其他未知节点的概率初始值为0.5。
第2步:第一次迭代,节点3的邻居1、2、4的均值为(0.5+0+0)/3 = 0.17,将该值从0.5更新至0.17。
第3步:第二次迭代,节点4的邻居1、3、5、6的均值为(0+0.17+0.5+1)/4=0.42,将该值从0.5更新至0.42。
第4步:第三次迭代,节点5的邻居4、6、7、8的均值为(0.42+1+1+0.5)/4=0.73,将该值从0.5更新至0.73。
第5步:第四次迭代,节点8的邻居5、6、7的均值为(0.73+1+1)/3=0.91,将该值从0.5更新至0.91。
第6步:第五次迭代,节点9的邻居7的均值为1,将该值从0.5更新至1。
第7步:重复第2-6步,进行第二轮迭代,节点9收敛。
第8步:重复第2-6步,进行第三轮迭代,节点8收敛。
第9步:重复第2-6步,进行第四轮迭代,节点3、4、5收敛。
第10步:概率大于0.5的节点,分类为绿,反之分类为红。显然,节点4以及其左侧的节点都是绿,节点1-3为红。
消息传递的实现非常简单,只要右乘邻接矩阵即可。
关系分类法比较简单,没有利用到节点特征,也不能保证收敛,但可以比较形象地说明消息传递的过程。
二、理解GCN
传统上,GNN被分为两大类:空间的(Spatial)和谱(Spectrum)的,前者通过消息交换进行节点嵌入更新,后者则通过傅里叶变换到频域进行处理再逆变换。
空间GNN的信息交换无外乎是节点嵌入(向量)和邻接矩阵的简单矩阵乘法而已。
以无权无向图与其所对应的邻接矩阵为例说明:
为了方便,假设每个节点的值就等于节点的编号(也可以是其他值),邻接矩阵A乘以节点值向量(对应于GCN的特征向量X)就等于进行了一次消息交换。
结果向量中的6表示节点0的三个相邻节点的值的和,2表示节点1的两个相邻节点的值的和,以此类推。
然而,节点0存在3个邻居,而节点3只有1个邻居,上面的矩阵乘法会导致邻居多的节点在消息交换后的值倾向于比较大,不太合理,因此以均值代替求和更合理。一种实现这种均值消息交换的方法是使用度矩阵D,度矩阵是对角矩阵,对角线表示了每个节点存在几个邻居,其余位置均为0。
将A除以度数,也就是乘以D的逆矩阵:
注意到每行的和都等于1,第1行表示节点0有3条边,与节点2、3、4相连,故都是1/3,;第4行表示节点3只有1条边与节点0相连,故为1。
于是得到了聚合函数(Aggregation Function)为均值的消息交换的结果。
三、理解论文《Nettack》中的2 PRELIMINARIES部分
在论文《Nettack》中,隐藏层的定义:
若使用只有一层隐藏层的GCN,则:
优化目标是最小化交叉熵损失函数来进行节点分类:最小化——L(θ;A,X)
四、References
-
理解图神经网络:从CNN到GNN:https://zhuanlan.zhihu.com/p/463666907
-
理解GCN关键(上):消息传递即邻接矩阵乘以节点嵌入:https://zhuanlan.zhihu.com/p/507469979