根据@superbrother的相关回答,参考了Semi-Supervised Classification with Graph Convolutional Networks文章提出的逐层传播规则建立的图卷积模型,结合tkipfTensorFlow版本的GCN代码更加系统的了解了“卷积”这一过程。
1 Fast approximate convolution on Graph的数学模型
作者利用图的对称的邻接矩阵 A A A和图上每个顶点的特征向量 X X X,使用一个神经网络模型 f ( X , A ) f(X,A) f(X,A)来建立一个图的模型,通过2层GCN网络对该图上节点进行半监督分类任务。
作者提出构建图模型的具体方法,可以先对添加闭环的邻接矩阵 A ~ \tilde A A~进行归一化处理: A ^ = D ~ − 1 2 A ~ D ~ − 1 2 \hat A= \tilde{D}^{-\frac{1}{2}}\tilde A\tilde{D}^{-\frac{1}{2}} A^=D~−21A~D~−21,提出了图模型的前向传播方式:
进而建立如下图的模型 Z = f ( X , A ) = s o f t m a x ( A ^ ⋅ R e L U ( A ^ X W ( 0 ) ) ⋅ W ( 1 ) ) Z=f(X,A)=softmax(\hat A \cdot ReLU(\hat AXW^{(0)})\cdot W^{(1)}) Z=f(X,A)=softmax(A^⋅ReLU(A^XW(0))⋅W(1))其中
- D i i ~ = ∑ j A ~ i j \tilde {D_{ii}}=\sum{_j}{\tilde A_{ij}} Dii~=∑jA~ij, D ~ \tilde D D~是一个对角矩阵,对角线上每个元素表示图中节点对应的度。
- W ( 0 ) ∈ R C × H W^{(0)}\in R^{C \times H} W(0)∈RC×H, W ( 1 ) ∈ R H × F W^{(1)}\in R^{H \times F} W(1)∈RH×F; C , H , F C,H,F C,H,F分别是input,hidden和output的维度。
- W l W^{l} Wl相当于一个线性的全连接层,将feature进行一次映射,可以按照需要来修改feature的维度,其中的参数,根据loss函数通过反向传播梯度下降来迭代优化更新;
可以看出:
第一层将feature的维度转成 H H H后,通过激活函数输出;
第二层将feature维度从 H H H转为 F F F,而 F F F正好是class的个数,后面没有接非线性的激活函数;
然后通过softmax计算出每个点属于每个类的概率。
结合@不知道叫什么好及个人的理解
上述变量中:
- A ^ = A + I \hat A = A + I A^=A+I,表示对图中节点进行特征提取的过程中,不仅要提取邻点的信息( A A A),还要考虑到自身的特征信息(用 I I I表示),这是一个解决self-loop问题的一种方法。
- D − 1 2 A ^ D − 1 2 D^{-\frac{1}{2}} \hat{A} D^{-\frac{1}{2}} D−21A^D−21是一种归一化的方法(对称归一化)。将邻接矩阵里的值归一化后,可以看成是每一条边的权重,将节点信息转化成直观的值( A g g r e g a t i o n Aggregation Aggregation)。当然可以采用其他的归一化方法如 A g g r e g a t i o n = D − 1 A Aggregation = D^{-1}A Aggregation=D−1A
- 权重矩阵 D − 1 2 A ^ D − 1 2 D^{-\frac{1}{2}} \hat{A} D^{-\frac{1}{2}} D−21A^D−21乘以 H l H^{l} Hl,相当于把当前每个点代表的feature,按照临接矩阵中包含的权重重新加权求和,为每个点计算出一个新的feature;
注意观察上面三条中的第二点,是不是拉普拉斯矩阵的思想?当 D i i ~ = ∑ j A ~ i j \tilde {D_{ii}}=\sum{_j}{\tilde A_{ij}}