GCN原论文阅读笔记

《SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS》阅读笔记

本文记录GCN原经典论文的阅读笔记
论文链接:GCN原论文

摘要

论文提出了一种可扩展的方法,用于在图结构数据上进行半监督学习,该方法基于一种直接在图上操作的卷积神经网络的有效变体。论文通过对谱图卷积的局部一阶近似来形成卷积框架

1.Introduction

论文的贡献:

首先,为直接操作图这种非欧式数据的神经网络模型引入了一种简单且性能良好的分层传播规则,并展示了如何从谱图卷积的一阶近似中来激发它

其次,演示了这种形式的基于图的神经网络模型如何用于快速和可扩展的图中节点的半监督分类

2.论文公式梳理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.半监督节点分类

论文考虑在具有对称邻接矩阵A(二元或加权)的图上使用两层GCN来进行半监督节点分类,在预训练步骤先计算(注意叠加多层时,该值是不变的,可理解为共享):
A ^ = D ~ − 1 2 A ~ D ~ − 1 2 \begin{equation} \hat{A}=\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} \end{equation} A^=D~21A~D~21
模型表示为:
Z = f ( X , A ) = softmax ⁡ ( A ^ ReLU ⁡ ( A ^ X W ( 0 ) ) W ( 1 ) ) \begin{equation} Z=f(X, A)=\operatorname{softmax}\left(\hat{A} \operatorname{ReLU}\left(\hat{A} X W^{(0)}\right) W^{(1)}\right) \end{equation} Z=f(X,A)=softmax(A^ReLU(A^XW(0))W(1))
上述公式中:W0(C * H)为输入层到隐藏层的参数矩阵,C为输入通道数(即每个节点的特征向量维度),有H个feature maps,W1(H * F)为隐藏层到输出层的参数矩阵,其中F可理解为类别个数,这两个W都是模型需要进行学习的。卷积结果为Z(N * F)

两层GCN模型图示:

在这里插入图片描述

训练模型的损失函数:

以row-wise(按行)进行Softmax,softmax(xi) = 1/z * exp(xi),exp(xi)可理解为某个类别的logits,z是所有类别的logits,那么损失函数可以表达为:
L = − ∑ l ∈ Y L ∑ f = 1 F Y l f ln ⁡ Z l f \begin{equation} \mathcal{L}=-\sum_{l \in \mathcal{Y}_{L}} \sum_{f=1}^{F} Y_{l f} \ln Z_{l f} \end{equation} L=lYLf=1FYlflnZlf
其实就是多分类上的交叉熵,yL为带标签的节点集合,l表示卷积的隐藏层个数

4.实验

论文采用以下实验来测试所提出的模型:引文网络中的半监督文档分类、从知识图谱中提取的二部图中的半监督实体分类、各种图传播模型的评估和随机图的运行时效分析

4.1 数据集

在这里插入图片描述

上表中展示了每个数据集的节点数量、边的数量、类别数、特征维度、带标签节点占比

**Citation networks:**该类型共有三个数据集:Citeseer、Cora、Pubmed。数据集包含每个文档的稀疏词袋特征向量和文档之间的引用链接列表。将每篇文档视为节点,文档间的引用链接视为无向边,其中每篇文档都有类的标签。对于训练,每一个类只使用20个标签,但使用所有的特征向量

**NELL:**NELL是从引入的知识图谱中提取的数据集。知识图谱由一组实体,用有向的、有标记的边(关系)连接起来。实体节点用稀疏特征向量描述:通过为每个关系节点分配一个唯一的 one-hot 表示来扩展NELL中的特征数量,有效地得到每个节点61278-dim的稀疏特征向量。这里的半监督任务考虑的是训练集中每个类只有一个标记示例的极端情况。

**Random Graphs:**论文中通过模拟各种大小的随机图数据集,用于测量每个epoch的训练时间。对于具有N个节点的数据集,我们创建一个随机图,均匀随机分配2N条边。我们将单位矩阵IN作为输入特征矩阵X,从而隐式地采用一种无特征的方法,其中模型只被告知每个节点的标识,由唯一的one-hot向量指定,并且为每个节点添加虚拟标签Yi = 1。

4.2 实验设置
  • 按照上述训练一个两层GCN,并在1000个标记示例的测试集上评估预测精度
  • 对于引文网络数据集,只在Cora上优化超参数,并在Citeseer和Pubmed上使用相同的参数集
  • 使用Adam 优化器对所有模型进行最多200个epoch(训练迭代)的训练,学习率为0.01
  • 采用窗口大小为10来设置早停,并且如果验证损失连续10个epoch都没有减少,就停止训练
  • 使用Glorot & Bengio(2010)中提出的初始化方法来初始化权重,并相应地(row-)归一化输入特征向量
  • 在随机图数据集上,使用了32个单位的隐藏层,省略了正则化(即既没有dropout也没有L2正则化)
