Skip to content

GCN

从ChetNet到GCN

在ChebNet的基础上:

gθX=k=0KθkTk(L~)XL~=2Lλmax

K = 2同时取λmax2,得到

gθxθ0x+θ1(LI)x=θ0x+θ1D12AD12x

θ=θ0=θ1,得到

gθx=θ(I+D12AD12)x

此时数值稳定性差,采用重整化技巧,记A~=A+ID~=D+I,同时加入线性变化矩阵W增强模型表达能力,得到GCN最终模型

H=D~12A~D~12XW

优势

  • 再次降低了参数数量,缓解了具有较宽点度分布的图过拟合问题。
  • 允许建立更深层的模型,事实上Wu et al.,2019证明了叠加K层的GCN近似于一个固定系数ΘK阶滤波器。
  • 有利于最小化每层的操作。

仍然存在的问题

  • 事实上,GCN通常情况下是shallow的,一般仅叠加2~3层。显然这并不利于模型有效的聚合高阶邻居的特性。这是由于,当GCN层数过高时,会发生过平滑(over smoothing)现象。过平滑指的是随着layer增加,GCN学到的表示将会收敛到一个确切的值,这将使得所有点习得的最终特征无法区分。
  • 论文本身给到了一种使用残差连接(residual connection)将l+1层的输出H(l+1)=D~12A~D~12与上一层状态H(l)连接起来,遗憾的是可以证明这种方法只能减缓其收敛速度,并不能从根本上解决过平滑的事情。

GCN试验结果验证

说明

  • Code来自github
  • Arch linux 6.7.3-arch1-2
  • GPU:GeForce RTX 4060 Max-Q / Mobile
  • CPU:Ryzen 9 7940H w/ Radeon 780M Graphics (16)
  • 结果呈现100次重复实验下算术平均。

实验

zsh
python train.py --hidden1=16 --dropout=0.5 --weight_decay=5e-4 --dataset=cora
python train.py --hidden1=16 --dropout=0.5 --weight_decay=5e-4 --dataset=citeseer
python train.py --hidden1=16 --dropout=0.5 --weight_decay=5e-4 --dataset=pubmed

结果

GCN*为个人复现代码,详见github

MethodCiteseerCoraPumbed
GCN(paper)70.381.579.0
GCN(rand.splits paper)67.9 ± 0.580.1 ± 0.578.9 ± 0.7
GCN70.9(2.40)81.6(1.91)79.1(6.31)
GCN(rand.splits)69.6(2.45)78.5(1.90)78.0(6.66)
GCN*70.8(2.15)81.5(1.90)79.1(3.53)
GCN*(rand.splits)70.4(2.11)78.6(1.90)81.7(3.43)