学习笔记: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:
- Symmetric normalized Laplacian:
- Random walk normalized Laplacian:
GCN上常用的是,其中是度矩阵(对角矩阵),是邻接矩阵。
拉普拉斯矩阵有很多良好的性质:
- 是对阵并且半正定的,可以进行特征分解。
- 一种解释说,的特征向量,就相当于傅里叶变换中的,第行实际上反应了第个节点在对其他所有节点产生扰动时所产生的增益累积
- 表示了相邻关系
(那为什么要偏向用Lsys呢 #不解 )
1.4 推广傅里叶变换
传统的[[傅里叶变换|傅里叶变换]]定义为:
这里面是频域函数,是时域函数,是拉普拉斯算子的特征函数。
图的拉普拉斯算子就是拉普拉斯矩阵(缺一个证明 #不解 )。对拉普拉斯矩阵进行分解,这里对角线上每个元素就是一个特征值,上每一列就是一个特征向量,而这个特征向量就相当于傅里叶变换里的。
仿照着,图上傅里叶变换为:
用矩阵的形式就是:
图上傅里叶逆变换为:
用矩阵的形式就是:
1.5 推广卷积
卷积定理:函数卷积的傅里叶变换是函数傅立叶变换的乘积
卷积核的傅里叶变换写成对角矩阵的形式:
(为什么一定能写成对角矩阵的形式? #不解 )
那么谱域先进行傅里叶变换,再乘上卷积核,再进行傅里叶逆变换,这个过程就是:
也可以写成:,其中是哈达马积
1.6 GCN简洁进化史
1.6.1 第一代GCN
Spectral Networks and Locally Connected Networks on Graphs直接摆出了最纯粹的图卷积:
其中是卷积核,是激活函数。它的缺点:
- 每次传播要计算,和的矩阵乘积,计算代价高
- 卷积核不具有spatial localization
- 卷积核需要个参数
1.6.2 第二代GCN
Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering把设计为,可以推出:,这意味着图卷积简化为:
它的好处是:
- 卷积核个参数,远小于,参数复杂度降低了(不是同时意味着能力受到了限制吗,因为对每个邻居的改变的权重都相同了啊 #不解 )
- 不需要做特征分解了
- 卷积核具有spatial localization,就是它的接受域
1.6.3 以Chebyshev多项式为卷积核
利用Chebyshev多项式作为卷积核是非常通用的形式
比如这篇文章第二部分的内容,通过对k=1的切比雪夫多项式的特殊处理,将传播过程变为:
这篇知乎上的文章后面还介绍了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.能用的阶多项式表示,且的系数为 ;2.递归式的推导)
将设置为
这里的,保证了大小在[-1,1],满足了切比雪夫不等式的条件(即在运算范围内)。是实数。
(为什么这里是约等于,是不是因为使用的不是,而是缩放过的呢? #不解 )
将这个带入卷积式子中,得到:
简化为:
其中,从而不再需要矩阵分解。可以用幂迭代法求,即利用求出近似的主特征向量,然后即可。
(3)简化为(4)是因为,这个的证明用到了切比雪夫是多项式这一性质。注意,是正交矩阵,具有性质:
(4)是K局部的,即一个点的信息最多向外扩展到K远的邻点处。复杂度是O(|E|)的。因为即表示,邻接矩阵的K次幂,也就是K阶邻居的情况(路径数之类的)
( #不解 为什么是O(|E|)的,不需要算矩阵乘法吗?)
2.2 层级线性模型
令K=1,然后假定,期待训练的参数能够修正这一设定,这样(4)就变成了:
为了限制参数的数量以避免过拟合,我们可以改成这样:
这里。这里的范围是[0,2]。多次重复这个操作会造成梯度消失/下降,因此使用这个重正则化技巧:,其中 。最终得到的式子为:
其中,是通道数(特征维度),,是过滤器数。是卷积信号矩阵。这个过滤操作的复杂度为,其中能看做一个稀疏矩阵和稠密矩阵的乘积从而有效地计算(? #不解 )
参考文献:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?