4.3 Baseline

分别比较了ManiReg、SemiEmb、LP、DeepWalk、ICA、Planetoid这些方法。这些方法在这四个数据集上的结果是直接从Planetoid这篇论文中搬过来的(该篇论文中,Planetoid是在各个数据集上表现最好的模型)

  • 论文首先使用所有带标签的训练集节点来训练一个local分类器,然后用它来引导未带标签节点的类标签来进行相关的分类器训练。
  • 论文通过对所有未标记节点(使用local分类器引导)进行10次随机节点排序来运行迭代分类
  • 根据每个数据集的验证集性能来选择L2正则化参数和聚合运算符

5. 结果

5.1 SEMI-SUPERVISED NODE CLASSIFICATION

在这里插入图片描述

ManiReg、SemiEmb、LP、DeepWalk、ICA的结果是直接从Planetoid这篇论文中搬过来的( (Yang et al., 2016))

  • 论文结果中还统计了GCN和Planetoid的训练时间
  • 论文与(Yang et al., 2016)在相同的数据集分割上训练和测试了模型,记录的是100次随机权重初始化运行的平均精度
  • 此外,论文还记录了GCN模型在10个进行随机分割的数据集上的性能,这些数据集的大小与(Yang et al., 2016)相同
5.2 EVALUATION OF PROPAGATION MODEL

论文还比较了文中提出模型的不同变体在citation network数据集上的精度(用随机权重矩阵初始化的100次重复运行的平均分类精度)

在这里插入图片描述

其中Θ表示卷积参数矩阵,在每层有多个变量Θi的情况下,则对第一层的所有权重矩阵施加L2正则化

5.3 TRAINING TIME PER EPOCH

论文还记录了随机图上100个epoch的每个epoch平均训练时间

在这里插入图片描述

5.4 EXPERIMENTS ON MODEL DEPTH

在这里插入图片描述

标记表示5倍交叉验证的平均分类精度(训练vs.测试)。阴影区域表示标准误差。论文展示了标准GCN模型(虚线)和隐藏层(实线)之间添加残差连接的模型的结果。

结论:对于论文中使用的数据集,最好的结果是用2层或3层的模型。此外,随着模型深度的增加,过拟合也可能成为一个问题。

6.总结

论文提出了一种针对图结构数据的半监督分类的新方法。文中提出的GCN模型使用了一种高效的分层传播规则,该规则基于图上谱卷积的一阶近似。在大量网络数据集上的实验表明,论文所提出的GCN模型能够以一种对半监督分类有用的方式对图结构和节点特征进行编码。在这种情况下,该模型在计算效率高的同时,显著优于最近提出的几种方法。
CN模型使用了一种高效的分层传播规则,该规则基于图上谱卷积的一阶近似。在大量网络数据集上的实验表明,论文所提出的GCN模型能够以一种对半监督分类有用的方式对图结构和节点特征进行编码。在这种情况下,该模型在计算效率高的同时,显著优于最近提出的几种方法。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GCN(Graph Convolutional Network)是一种用于图数据的深度学习模型,它可以对节点和边进行特征学习和预测。GCN在图神经网络领域具有重要的应用价值。 GCN的PyTorch实现可以使用PyTorch Geometric库来实现。PyTorch Geometric是一个专门用于处理图数据的PyTorch扩展库,提供了一系列用于构建和训练图神经网络的工具和函数。 在PyTorch Geometric中,可以使用torch_geometric.nn模块中的GCNConv类来定义GCN层。GCNConv类实现了GCN的前向传播过程,可以根据输入的节点特征和图结构进行特征学习和传播。 以下是一个简单的GCN模型的示例代码: ```python import torch import torch.nn as nn from torch_geometric.nn import GCNConv class GCN(nn.Module): def __init__(self, num_features, num_classes): super(GCN, self).__init__() self.conv1 = GCNConv(num_features, 16) self.conv2 = GCNConv(16, num_classes) def forward(self, x, edge_index): x = self.conv1(x, edge_index) x = torch.relu(x) x = self.conv2(x, edge_index) return x # 构建模型 model = GCN(num_features, num_classes) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.01) # 训练模型 for epoch in range(num_epochs): # 前向传播 output = model(x, edge_index) loss = criterion(output, y) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() ``` 在上述代码中,GCN类定义了一个简单的两层GCN模型,输入节点特征的维度为num_features,输出类别的数量为num_classes。模型的前向传播过程中使用了两个GCNConv层,并通过ReLU激活函数进行非线性变换。训练过程中使用交叉熵损失函数和Adam优化器进行模型的优化。 希望以上内容对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值