1. GCN公式
,where
2. 拆解公式
可将公式拆成2部分,normal =
,权重更新 wx =
权重更新很容易理解,将X特征进行线性变换。
为简单起见,设结点数为6,每个结点的特征数为5,且值均为1。即 矩阵X为 X[6,5],注:斜体代表矩阵的shape
另外设权重W为w为1,bias为0的线性模型 ,输入层为5个神经元输出层为1个神经元的简单网络。即我们的W[5,1]为
wx =
= dot(X[6,5],W[5,1]) = wx[6,1] =
第一个值与结点1对应,第二值与结点2相互对应,第三个值与第三个结点对应。 即我们现在得到了每个结点的信息更新后的值,由原始特征进行特征变换,映射到新空间中的一个值。
接下来就是重点了,根据图的静态结构,聚合邻居结点信息。
3. 介绍GCN正则化之前先介绍随机游走正则化 为random walk normalization
为了方便介绍,引入具体实例:
邻接矩阵: A =
注意:图中的自环没有标注,每一个结点都有自环
可得出度矩阵 D
norm =
可发现norm矩阵有非常好的性质
1)A中矩阵为0的norm对应位置仍为0,为1的位置非大于0
2)norm矩阵每一横行之和为1
3)每一横行非0元素的值相等,都等于(1/该行非0元素的个数)。如第二行都等于1/3
有什么作用
简单讲可以用来平均近邻的特征信息:
具体的,现在计算 out = dot(norm,wx)
norm 的第二行有两个非0元素,对应于由结点2指出的弧共有2个,并分别指向结点2,结点3。
从wx矩阵看到,结点2的特征值为5,结点3的特征值也为5。将这两个结点特征值聚合相加并取均值为(5+5)* 1/2 = 5.
而通过矩阵运算,norm的第二行乘以hx ,得到 out[2] = 0.5 * 5 + 0.5 * 5 = 5
这里我们看到这个norm的作用其实就是近邻特征信息取均值。
另外:如何求出度边的近邻均值呢
很简单,只需将norm矩阵进行转置即可。可自行验证
4. gcn 的symmetric normalization
norm =
先看 D' =
norm =
乍一看并没有什么规律,简化问题,假设矩阵就3个结点可得norm为
该矩阵便存在规律了
先看中间的A 如果为A23 , 则前边的为D22,后边的为D33。 A23 将23拆开变成22,33。
那么现在拓展到6个结点 让写出第6行2列 ,很快就能写出为D66*A62*D22
这有什么现实意义呢?
首先,A62代表第6个结点是否与第2个结点相连。即该边的两个顶点可以确定分别为6和2.
然后,结点6的出度和结点2的出度有不同的出度。两个结点对边A62的影响不同,出度越大,发出的信息越多,对边A62影响越小。
总结:
随机游走norm只是考虑了周围有几个近邻,而gcn使用的norm考虑了近邻结点的度或者有多少指出多少指入