学习笔记:GCN

本文第一部分摘抄自一篇知乎上的回答如何理解 Graph Convolutional Network(GCN)?,第二部分是对Kipf这篇GCN论文的学习笔记。

目前还没必要都那么细,就“不求甚解”,只知道咋用吧。

1 不止Kipf的GCN

Kipf在2017年发S的EMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS并不是第一篇GCN论文,他也是在前人肩膀上取得的成果。下面从0开始记录GCN的诞生。

1.1 传统卷积

CNN中的卷积,也就是离散卷积,本质是一种加权求和:通过中心像素点与相邻像素点的加权和来实现特征提取,加权系数就是卷积核参数。

1.2 提取图结构(Graph)的方式

一种是空间维度,对每个节点分别计算它们的相邻节点
一种是图谱维度,从邻接矩阵的角度,转化为“频域”问题

1.3 为什么用拉普拉斯矩阵

拉普拉斯矩阵有三种:

  • Combinatorial Laplacian:L=DA
  • Symmetric normalized Laplacian:Lsys=D1/2LD1/2
  • Random walk normalized Laplacian:Lrw=D1L
    GCN上常用的是Lsys,其中D是度矩阵(对角矩阵),A是邻接矩阵。

拉普拉斯矩阵有很多良好的性质:

  • 是对阵并且半正定的,可以进行特征分解。
  • 一种解释说,L的特征向量,就相当于傅里叶变换中的eiωx,第i行实际上反应了第i个节点在对其他所有节点产生扰动时所产生的增益累积
  • 表示了相邻关系
    (那为什么要偏向用Lsys呢 #不解 )

1.4 推广傅里叶变换

传统的[[傅里叶变换|傅里叶变换]]定义为:

F(ω)=F[f(t)]=f(t)eiωtdt

这里面F(ω)是频域函数,f(t)是时域函数,eiωt是拉普拉斯算子的特征函数。

图的拉普拉斯算子就是拉普拉斯矩阵(缺一个证明 #不解 )。对拉普拉斯矩阵进行分解L=UΛUT,这里Λ对角线上每个元素就是一个特征值,U上每一列就是一个特征向量,而这个特征向量就相当于傅里叶变换里的eiωt

仿照着,图上傅里叶变换为:F(λl)=f^(λl)=i=1Nf(i)ul(i)
用矩阵的形式就是:f^=UTf

图上傅里叶逆变换为:f(i)=l=1Nf^(λl)ul(i)
用矩阵的形式就是:f=Uf^

1.5 推广卷积

卷积定理:函数卷积的傅里叶变换是函数傅立叶变换的乘积

fh=F1[f^(ω)h^(ω)]

卷积核h的傅里叶变换写成对角矩阵的形式:(h^(λ1)h^(λn))
(为什么一定能写成对角矩阵的形式? #不解 )
那么谱域先进行傅里叶变换,再乘上卷积核,再进行傅里叶逆变换,这个过程就是:(fh)G=Uh^UTf
也可以写成:(fh)G=U((UTh)(UTf)),其中是哈达马积

1.6 GCN简洁进化史

1.6.1 第一代GCN

Spectral Networks and Locally Connected Networks on Graphs直接摆出了最纯粹的图卷积:

youtput=σ(Ugθ(Λ)UTx)

其中gθ(Λ)是卷积核,σ()是激活函数。它的缺点:

  • 每次传播要计算Udiag(θl)UT的矩阵乘积,计算代价高
  • 卷积核不具有spatial localization
  • 卷积核需要n个参数

1.6.2 第二代GCN

Convolutional Neural Networks on Graphs with Fast Localized Spectral Filteringh^(λl)设计为j=0Kαjλlj,可以推出:Uj=0KαjΛjUT=j=0KαjUΛjUT=j=0KαjLj,这意味着图卷积简化为:

youtput=σ(j=0K1αjLjx)

它的好处是:

  • 卷积核k个参数,远小于n,参数复杂度降低了(不是同时意味着能力受到了限制吗,因为对每个邻居的改变的权重都相同了啊 #不解 )
  • 不需要做特征分解了
  • 卷积核具有spatial localization,K就是它的接受域

1.6.3 以Chebyshev多项式为卷积核

利用Chebyshev多项式作为卷积核是非常通用的形式
比如这篇文章第二部分的内容,通过对k=1的切比雪夫多项式的特殊处理,将传播过程变为:

H(l+1)=σ(D~12A~D~12H(l)W(l))

这篇知乎上的文章后面还介绍了Local Connectivity、Parameter Sharing、可解释性、有向图问题、过渡平滑等内容,就不在这里列出来了。

2 Kipf的GCN

SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS

作者:Thomas N.Kipf, Max Welling
论文地址:https://openreview.net/forum?id=SJU4ayYgl
代码地址(tensorflow):https://github.com/tkipf/gcn

2.1 谱图卷积

把图上的谱卷积定义为:

(1)gθx=UgθUx

U是正则化的图拉普拉斯L=IND12AD12=UΛU的特征向量构成的矩阵,Λ是特征值组成的对角矩阵,Uxx的图傅里叶变换。可以把gθ理解成L的特征值的函数,如gθ(Λ)

由于矩阵分解计算量太大,因此使用切比雪夫多项式简化。
(矩阵分解复杂度好像是O(n3)级别的)

n阶切比雪夫多项式:cosnθ=Tn(cosθ),即用关于cosθn阶多项式来表示cosnθ
具有性质:T0(x)=1, T1(x)=x, Tk(x)=2xTk1(x)Tk2(x)

(此处省略证明:1.能用cosθn阶多项式表示cosnθ,且cosnθ的系数为2n1 ;2.递归式的推导)
gθ设置为

(2)gθ(Λ)k=0KθkTk(Λ~)

这里的Λ~=2λmaxΛIN,保证了大小在[-1,1],满足了切比雪夫不等式的条件(即在cos运算范围内)。θk是实数。
(为什么这里是约等于,是不是因为使用的不是Λ,而是缩放过的Λ~呢? #不解 )
将这个带入卷积式子中,得到:

(3)gθxU(k=0KθkTk(Λ~))Ux

简化为:

(4)gθxk=0KθkTk(L~)x

其中L~=2λmaxLIN,从而不再需要矩阵分解。λmax可以用幂迭代法求,即利用v=Lmv0求出近似的主特征向量,然后λmaxvTLv即可。
(3)简化为(4)是因为U(k=0KθkTk(Λ~))U=k=0KθkTk(UΛU~),这个的证明用到了切比雪夫是多项式这一性质。注意,U是正交矩阵,具有性质:U=U1

(4)是K局部的,即一个点的信息最多向外扩展到K远的邻点处。复杂度是O(|E|)的。因为UΛKU即表示LK,邻接矩阵的K次幂,也就是K阶邻居的情况(路径数之类的)

( #不解 为什么是O(|E|)的,不需要算矩阵乘法吗?)

2.2 层级线性模型

令K=1,然后假定λmax=2,期待训练的参数能够修正这一设定,这样(4)就变成了:

(5)gθxθ0x+θ1(LIN)x=θ0xθ1D12AD12x

为了限制参数的数量以避免过拟合,我们可以改成这样:

(6)gθxθ(IN+D12AD12)x

这里θ=θ0=θ1。这里IN+D12AD12的范围是[0,2]。多次重复这个操作会造成梯度消失/下降,因此使用这个重正则化技巧:IN+D12AD12D~12A~D~12,其中A~=A+IN, D~ii=jA~ij 。最终得到的式子为:

(7)Z=D~12A~D~12XΘ

其中XRN×CC是通道数(特征维度),ΘRC×FF是过滤器数。ZRN×F是卷积信号矩阵。这个过滤操作的复杂度为O(|E|FC),其中A~X能看做一个稀疏矩阵和稠密矩阵的乘积从而有效地计算(? #不解 )


参考文献:

  1. Chebyshev多项式作为GCN卷积核
  2. 证明(3)(4)等价
  3. 切比雪夫多项式的定义与推导
  4. 幂迭代法
  5. 知乎:如何理解 Graph Convolutional Network(GCN)?
posted @   white514  阅读(144)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示