【Graph Embedding】GCN:天空飘来七个大字

匆匆过客 提交于 2020-02-27 04:00:21

今天学习的是阿姆斯特丹大学的同学于 2016 发表的一篇论文《Semi-supervised Classification with Graph Convolutional Networks》,目前有 2800 多引用。

在 2013 年在之前,NetWork Representation 有两种主流的方式,包括矩阵分解和 NetWork Embedding。

在 2013 年之后,也就是 Mikolov 提出 Word2Vec 之后,人们将注意力转移到 Network Embedding 上,并在此之后出现了很多有名的算法——DeepWalk、LINE、Node2Vec 等等。但是所有的这些方法都需要分成两步分别优化,一个是基于随机游走的生成序列和另一个是半监督学习的训练。

2013 年,本文作者提出了基于空间的图卷积神经网络,通过在图上进行卷积来完成特征提取,并取得非常好的效果。

1. Introduction

我们知道对于 CNN 网络中来说,其核心在使用了基于 Kernel 的卷积操作来提取图像的特征,卷积操作类似于对计算区域内的中心节点和相邻节点进行加权求和

CNN 之所以能成为图像领域的明珠却很少应用于其他领域原因是:图片是一个规整的二维矩阵,无论 Kernel 平移到图片中的哪个位置都可以保证其运算结果的一致性,即:平移不变性。CNN 的卷积本质就是利用这种平移不变性来对扫描的区域进行卷积操作,从而实现了图像特征的提取。

平移不变形

网络是不规整的关系型数据,所以其不存在平移不变形,这就使得传统的 CNN 方法无法直接应用于网络中。

当然,解决这个问题的思路也很直接——使用其他的特征提取方式代替传统的基于 Kernel 的卷积运算

本文 GCN 使用的是基于空间的图卷积方法,其工作原理类似于将所有相邻节点的值聚集起来以更新当前节点

有了感性认识后,我们接下来看 GCN 具体的工作方式。

2. GCN

本文介绍的 GCN 是基于空间的图卷积方法,区别于传统的基于频谱的图卷积方法,所以我将通过公式推导的方法帮助大家理解其演变过程。为了保证叙述的连贯性,我将在叙述过程中可能会产生疑问的地方进行标记,并在后面进行解答。

2.1 Approximate Convolutions

首先,原始的 GCN 采用的是基于频谱的卷积方法,并将谱卷积定义为图信号与滤波器进行傅里叶变换(疑问 1:为什么进行傅立叶进行变换?):
gθx=UgθUTx g_{\theta} * x = Ug_{\theta} U^T x \\
其中, xRNx\in R^N 是一个由图的各个节点组成特征向量; gθ=diag(θ)g_{\theta} =diag (\theta) 为滤波器,$ \theta \in R^N$;U 是对称归一化拉普拉斯矩阵 L=IND12AD12=UΛUTL= I_N - D^{-\frac{1}{2}} A D^{-\frac{1}{2}} = U \Lambda U^T 的特征向量(疑问 2:为什么要用拉普拉斯变换?);Λ\Lambda 是特征矩阵的特征值;UTxU^T x 是 x 的傅立叶变换(疑问 3:为什么是傅里叶变换?)。

不难理解, gθg_{\theta} 是拉普拉斯矩阵 L 的特征值函数 gθ(Λ)g_{\theta}(\Lambda) (之所以是函数而不是特征值是因为矩阵对角线上的特征值会有多种排列)。

