基于频谱的GCN 图卷积神经网络数学原理

以下内容多为个人理解,如有错误感谢批评指正。

参考链接:
如何理解GCN?知乎回答:从热传导模型到GCN
从CNN到GCN的联系与区别——GCN从入门到精(fang)通(qi)

GCN问题本质

图中的每个结点无时无刻不因为邻居和更远的点的影响而在改变着自己的状态直到最终的平衡,关系越亲近的邻居影响越大。

GCN的实质

是在一张Graph Network中特征(Feature)和消息(Message)中的流动和传播!

研究GCN的原因

  1. CNN无法处理非欧几里得结构数据,因为此种结构没有平移不变性,卷积核的大小无法固定不变。
  2. 拓扑图中包含许多重要的信息,可以通过图谱论进行挖掘。
  3. 拓扑连接是一种广义的数据结构,且一般来说任何数据在赋范空间内都可以建立拓扑关系。例如谱聚类(谱聚类原理总结

进入到应用层面,具体来说。
GCN的目的

提取拓扑图的空间特征。

核心理论: Sepectral graph theory 图谱论
图谱论简述

核心思想

  • 借助于图的拉普拉斯矩阵的特征值和特征向量来研究图的性质。
  • 借助于图谱的理论来实现拓扑图上的卷积操作。

为什么GCN要用拉普拉斯矩阵?
(1)拉普拉斯是对称矩阵,可以进行特征分解(谱分解),这和GCN的Spectral domain对应。
(2)拉普拉斯矩阵只在中心顶点和一阶相连的顶点上(1-hop neighbor)有非0元素,其余之处均为0.
(3)拉普拉斯算子和拉普拉斯矩阵之间的关系。

拉普拉斯矩阵的谱分解(特征分解)

  • 矩阵的谱分解,特征分解,对角化都是同一概念。特征分解
  • 不是所有矩阵都可以特征分解,充要条件为n阶方阵存在n个线性无关的特征向量。
    线性无关与线性相关
  • 拉普拉斯矩阵是半正定对称矩阵,有如下三个性质:
  1. 对称矩阵一定有n个线性无关的特征向量
  2. 半正定矩阵的特征值一定非负
  3. 对称矩阵的特征向量相互正交,及所有的特征向量构成的矩阵为正交矩阵。正交矩阵

在这里插入图片描述

由上可知拉普拉斯矩阵一定可以谱分解,且分解后有特殊的形式。对于拉普拉斯矩阵其谱分解为:

L = U ( λ 1 . . . λ n ) U − 1 L=U\begin{pmatrix} \lambda_1 & & \\ &...& \\ & &\lambda_n\\ \end{pmatrix}U^{-1} L=Uλ1...λnU1

其中 U = ( u ⃗ 1 , u ⃗ 2 , . . . , u ⃗ n ) U=(\vec u_1 , \vec u_2, ... ,\vec u_n) U=(u 1,u 2,...,u n)是列向量为单位特征向量的矩阵,也就说 u ⃗ 1 \vec u_1 u 1是列向量。

( λ 1 . . . λ n ) \begin{pmatrix} \lambda_1 & & \\ &...& \\ & &\lambda_n\\ \end{pmatrix} λ1...λ

### 图卷积网络 (Graph Convolutional Network, GCN) 的详细介绍 #### 1. 背景与动机 图卷积网络是一种用于处理图数据的深度学习方法。传统的神经网络主要适用于欧几里得空间中的网格化数据(如图像和序列),而图数据是非欧几里得的,节点之间的关系复杂多变。因此,为了有效地提取图结构中的特征,研究者提出了基于图的卷积操作。 在实际应用中,图数据通常由两部分组成:节点特征和图的拓扑结构[^2]。然而,如何将这两类信息结合起来是一个挑战。GCN的核心思想是通过设计一种能够同时考虑节点特征和邻域结构的学习机制,从而实现高效的图表示学习。 --- #### 2. 数学基础 ##### 卷积定理的应用 传统意义上的卷积可以通过傅里叶变换简化计算过程。具体来说,函数 \(f(t)\) 和 \(h(t)\) 的卷积可以被看作它们各自傅里叶变换后的乘积再经过逆变换得到的结果[^3]。这一理论同样可以推广到图领域,在图上定义类似的频谱卷积运算。 假设给定一个图 \(G=(V,E)\),其中 \(V\) 是节点集合,\(E\) 是边集合,则可以用拉普拉斯矩阵 \(L=D-A\) 来描述该图的性质,这里 \(D\) 表示度矩阵,\(A\) 表示邻接矩阵。进一步地,标准化拉普拉斯矩阵的形式为: \[ L_{sym} = I - D^{-\frac{1}{2}}AD^{-\frac{1}{2}} \] 通过对 \(L_{sym}\) 进行特征分解,我们可以获得一组正交基向量以及对应的特征值,这些构成了图信号的频谱表示。 --- #### 3. GCN 的核心原理 GCN 的基本形式是对每个节点及其一阶邻居执行加权平均聚合操作,并引入非线性激活函数以增强表达能力。其更新公式如下所示: \[ H^{(l+1)}=\sigma(\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}} H^{(l)} W^{(l)}) \] - \(\tilde{A}=A+I_N\) 表示自环加入后的邻接矩阵; - \(\tilde{D}_{ii}=\sum_j{\tilde{A}_{ij}}\) 是新的度矩阵; - \(W^{(l)}\) 是第 \(l\) 层的权重参数; - \(\sigma(\cdot)\) 是非线性激活函数,比如 ReLU。 这种层叠式的传播规则允许模型逐步捕获更广范围内的上下文信息[^1]。 --- #### 4. 实现细节 以下是使用 PyTorch 实现的一个简单版本的 GCN 模型: ```python import torch import torch.nn as nn import torch.nn.functional as F class GraphConvLayer(nn.Module): def __init__(self, input_dim, output_dim): super(GraphConvLayer, self).__init__() self.linear = nn.Linear(input_dim, output_dim) def forward(self, X, A_hat): # X: node features; A_hat: normalized adjacency matrix propagation = torch.mm(A_hat, X) return self.linear(propagation) class GCNModel(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(GCNModel, self).__init__() self.gc1 = GraphConvLayer(input_dim, hidden_dim) self.gc2 = GraphConvLayer(hidden_dim, output_dim) def forward(self, X, A_hat): out = F.relu(self.gc1(X, A_hat)) out = self.gc2(out, A_hat) return out ``` 上述代码展示了如何构建一个双层的 GCN 结构,每一层都涉及一次消息传递和特征转换的过程。 --- #### 5. 应用场景 由于 GCN 可以很好地融合局部特征与全局结构信息,它广泛应用于多个领域,包括但不限于: - **半监督分类**:当训练样本数量有限时,GCN 利用了未标注数据的关系辅助提升性能。 - **推荐系统**:建模用户-物品交互行为,挖掘潜在兴趣模式。 - **生物信息学**:分析蛋白质相互作用网络或者基因调控路径。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值