ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

在 DGL 中实现并训练 APPNP:Predict then Propagate 图神经网络实战指南

在 DGL 中实现并训练 APPNP:Predict then Propagate 图神经网络实战指南 人工智能机器学习深度学习图计算【免费下载链接】dglPython package built to ease deep learning on graph, on top of existing DL frameworks.项目地址https://gitcode.com/gh_mirrors/dg/dgl点击查看免费下载本文以 examples/pytorch/appnp 目录下的官方示例为主线系统讲解如何在 DGLDeep Graph Library中复现 APPNPApproximate Personalized Propagation of Neural Predictions即先预测、再传播的图神经网络见论文Predict then Propagate: Graph Neural Networks meet Personalized PageRank模型并在 Cora、Citeseer、PubMed 三个经典引文网络上完成节点分类训练与评估。读完本文你将掌握 APPNP 的核心原理、DGL 内置APPNPConv的底层实现、train.py训练脚本的全部超参数语义以及如何复现示例 README 中给出的精度结果。APPNP 方法回顾为什么是先预测、再传播传统 GCN 将特征变换神经网络层与邻域聚合消息传递交替堆叠层的数量越多感受野越大但也越容易出现过平滑over-smoothing与过拟合。APPNP 提出一种解耦策略即Predict-then-Propagate预测阶段Predict先用一个不含图信息的 MLP多层感知机对每个节点独立计算类别预测分布传播阶段Propagate再借助 Personalized PageRankPPR的近似迭代式将预测结果沿图结构传播。从源码看DGL 的APPNPConv定义于 python/dgl/nn/pytorch/conv/appnpconv.py精确实现了论文中的迭代公式H^0 X H^(l1) (1 - α) · (D̃^(-1/2) · Ã · D̃^(-1/2) · H^l) α · H^0其中Ã A I为加入自环后的邻接矩阵D̃为对应的度矩阵α是 teleport传送概率K是迭代次数。每次迭代都保留一份初始预测H^0的α比例从而让信息在有限步数内逼近全图个性化 PageRank 的稳态分布即便K很大也不会出现过平滑。环境依赖与安装示例 README 明确了运行本示例所需的最小依赖PyTorch 0.4.1requests用于数据集下载安装命令pip install torch requests需要说明的是PyTorch 0.4.1 是示例编写时声明的最低版本当前仓库的 DGL 版本建议配合与其适配的较新 PyTorch 使用。另外运行示例前还需确保 DGL 本身已正确安装因为示例代码依赖dgl.data、dgl.nn.pytorch.conv.APPNPConv等模块。示例代码结构examples/pytorch/appnp目录下包含三个文件文件作用appnp.pyAPPNP 模型定义MLP 预测层 APPNPConv传播层train.py训练入口数据加载、预处理、训练循环、评估README.md依赖说明、运行命令与复现结果模型实现剖析appnp.pyappnp.py 中定义的APPNP类直接复用 DGL 官方卷积层dgl.nn.pytorch.conv.APPNPConv整体结构清晰MLP 部分由nn.ModuleList顺序存放若干nn.Linear全连接层包括输入层nn.Linear(in_feats, hiddens[0])、若干隐藏层以及输出层nn.Linear(hiddens[-1], n_classes)隐藏层数量与宽度由hiddens列表决定特征丢弃feat_drop为 0 时退化为恒等映射lambda x: x否则使用nn.Dropout传播部分self.propagate APPNPConv(k, alpha, edge_drop)即一次构造好K步 PPR 近似传播层。前向过程严格遵循 Predict-then-Propagatedef forward(self, features): # prediction step h features h self.feat_drop(h) h self.activation(self.layers0) for layer in self.layers[1:-1]: h self.activation(layer(h)) h self.layers-1) # propagation step h self.propagate(self.g, h) return h注意一个细节输入层、隐藏层激活后不丢弃但输出层前会再施加一次feat_drop这是论文中对最后一层 MLP 输入进行 dropout的常见做法。APPNPConv 底层实现APPNPConv的完整定义位于 python/dgl/nn/pytorch/conv/appnpconv.py其构造参数为k迭代次数K默认 10alpha传送概率α默认 0.1edge_drop传播过程中的边丢弃率默认 0不丢弃。前向过程在graph.local_scope()中执行K次迭代的核心步骤为若未提供edge_weight则按out_degrees^(-0.5)与in_degrees^(-0.5)计算对称归一化系数对应公式中的D̃^(-1/2) Ã D̃^(-1/2)将当前特征写入graph.ndata[h]通过fn.u_mul_e(h, w, m)与fn.sum(m, h)完成一次update_all消息传递聚合施加目的端归一化后按feat (1 - alpha) * feat alpha * feat_0融合初始特征完成一步 PPR 近似。该层还支持可选的edge_weight参数即加权邻接矩阵场景此时归一化由EdgeWeightNorm完成PyTorch 后端测试 tests/python/pytorch/nn/test_nn.py 中的test_appnp_conv与test_appnp_conv_e_weight分别覆盖了无权重与带权重两种路径并验证了输出特征维度与输入一致。MXNet、TensorFlow 后端也有对应的APPNPConv实现可在 python/dgl/nn/mxnet/conv/appnpconv.py 与 python/dgl/nn/tensorflow/conv/appnpconv.py 中查看。训练脚本详解train.pytrain.py 承担数据加载、图预处理、训练与评估的完整流程其工作步骤为加载数据集通过--dataset参数选择cora/citeseer/pubmed分别实例化CoraGraphDataset、CiteseerGraphDataset、PubmedGraphDataset均继承自 python/dgl/data/citation_graph.py 中的CitationGraphDataset读取图数据从g.ndata中取出feat特征、label标签以及train_mask/val_mask/test_mask划分掩码并打印边数、类别数与各划分样本数统计图预处理g dgl.remove_self_loop(g)后再g dgl.add_self_loop(g)保证邻接矩阵Ã A I与APPNPConv公式一致构建模型与优化器使用CrossEntropyLoss与 Adamlr1e-2weight_decay5e-4训练循环迭代n_epochs默认 200次前 3 个 epoch 不计时之后每轮输出耗时、损失、验证集精度与吞吐ETputs(KTEPS)每秒千条边数最终评估训练结束后在测试集上输出Test Accuracy。命令行参数一览参数类型默认值说明--datasetstr必填由register_data_args注入数据集名称cora / citeseer / pubmed--in-dropfloat0.5输入特征 dropout 概率--edge-dropfloat0.5传播阶段边丢弃概率--gpuint-1GPU 编号-1 表示使用 CPU--lrfloat1e-2学习率--n-epochsint200训练轮数--hidden_sizesint可多个[64]MLP 隐藏层宽度如--hidden_sizes 64 32--kint10PPR 近似传播步数--alphafloat0.1传送概率--weight-decayfloat5e-4L2 正则权重其中--dataset参数由 DGL 数据模块的register_data_args注入见 python/dgl/data/init.py其文档注明可支持 cora、citeseer、pubmed、syn 或 reddit但本示例的main()中只实现了前三种数据集的分支其余取值会抛出ValueError(Unknown dataset)使用时需注意。数据集统计信息三类引文网络数据集均以节点为论文、边为引用关系、任务为论文主题分类的形式组织节点特征已做行归一化。以 CoraGraphDataset 为例节点数2708边数10556类别数7划分训练 140、验证 500、测试 1000。Citeseer 与 Pubmed 具有类似结构与划分训练脚本启动时会自动打印当前数据集的边数、类别数与各划分样本数可直接核对。运行与结果复现在examples/pytorch/appnp目录下执行python3 train.py --dataset cora --gpu 0即可在 GPU 0 上训练 Cora 数据集无 GPU 时使用--gpu -1。将--dataset替换为citeseer或pubmed即可切换数据集。README 中给出的复现结果如下数据集DGL 示例精度论文报告精度cora0.83700.850citeseer0.7150.757pubmed0.7930.797README 特别说明该结果是在DGL 数据集GCN 设置上实验得到的与原作者实现所用的数据划分方式不同具体差异可参见原论文的实验章节。这意味着直接对比两列数字时需注意其评价协议并不完全一致——例如 DGL 引文数据集的 train/val/test 划分规模如 Cora 仅 140 个训练样本与部分论文实现使用的半监督划分不同精度存在小幅差距属于正常现象不应视为模型实现的缺陷。调参建议与进阶扩展--alpha与--k的配合α越大每次迭代保留的初始预测比例越高信息传播范围越短K越大传播越充分。示例默认alpha0.1, k10是论文与多数实验的经验值。若将alpha调大可相应减小K反之亦然。--edge-drop的作用它作用于传播阶段的消息通过nn.Dropout随机屏蔽边权重见APPNPConv中graph.edata[w] self.edge_drop(w)一行起到类似 DropEdge 的正则化效果对深度传播尤其重要。更深的 MLP通过--hidden_sizes传入多个值如--hidden_sizes 64 32可扩展预测网络的深度与容量验证更深的预测器 固定的浅传播组合的效果。加权图APPNPConv支持edge_weight参数在需要处理带权邻接矩阵或自定义归一化的场景中可直接传入DGL 测试用例 tests/python/pytorch/nn/test_nn.py 中test_appnp_conv_e_weight给出了最小可运行示例。总体而言本示例以极简的代码量完整呈现了 APPNP 的先预测、后传播范式预测网络是可任意加深的 MLP传播层则由 DGL 内置APPNPConv以K次对称归一化消息传递实现二者解耦正是该模型在深层网络下仍能保持鲁棒性的关键。若需进一步探索可从 python/dgl/nn/pytorch/conv/appnpconv.py 的迭代实现与 python/dgl/data/citation_graph.py 的数据集定义入手阅读。赞分享人工智能机器学习深度学习图计算【免费下载链接】dglPython package built to ease deep learning on graph, on top of existing DL frameworks.项目地址https://gitcode.com/gh_mirrors/dg/dgl点击查看免费下载相关推荐DGL 实现 GNNExplainer从训练到可视化的图神经网络可解释性实战指南DGL 实现 GNNExplainer从训练到可视化的图神经网络可解释性实战指南 GNNExplainerGenerating Explanations f人工智能机器学习深度学习图计算DGL 中的 APPNPPersonalized PageRank 图神经网络MXNet 实现与实战指南DGL 中的 APPNPPersonalized PageRank 图神经网络MXNet 实现与实战指南 导读 APPNPApproximate Pers人工智能机器学习深度学习图计算DGL 图神经网络训练实战指南从节点分类到图分类的五类任务完整实现DGL 图神经网络训练实战指南从节点分类到图分类的五类任务完整实现 导读 本文基于 DGL 官方用户指南第五章节Chapter 5: Training Gr人工智能机器学习深度学习图计算创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表