我们知道特征向量时间复杂度比较高 O(N2)O(N^2),所以为了应对大型网络的结构的求解,我们引入切比雪夫多项式(Chebyshev polynomials) 来求近似解:
gθ(Λ)k=0KθkTk(Λ~)x g_{\theta^{'}}(\Lambda) \approx \sum_{k=0}^K \theta_k^{’}T_k(\widetilde \Lambda)x \\
其中,Λ~=2λmaxΛIN\widetilde \Lambda = \frac{2}{\lambda_{max}}\Lambda - I_N疑问 4:$\widetilde \Lambda $ 为什么会有这样的变换?) ;λmax\lambda_{max} 是指拉普拉斯矩阵 L 的最大值;θRK\theta^{'} \in R^K 是切比雪夫系数的向量; Tk(x)T_{k}(x) 为切比雪夫多项式的第 k 阶式子。切比雪夫多项式的递归式为:Tk(x)=2xTk1(x)Tk2(x),  T0(x)=1,  T1(x)=xT_{k}(x) = 2xT_{k-1}(x) - T_{k-2}(x), \; T_{0}(x) =1, \;T_{1}(x)=x

我们将切比雪夫多项式引入到我们的卷积变换中:
gθxk=0KθkTk(L~)x g_{\theta^{'}}*x \approx \sum_{k=0}^K \theta_k^{'} T_k (\widetilde L) x \\
其中,L~=2λmaxLIN\widetilde L = \frac{2}{\lambda_{max}}L - I_N

这个表达式为拉普拉斯多项式中的一个 k 阶近似函数,依赖于节点的 k 阶邻域(走 k 步能到的邻居),时间复杂度与边呈线形相关。

GCN 通过上式的多层卷积层进行叠加,而每层都会逐点进行非线性叠加,考虑到时间复杂度问题,我们取 K=2,也就是说得到了一个拉普拉斯算子的二阶近似函数。这样我们既可以对网络进行卷积操作,又不会引入太多的切比雪夫系数。而且这样的线形运算允许我们构建更深的网路,提高模型的建模能力。

进一步近似 λmax=2\lambda_{max}=2,所以我们有新的表达式:
gθxθ0x+θ1(LIN)x=θ0xθ1D~12A~D~12x g_{\theta^{'}}*x \approx \theta_0^{'} x + \theta_1^{'} (L - I_N) x = \theta_0^{'} x - \theta_1^{'}\widetilde D ^{-\frac{1}{2}} \widetilde A \widetilde D^{-\frac{1}{2}} x \\
其中,θ0θ1\theta_0^{'},\theta_1^{'} 为切比雪夫系数的向量,是仅有的两个参数。

在实际训练过程中,我们需要规范化参数来避免过拟合,所以我们令 θ=θ0=θ1\theta = \theta_0^{'} = - \theta_1^{'},从而有:
gθxθ(IN+D12AD12)x g_{\theta} \star x \approx \theta(I_{N}+D^{-\frac{1}{2}} A D^{-\frac{1}{2}}) x \\
需要注意的是,IN+D12AD12I_{N}+D^{-\frac{1}{2}} A D^{-\frac{1}{2}} 的特征值范围在 [0, 2] 之间,所以如果在很深的网络中会引起梯度爆炸的问题,所以我们需要再次对他进行一次归一化(原文也称 renormalization trick):
IN+D12AD12D12AD12 I_{N}+D^{-\frac{1}{2}} A D^{-\frac{1}{2}} \rightarrow D^{-\frac{1}{2}} A D^{-\frac{1}{2}} \\
我们把这个公式从标量推广到矩阵,对于输入节点的向量 $X \in R^{N\times C} $ ,其中 N 为节点数,C 为节点的特征向量维度,我们有:
Z=D12AD12XΘ Z = D^{-\frac{1}{2}} A D^{-\frac{1}{2}} X \Theta \\
其中,$\Theta \in R^{C\times F} $ 是滤波器的参数矩阵,$Z \in R^{N\times F} $ 是卷积后的信号矩阵,时间复杂度为 O(EFC)O(|E|FC)E|E| 为节点边数。节点的向量可以通过卷积操作从 C 维度 转变为 F 维度。

依据上面的单层运算,我们给出了多层图卷积网络的传播规则:
H(l+1)=σ(D~12A~D~12H(l)W(l)) H^{(l+1)} = \sigma (\widetilde D ^{-\frac{1}{2}} \widetilde A \widetilde D^{-\frac{1}{2}} H^{(l)}W^{(l)} ) \\
其中,A~=A+IN\widetilde A = A + I_N ,A 为邻接矩阵,INI_N 为单位矩阵,所以 A~\widetilde A 为添加自连接的邻接矩阵;$\widetilde D_{ii} = \sum_j \widetilde A_{ij} $ ,D~\widetilde D 可以理解为对角线为节点 i 的度数矩阵;W(l)W^{(l)} 为神经网络第 ll 层的权重矩阵;σ()\sigma(\cdot) 是激活函数;$H^{(l)} \in R^{N\times D} $ 是第 ll 层的激活矩阵,并且 H(0)=XH^{(0)} = XXX 是由节点 xix_i 的特征向量组成矩阵。

到此,便完成了 GCN 卷积操作的公式推导。

2.2 Model

我们再来关注一下模型。

图卷积神经网络是指在图结构中做卷积操作的神经网络,所以其输入输出的都是图结构,区别于传统的神经网络结构,其隐藏层是直接在图结构中进行激活:

为了方便理解,我们举个分类任务例子,以包含一个隐藏层的 GCN 为例:

由于知道了 GCN 的传播规则,所以我们有最终的结果:
Z=f(X,A)=Softmax(A^  ReLU(A^XW(0))W(1)) Z = f(X,A) = Softmax\big(\hat A \; ReLU(\hat A X W^{(0)} ) W^{(1)}\big) \\
其中,W(0)RC×HW^{(0)} \in R^{C\times H} 是输入层到隐藏层的权重,W(1)RH×FW^{(1)}\in R^{H\times F} 是隐藏层到输出层的权重;用 Softmax 是因为这是一个节点分类任务,需要预测标签。

然后,我们用交叉熵作为代价函数:
L=lyLf=1FYlf  ln  Zlf L = -\sum_{l\in y_L} \sum_{f=1}^F Y_{lf}\; ln\; Z_{lf} \\
其中,yLy_L 为有标签的节点集合。

有了代价函数后,我们可以通过梯度下降来更新网络的参数。

3. Answering

这一节我们来尝试着回答下上面的诸多疑问。

疑问 1:为什么要进行傅立叶变换?

网络图结构属于空域,傅立叶变换可以将空域中的信号映射到频域中,作者将节点的特征向量从空域映射到频域的目的是想从信号的角度引入滤波器来提取特征,这在物理学和工程学中有很多的应用。

那么作者是怎么将传统的傅立叶变换映射到网络中的呢?

首先我们给出拉普拉斯矩阵 L:
L=IND12AD12 L= I_N - D^{-\frac{1}{2}} A D^{-\frac{1}{2}} \\
又因为 L 是半正定矩阵,所以有为
L=UΛU1=UΛUT L= U \Lambda U^{-1} = U \Lambda U^{T}\\
我们上面提到 x^=UTx\hat x = U^T x 是图信号 x 的傅里叶变换,x^\hat x 为傅里叶变换的结果。

因为 U1=UTU^{-1} = U^T ,所以逆变换为 f1(x^)=Ux^f^{-1}(\hat x) = U \hat x

然后我们来对输入的图信号 x 做卷积操作(两个函数的卷积等于各自求傅里叶变换转成频域后乘积的逆傅里叶变换):
gx=f1(f(x)f(g))=U(UTxUTg) g*x = f^{-1}(f(x) \odot f(g)) = U(U^Tx \odot U^Tg) \\
其中,\odot 是哈达玛积(Hadamard product),矩阵的点乘;gRNg\in R^{N} 是我们的滤波器。

我们定义滤波器为:
gθ=diag(UTg) g_{\theta} = diag(U^T g) \\
diag()diag(\cdot) 称为度矩阵,只有对角线上有值,且值表示节点度的大小。

所以图卷积操作可以简化为:
gθx=UgθUTx g_{\theta} * x = Ug_{\theta}U^Tx \\
也就是我们最一开始看到的那个公式。

疑问 2:为什么要用拉普拉斯变换?

考虑牛顿冷却定律:物体的冷却速度,与其当前温度与室温之间的温差成正比。

我们将其应用于一维离散点间中温度在相邻的不同单元之间的传播问题:
ϕi(t)=k(ϕi+1(t)ϕi(t))k(ϕi(t)ϕi1(t)) \phi_i^{'}(t) = k(\phi_{i+1}(t) - \phi_{i}(t)) - k(\phi_{i}(t) - \phi_{i-1}(t)) \\
其中,ϕi(t)\phi_i(t) 表示第 i 个单元 t 时刻的温度(后简写为 ϕi\phi_i),k 为常数。右边第一项是下一个单元向本单元的热量流入导致温度升高,第二项是本单元向上一个单元的热量流出导致温度降低。然后我们把它移到一边:
ϕik[(ϕi+1ϕi)(ϕiϕi1)]=0 \phi_i^{'} - k\left[(\phi_{i+1} - \phi_{i}) - (\phi_{i} - \phi_{i-1}) \right] = 0 \\
我们看第二项,相邻位置的两个差分的差分其实就是二阶导数:
ϕitk2ϕix2=0 \frac{\partial \phi_i}{\partial t} - k \frac{\partial^2 \phi_i}{\partial x^2} = 0\\
我们将其从一维空间拓展到高维空间中,一阶导数就是梯度,二阶导数就是拉普拉斯算法:
ϕixkΔϕi=0 \frac{\partial \phi_i}{\partial x} - k \Delta \phi_i = 0 \\
其中 Δ\Delta 为各个维度二阶导数的和。

我们将热传播模型推广到网络中。
d(ϕi)dt=kjAij(ϕiϕj) \frac{d(\phi_i)}{dt} = -k \sum_jA_{ij}(\phi_i-\phi_j) \\
其中,A 是图的邻接矩阵。这个公式表示只有相邻节点才能与当前节点发生热交换。

我们在对其做个乘法分配律:
dϕidt=k[ϕijAijjAijϕj]=k[diag(i)ϕiiAijϕj] \frac{d \phi_i}{dt} = -k[\phi_i\sum_jA_{ij} - \sum_jA_{ij}\phi_j] \\ = -k[diag(i)\phi_i - \sum_i A_{ij}\phi_j] \\
其中, diag()diag(\cdot ) 为度运算。

我们将其写成向量形式,以表所有的节点:
KaTeX parse error: Unknown column alignment: 1 at position 25: …\begin{array}{c1̲} \frac{d\phi_{…
我们,令 Φ=[ϕ1,ϕ2,...,ϕn]T\Phi = [\phi_1,\phi_2,...,\phi_n]^T ,所以有:
dΦdt=kDΦi+kAΦ=k(DA)Φ=kLΦ \frac{d\Phi}{dt} = -kD\Phi_i + kA\Phi = -k(D-A)\Phi = -kL\Phi \\
其中,L=DAL = D-AD=diag(A)D=diag(A)

这个我们刚刚推导出来的在欧式空间中的微分方程具有一样的形式。而 L=DAL=D-A 正是拉普拉斯矩阵。其更为常用的形式是其归一化的形式:
Lsym=D12LD12=ID12AD12 L^{sym} = D^{-\frac{1}{2}}LD^{-\frac{1}{2}} = I - D^{-\frac{1}{2}}AD^{-\frac{1}{2}}\\
所以我们这里用拉普拉斯变换器是为了模拟节点邻域与当前节点的信号(特征)传播。

疑问 3:为什么是傅里叶变换?

为什么 f=UTxf=U^Tx 是傅里叶变换?

其实很简单,傅里叶变换就是把任意一个函数表示成了若干个正交函数的线性组合

而我们用的拉普拉斯矩阵是半正定对称矩阵,有非常好的几个性质:

  • 对称矩阵一定 n 个线性无关的特征向量(n 是 Graph 节点数)
  • 半正定矩阵的特征值一定非负
  • 对阵矩阵的特征向量相互正交,即所有特征向量构成的矩阵为正交矩阵。

而 x 表示图中节点向量,其线性无关。由线性代数的知识可以知道:n 维空间中 n 个线形无关的特征向量构成一组基,而且拉普拉斯矩阵的特征向量 U 不但线性无关而且还是一组正交基。

所以 f=UTxf=U^Tx 是 x 的傅里叶变换。

疑问 4:$\widetilde \Lambda $ 为什么会有这样的变换?

这是因为切比雪夫多项式的输入要在 [1,1][-1,1] 之间,由于拉普拉斯矩阵的半正定性,所以所有的特征值都是大于等于 0 的,将其除以最大特征值可以将特征压缩到 [0,1][0,1] 区间内,现在需要将其压缩到 [1,1][-1, 1],所以我们有:
Λ~=2Λ/λmaxI \widetilde \Lambda = 2\Lambda/\lambda_{max}-I \\

4. Experiment

由于 GCN 比较复杂,所以这里我将给出两种实验,一种是 GCN 的效果实验,另一种是模拟 GCN 运行的实验。

4.1 Effect

我们来看一下实验部分,GCN 与其他模型的对比:

可以看到 GCN 的结果在不同数据集上都取得了非常好的效果,远超其他模型。

我们再看一下,对于 GCN 而言不同程度的近似会有什么样的效果:

可以看到并不是模型越复杂效果越好。

GCN 还有除了训练后模型精度高外,还有两个非常硬核的地方,即使不训练,直接随机参数也可以获得不错的效果,下图展示了在某一数据集下随机赋权值的结果:

另外,作为半监督学习,GCN 可以在只标注少量样本的情况下学得出色的效果,下图为每个类别只标注一个样本的分类结果:

4.2 Simulation

为了更加形象的理解 GCN,我们来对 GCN 进行模拟。

首先,以一个简单有向图模型为例:

邻接矩阵 A 和 节点的特征向量 X 为:
KaTeX parse error: Unknown column alignment: 1 at position 29: …\begin{array}{c1̲} 0, 1, 0,…
我们有一个简单的传播规则(不考虑参数矩阵和激活函数):
KaTeX parse error: Unknown column alignment: 1 at position 63: …\begin{array}{c1̲} 1, -1\\ …
可以看到节点的特征变成了其邻居的特征之和!

但这边也就一些小问题:

  1. 这种传播过程没有考虑节点自身的特征;
  2. 度的大节点特征值会越来越大,度小的节点特征值会越来越小,传播过程对特征的尺度敏感。

为了解决这个问题,我们需要:

  1. 加一个单位矩阵,考虑自环路;
  2. 将邻接矩阵 A 与度矩阵 D 的逆相乘对特征进行归一化。

我们先看下加上单位矩阵的效果:
KaTeX parse error: Unknown column alignment: 1 at position 45: …\begin{array}{c1̲} 1, -1 \\…
可以看到,加上单位矩阵的计算考虑了节点的特征。

再看下邻接矩阵归一化的效果:
$$
f(A,X) = D^{-1} A X=
\left [ \begin{array}{c1}
1, 0, 0, 0 \
0, 2, 0, 0 \
0, 0, 2, 0 \
0, 0, 0, 1 \
\end{array} \right]^{-1}
\left [ \begin{array}{c1}
0, 1, 0, 0 \
0, 0, 1, 1 \
0, 1, 0, 0 \
1, 0, 1, 0 \
\end{array} \right]
\left [ \begin{array}{c1}
0, 0\
1, -1 \
2, -2\
3, -3
\end{array} \right] =

\left [ \begin{array}{c1}
0, 1, 0, 0 \
0, 0, 0.5, 0.5 \
0, 0.5, 0, 0 \
0.5, 0, 0.5, 0 \
\end{array} \right]
\left [ \begin{array}{c1}
0, 0\
1, -1 \
2, -2\
3, -3
\end{array} \right] =
\left [ \begin{array}{c1}
1, -1\
2.5, -2.5 \
0.5, -0.5\
2, -2
\end{array} \right] \
$$
邻接矩阵被归一化到 0 到 1 之间。

我们将两个放在一起,并考虑参数矩阵 W:
KaTeX parse error: Unknown column alignment: 1 at position 29: …\begin{array}{c1̲} 1, -1\\ …
所以我们有:
KaTeX parse error: Unknown column alignment: 1 at position 81: …\begin{array}{c1̲} 1, -1\\ …
以上便完成了 GCN 的简单仿真。

我们回过头来再来看一下网络的传播规则:
H(l+1)=σ(D~12(A+IN)D~12H(l)W(l)) H^{(l+1)} = \sigma (\widetilde D ^{-\frac{1}{2}}(A+I_N) \widetilde D^{-\frac{1}{2}} H^{(l)}W^{(l)} ) \\
现在是不是更能明白为什么这么传播了?

这里解释一下归一化为什么是两边乘上矩阵的 -1/2 次方。

这是因为对称归一化的拉普拉斯矩阵其元素定义为:
Lij={1if  i=j  and  deg(vi)01deg(vi)deg(vj)if  ij  and  vi  is  adjacent  to  vj0otherwise L_{ij} = \left\{ \begin{aligned} & 1 \quad\quad \quad \quad \quad \quad \quad \quad \quad if \; i=j \; and \;deg(v_i) \neq0 \\ & -\frac{1}{\sqrt{deg(v_i)deg(v_j)}} \quad if \; i\neq j \; and \; v_i \; is \; adjacent \;to \; v_j \\ &0 \quad\quad \quad \quad \quad \quad \quad \quad \quad otherwise \end{aligned} \right.
我们仿真模拟的是用加权求和取平均的方式来聚合,而作者采用的是拉普拉斯变换。我这边做一个化简大家可能个就会明白了:
f(A,X)i=D12AiD12=k=1NDi,k0.5j=1NAi,jl=1NDi,l0.5Xj=j=1NDi,i0.5Ai,jDj,j0.5Xj=j=1NAi,jDi,iDj,jXj \begin{aligned} f(A,X)_i &= D ^{-\frac{1}{2}}A_i D^{-\frac{1}{2}} \\ &= \sum_{k=1}^N D_{i,k}^{-0.5} \sum_{j=1}^N A_{i,j} \sum_{l=1}^N D_{i,l}^{-0.5} X_j\\ &= \sum_{j=1}^N D_{i,i}^{-0.5} A_{i,j} D_{j,j}^{-0.5} X_j\\ &= \sum_{j=1}^N \frac{A_{i,j}}{\sqrt{D_{i,i}}\sqrt{D_{j,j}}} X_j\\ \end{aligned}
区别于加权求和取平均的方式,拉普拉斯变换不但考虑当前节点的 i 的度,还考虑其他节点 j 的度。

5. Evolution

简单科普一下 GCN 网络的发展。

第一代 GCN 是简单粗暴的直接用卷积核进行特征提取,也就是我们说的基于频谱的原始 GCN:
gθx=UgθUTx g_{\theta}*x = U g_{\theta} U^T x \\
其明显的缺点有:

  1. 特征分解计算代价昂贵,时间复杂度为 O(N2)O(N^2)
  2. 参数为 Λ\Lambda ,数量随着网络增加而增加。

第二代 GCN 将滤波器定为 k 阶滤波器,此时的 GCN 已经是基于空间的 GCN:
gθ(Λ)k=0KθkΛk g_{\theta}(\Lambda) \approx \sum_{k=0}^K \theta_k \Lambda^k \\
带入可以得到:
gθxUk=0KθkΛkUTx=k=0KθkUΛkUTx=k=0Kθk(UΛUT)kx=k=0Kθk(L)kx \begin{aligned} g_{\theta}*x &\approx U \sum_{k=0}^K \theta_k \Lambda^k U^T x \\ &= \sum_{k=0}^K \theta_k U \Lambda^k U^T x \\ &= \sum_{k=0}^K \theta_k (U \Lambda U^T)^k x \\ & = \sum_{k=0}^K \theta_k (L)^k x \end{aligned} \\
这样就不需要做特征分解了,直接对拉普拉斯矩阵进行变换。可以事先把 LkL^k 事先计算好。时间复杂度为 O(Kn2)O(Kn^2)。如果使用稀疏矩阵(L 比较稀疏)算法,复杂度为 O(kE)O(k|E|)

第三代,也就是本文叙述的 GCN 将滤波器且切比雪夫的二阶展开来近似 LkL^k
gθxk=0KθkTk(L)xθ0x+θ1(LIIn)xθ(In+D12AD12)x=θ(D12(IN+A)D12)x \begin{aligned} g_{\theta}*x &\approx \sum_{k=0}^K \theta_k T_k(L) x \\ &\approx \theta_{0} x + \theta_1(L_I-I_n)x \\ &\approx \theta (I_n + D^{-\frac{1}{2}}AD^{-\frac{1}{2}})x \\ &= \theta (D^{-\frac{1}{2}}(I_N+A)D^{-\frac{1}{2}})x \end{aligned}

时间复杂度降低为 O(E)O(E),且计算简单,可以多层叠加以捕获更多非线性特征。

6. Conclusion

一句话总结:GCN 模型通过图的傅立叶变换将图从空域转换到频域,并使用了基于图上拉普拉斯的谱分解的一阶近似传播规则来提取特征,从而完成网络表征和节点分类任务。

GCN 的论文到此就结束了,虽然对 GCN 还有很多地方没有了解清楚,但产品和知识都是需要迭代的,以后还会经常回过头来读一读以看懂所有的细节,彻底解决所有的疑惑。

7. Referenced

  1. 《SEMI -SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS》
  2. 《GRAPH CONVOLUTIONAL NETWORKS》
  3. 《Graph Convolutional Networks in 3 Minutes》
  4. 如何理解 Graph Convolutional Network(GCN)? - Johnny Richards的回答 - 知乎
  5. 《How to do Deep Learning on Graphs with Graph Convolutional Networks》
  6. 《Graph Convolutional Networks》

关注公众号跟踪最新内容:阿泽的学习笔记

阿泽的学习笔记

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!