本文为论文SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS的阅读笔记.
github链接:Graph Convolutional Networks
使用神经网络模型 f ( X , A ) f(X,A) f(X,A) 对所有带标签节点进行基于监督损失的训练。
在图的邻接矩阵上调整 f ( ⋅ ) f(\cdot) f(⋅) 将允许模型从监督损失 L 0 L_0 L0中分配梯度信息,并使其能够学习所有节点(带标签或不带标签)的表示。
具有以下分层传播规则的多层图形卷积网络(GCN):
(1) H ( l + 1 ) = σ ( D ~ − 1 2 A ~ D ~ − 1 2 H ( l ) W ( l ) ) H^{(l+1)}=\sigma(\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} H^{(l)} W^{(l)}) \tag{1} H(l+1)=σ(D~−21A~D~−21H(l)W(l))(1)
其中:
推荐阅读:【GCN】图卷积网络初探——基于图(Graph)的傅里叶变换和卷积
在上面这篇文章中,我们推导出基于图的卷积公式如下:
( f ∗ h ) G = U ( h ^ ( λ 1 ) ⋱ h ^ ( λ n ) ) U T f (f*h)_G=U \begin{pmatrix} \hat{h}(\lambda_1) & & \\ & \ddots & \\ & & \hat{h}(\lambda_n) \end{pmatrix} U^T f (f∗h)G=U⎝⎛h^(λ1)⋱h^(λn)⎠⎞UTf
- f f f为待卷积函数(比如图的特征向量)
- h h h为按需设计的卷积核, h ^ \hat{h} h^为卷积核的傅里叶变换
- U U U为【图的拉普拉斯矩阵】的【特征向量矩阵】
- λ \lambda λ为图的拉普拉斯矩阵的特征值
之后,我们又提到了两种卷积核的设计:
第一代GCN:卷积核: d i a g ( h ^ ( λ l ) ) : d i a g ( θ l ) diag(\hat{h}(\lambda_l)): diag(\theta_l) diag(h^(λl)):diag(θl)
推导出的公式如下:
y o u t p u t = σ ( U ( θ 1 ⋱ θ n ) U T x ) y_{output}=\sigma \begin{pmatrix} U \begin{pmatrix} \theta_1 & & \\ & \ddots & \\ & & \theta_n \end{pmatrix} U^Tx \end{pmatrix} youtput=σ⎝⎛U⎝⎛θ1⋱θn⎠⎞UTx⎠⎞
第一代GCN的缺点为计算量大,因此提出第二代GCN如下
第二代GCN:卷积核: h ^ ( λ l ) : ∑ j = 0 K α j λ l j \hat{h}(\lambda_l):\sum_{j=0}^K \alpha_j\lambda_l^j h^(λl):∑j=0Kαjλlj
(经过矩阵变换后的)公式如下:
y o u t p u t = σ ( ∑ j = 0 K α j L j x ) y_{output}=\sigma \left( \sum_{j=0}^{K} \alpha_j L^j x \right) youtput=σ(j=0∑KαjLjx)
在这篇论文里,对上述引用中提到的这两种卷积核有着更为详细的解释。
回到论文中,作者在2.1节的开头首先提出:考虑如下图卷积公式:
(2) g θ ∗ x = U g θ U T x g_{\theta}*x=Ug_{\theta}U^Tx \tag{2} gθ∗x=UgθUTx(2)
可以看到,公式(2)就是上面引用中第一代GCN所使用的卷积公式,作者在论文中也提到,这个公式的缺点在于计算太过复杂,卷积核的选取不合适,需要改进。
作者接下来说,有人提出一种卷积核设计方法,即 g θ ( Λ ) g_{\theta}(\Lambda) gθ(Λ)可以用切比雪夫Chebyshev多项式 T k ( x ) T_k(x) Tk(x)到 K t h K^{th} Kth的截断展开来近似。
切比雪夫多项式:
(3) T k ( x ) = 2 x T k − 1 ( x ) − T k − 2 ( x ) T 0 ( x ) = 1 T 1 ( x ) = x \begin{aligned} &T_{k}(x)=2xT_{k-1}(x)-T_{k-2}(x) \tag{3}\\ &T_{0}(x)=1\\ &T_{1}(x)=x \end{aligned} Tk(x)=2xTk−1(x)−Tk−2(x)T0(x)=1T1(x)=x(3)
新的卷积核:
(4) g θ ‘ ( Λ ) ≈ ∑ k = 0 K θ k ′ T k ( Λ ~ ) g_{\theta‘}(\Lambda)\approx\sum_{k=0}^{K} \theta'_k T_k(\tilde{\Lambda}) \tag{4} gθ‘(Λ)≈k=0∑Kθk′Tk(Λ~)(4)
基于该卷积核,得到的卷积公式如下:
(5) g θ ‘ ∗ x = ∑ k = 0 K θ k ′ T k ( L ~ ) x g_{\theta‘}*x=\sum_{k=0}^{K} \theta'_k T_k(\tilde{L})x \tag{5} gθ‘∗x=k=0∑Kθk′Tk(L~)x(5)
可以看到,公式(4)与上面引文中的第二代GCN用到的卷积公式非常相似,最终都将参数简化到了 K K K个,并不再需要做特征分解,直接用拉普拉斯矩阵 L L L进行变换,计算复杂性大大降低。
但本文使用了切比雪夫多项式 T k ( x ) T_k(x) Tk(x),这是与上面引文中提到的第二代GCN中的卷积公式的不同点。
以上,都是前人的工作,都可以在本节开头的推荐阅读中找到详细推导和讲解。接下来是作者的改进部分。
在2.1节中,我们定义了基于图的卷积公式(5)如下:
(5) g θ ′ ∗ x = ∑ k = 0 K θ k ′ T k ( L ~ ) x g_{\theta'}*x=\sum_{k=0}^{K} \theta'_k T_k(\tilde{L})x \tag{5} gθ′∗x=k=0∑Kθk′Tk(L~)x(5)
现在我们可以通过堆叠多个形式为公式(5)的卷积层来建立一个GCN模型。
首先,我们将分层卷积操作限制为 K = 1 K=1 K=1,即关于 L L L是线性的,因此在拉普拉斯谱上有线性函数。
在GCN的这个线性公式中,我们进一步近似 λ m a x ≈ 2 \lambda_{max}\approx2 λmax≈2,我们可以预测到GCN的参数能够在训练中适应这一变化,此时公式(5)将简化为下式:
(6) g θ ′ ∗ x ≈ θ 0 ′ x + θ 1 ′ ( L − I N ) x = θ 0 ′ x − θ 1 ′ D − 1 2 A D − 1 2 x \begin{aligned} g_{\theta'}*x&\approx\theta'_{0}x+ \theta'_{1}(L-I_N)x\\ &=\theta'_{0}x- \theta'_{1}D^{-\frac{1}{2}}AD^{-\frac{1}{2}}x \tag{6} \end{aligned} gθ′∗x≈θ0′x+θ1′(L−IN)x=θ0′x−θ1′D−21AD−21x(6)
令 θ = θ 0 ′ = − θ 1 ′ \theta=\theta'_{0}=-\theta'_{1} θ=θ0′=−θ1′,将两个参数化为单参数 θ \theta θ,得到卷积公式如下:
(7) g θ ′ ∗ x ≈ θ ( I N + D − 1 2 A D − 1 2 ) x g_{\theta'}*x \approx \theta(I_N+D^{-\frac{1}{2}}AD^{-\frac{1}{2}})x \tag{7} gθ′∗x≈θ(IN+D−21AD−21)x(7)
注意 I N + D − 1 2 A D − 1 2 I_N+D^{-\frac{1}{2}}AD^{-\frac{1}{2}} IN+D−21AD−21拥有范围为 [ 0 , 2 ] [0,2] [0,2]的特征值,这将会导致数值不稳定性和梯度爆炸/消失。因此我们介绍下面的归一化技巧:
I N + D − 1 2 A D − 1 2 → D ~ − 1 2 A ~ D ~ − 1 2 I_N+D^{-\frac{1}{2}}AD^{-\frac{1}{2}} \to \tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}} IN+D−21AD−21→D~−21A~D~−21
将该定义推广到具有 C C C个输入通道(即每个节点的 C C C维特征向量)的信号 X ∈ R N × C X\in\mathbb{R^{N\times C}} X∈RN×C,和 F F F个滤波器,则特征映射(feature maps)如下:
(8) Z = D ~ − 1 2 A ~ D ~ − 1 2 X Θ Z=\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}X\Theta \tag{8} Z=D~−21A~D~−21XΘ(8)
我们已经有了模型 f ( X , A ) f(X,A) f(X,A),可以在图上有效的传播信息,现在回到半监督节点分类问题上。
我们可以通过调整我们的模型 f ( X , A ) f(X,A) f(X,A),来放松通常在半监督学习中所做的假设。希望模型可以在【邻接矩阵 A A A中包含着(数据 X X X没有表达出来的)信息】这种情况下更有用。
一个整体的多层半监督GCN模型如下图所示:
上图中,左(a)是一个GCN网络示意图,在输入层拥有 C C C个输入,中间有若干隐藏层,在输出层有 F F F个特征映射;图的结构(边用黑线表示)在层之间共享;标签用 Y i Y_{i} Yi表示。
右(b)是一个两层GCN在Cora数据集上(使用了5%的标签)训练得到的隐藏层激活值的形象化表示,颜色表示文档类别。
考虑一个用于半监督图节点分类问题的两层GCN,邻接矩阵为 A 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,
这使得我们之前的模型更加简洁:
(9) 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}\ ReLU(\hat{A}XW^{(0)})W^{(1)}) \tag{9} Z=f(X,A)=softmax(A^ ReLU(A^XW(0))W(1))(9)
接下来,对于半监督多类别分类,我们评估所有标记标签的交叉熵误差:
(10) L = − ∑ l ∈ Y L ∑ f = 1 F Y l f l n Z l f \mathcal{L}=-\sum_{l\in\mathcal{Y}_L}\sum_{f=1}^{F}Y_{lf}lnZ_{lf}\tag{10} L=−l∈YL∑f=1∑FYlflnZlf(10)
网络中的权重 W ( 0 ) W^{(0)} W(0)和 W ( 1 ) W^{(1)} W(1)通过梯度下降训练。
我们对每个【训练迭代】使用完整的数据集执行【批量梯度下降】,这是一个可行的选择,只要数据集适合内存。
对于 A A A使用稀疏表示,即边数是线性的。
通过Dropout引入训练过程中的随机性。
我们将内存效率扩展与小批随机梯度下降留作以后的工作。
利用TensorFlow,基于GPU的【稀疏-密集矩阵乘法】高效实现公式(9):
(9) 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}\ ReLU(\hat{A}XW^{(0)})W^{(1)}) \tag{9} Z=f(X,A)=softmax(A^ ReLU(A^XW(0))W(1))(9)
1、semi_supervised classification with graph convolutional networks论文阅读报告(1)
2、SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS个人理解
3、翻译–SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS