图神经网络【3】学习笔记

本文是根据我最近学习图卷积神经网络学习的内容进行记录,总结了来自知乎、以及集智学园等多个平台,整理分析并加个人思考得来的。如果有不正确的地方大家批评指正。

最早的图神经网络经典论文,可以追溯到2017Thomas N. Kipf发表在ICLR题为Semi-Supervised Classification with Graph Convolutional Networks,代码在Github链接.


以往的进展

  1. Spectral Graph theory,即将傅里叶变换扩展到图的谱域
  2. Deep learning on Graphs:
    2.1 Laplacian regurlarization in loss function
    2.2 Graph Embedding: Node2Vec, LINE
    2.3 Graph Autoencoders: SDNE
    2.4 Graph Spectral,即图上进行谱分析,进行卷积

解决的科学问题是什么

难以通过CNN在图上定义与图像上始终全局可以使用的局部卷积核。

解决问题的思路是什么?GCN给出了直观的解释

H ( l + 1 ) = σ ( D ^ − 1 2 A ^ D ^ − 1 2 H ( l ) W ( l ) ) H^{(l+1)}=σ(\hat{D}^{-\frac{1}{2}}\hat{A}\hat{D}^{{-\frac{1}{2}}}H^{(l)}W^{(l)}) H(l+1)=σ(D^21A^D^21H(l)W(l))

  1. 对邻居节点的信息进行聚合: H ( l + 1 ) = A H l H^{(l+1)}=AH^{l} H(l+1)=AHl但是由于自身向量为0,未能将自己的权重进行相加
  2. 对邻居和自己加权求和: H ( l + 1 ) = A ^ H l H^{(l+1)}=\hat{A}H^{l} H(l+1)=A^Hl A ^ = A + I \hat{A}=A+I A^=A+I因此通过添加单位矩阵将自己的元素特征也进行计算
  3. 加完之后做平均: H ( l + 1 ) = D ^ − 1 A ^ H ( l ) H^{(l+1)}=\hat{D}^{-1}\hat{A}H^{(l)} H(l+1)=D^1A^H(l)
  4. 感觉太简单,加个track: H ( l + 1 ) = D ^ − 1 2 A ^ D ^ − 1 2 H ( l ) H^{(l+1)}=\hat{D}^{-\frac{1}{2}}\hat{A}\hat{D}^{{-\frac{1}{2}}}H^{(l)} H(l+1)=D^21A^D^21H(l)
  5. DNN的权重矩阵也要: H ( l + 1 ) = D ^ − 1 2 A ^ D ^ − 1 2 H ( l ) W ( l ) H^{(l+1)}=\hat{D}^{-\frac{1}{2}}\hat{A}\hat{D}^{{-\frac{1}{2}}}H^{(l)}W^{(l)} H(l+1)=D^21A^D^21H(l)W(l)
  6. 还得再来个激活函数: H ( l + 1 ) = σ ( D ^ − 1 2 A ^ D ^ − 1 2 H ( l ) W ( l ) ) H^{(l+1)}=σ(\hat{D}^{-\frac{1}{2}}\hat{A}\hat{D}^{{-\frac{1}{2}}}H^{(l)}W^{(l)}) H(l+1)=σ(D^21A^D^21H(l)W(l))
    注: D D D表示,每个节点的度(Degree), D D D是对角度矩阵。 D − 1 D^{-1} D1表示将对角线的值取倒数, D − 1 2 D^{-\frac{1}{2}} D21表示在 D − 1 D^{-1} D1开根号。

GCN卷积公式的数学推导

在这里插入图片描述
卷积傅里叶变换的关系:两个函数的卷积可以用他们的傅里叶逆变换表示: ( f ∗ h ) ( x ) = 1 2 π ∫ f ^ ( λ ) h ^ ( λ ) e i λ x d λ (f*h)(x)=\frac{1}{2\pi}\int\hat{f}(λ)\hat{h}(λ)e^{iλx}dλ (fh)(x)=2π1f^(λ)h^(λ)eiλxdλ 改变定义域:时间轴 → → 二维网格,那么图片可以看作是网格上的信号。一张图片: f f f,一个卷积核: h h hCNN中的卷积操作== f f f h h h的傅里叶变换操作
*计算卷积时,可以不用显式定义卷积核!
在这里插入图片描述
在这里插入图片描述
Graph上的傅里叶变换:如何确定变换的基(base)函数,通过时域上的傅里叶变换 e − i λ t e^{-iλt} eiλt
在这里插入图片描述
在GCN中的拉普拉斯算子是拉普拉斯矩阵L,以图的特征向量作为基,类比傅里叶变换中的基函数 e − i λ t e^{-iλt} eiλt
在这里插入图片描述
U U U特征向量组成的矩阵

在这里插入图片描述

实验

模型公式

Z = f ( X , A ) = s o f t m a x ( A ^ ⋅ R e L u ( A ^ X W ( 0 ) ) W ( 1 ) ) Z=f(X,A)=softmax(\hat{A}·ReLu(\hat{A}XW^{(0)})W^{(1)}) Z=f(X,A)=softmax(A^ReLu(A^XW(0))W(1))

W 权 重 矩 阵 、 A 邻 接 矩 阵 、 X 输 入 特 征 矩 阵 W权重矩阵、A邻接矩阵、X输入特征矩阵 WAX

模型框架

在这里插入图片描述

模型数据集

在这里插入图片描述
前三个数据集Citeseer、Cora、Pubmed都是论文引用的数据集,为了体现半监督,前三个数据集每个类只选用20个labels,通过loss只在Cora优化超参数;NELL中每类一个节点为label。

### 图神经网络 (GNN) 学习资源 对于希望深入了解图神经网络(Graph Neural Networks, GNNs)的学习者来说,有多种高质量的教程、论文和技术博客可以作为参考资料。 #### 论文阅读 一些重要的研究工作奠定了现代GNN的基础。例如,《DeepWalk: Online Learning of Social Representations》探讨了如何通过随机游走的方式捕捉社交网络中的节点特征[^1];《node2vec: Scalable Feature Learning for Networks》则进一步扩展了这一思路,提出了更灵活的方法来生成节点嵌入表示;而《Semi-Supervised Classification with Graph Convolutional Networks》引入了一种基于卷积操作处理图形数据的新框架——GCN(Graph Convolutional Network),它能够有效地利用未标记的数据进行半监督分类任务。 #### 教程视频 除了学术文章外,在线教育平台也提供了许多易于理解的教学材料。比如B站上有一个名为“GNN从入门到精通”的系列课程,该课程由浅入深地讲解了有关GNN的知识点,并配有实际案例分析和编程练习[^3]。 #### 技术文档与笔记整理 为了帮助初学者更好地掌握理论概念并应用于实践当中,“【GNN】图神经网络学习小结and笔记汇总”这份总结性的资料非常有价值。这里不仅包含了对核心算法原理详尽解释的文字描述,还有配套代码实现供读者参考学习[^2]。 ```python import torch from torch_geometric.nn import GCNConv class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = GCNConv(dataset.num_node_features, 16) self.conv2 = GCNConv(16, dataset.num_classes) def forward(self, data): x, edge_index = data.x, data.edge_index x = self.conv1(x, edge_index) x = F.relu(x) x = F.dropout(x, training=self.training) x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1) ``` 上述Python代码片段展示了如何使用PyTorch Geometric库构建简单的两层GCN模型来进行节点分类预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值