# 论文 vs 代码一致性核查:ScaleGNN ## 核查对象与方法 - 论文:arXiv:2504.15920v1(2025-04-22 提交),实际标题为 *ScaleGNN: Towards Scalable Graph Neural Networks via Adaptive High-order Neighboring Feature **Fusion***(注意:任务书中的 "Propagation" 为转述误差,arXiv 官方标题与 README 均为 "Fusion")。作者:Xiang Li, Haobing Liu, Jianpeng Qi, Yanwei Yu, Yuan Cao, Guoqing Chao。 - 仓库:https://github.com/lx970414/ScaleGNN(浅克隆至 `workdir/p10-scalegnn`,唯一可见 commit `4825c7e`,2026-06-11)。 - 方法: - `git clone --depth 1 https://github.com/lx970414/ScaleGNN.git "…/workdir/p10-scalegnn"` - `curl -sL https://arxiv.org/pdf/2504.15920 -o /tmp/p10.pdf`(另抓取 HTML 版转纯文本 `/tmp/p10.txt` 提取公式与表格) - 通读全部 20 个代码文件(model.py / precomputed_model.py / precompute.py / train.py / main.py / dataloader.py / ogb_precompute_train.py / papers100m_memmap_train.py / papers100m_prepare_hops.py / run_paper_experiments.py / postprocess.py / logger.py / utils.py 及 8 个 YAML 配置) - `python3 -m py_compile *.py` 静态语法检查 - GitHub API(curl)核实用户、仓库元数据与提交历史;arXiv abs 页面核查是否链接该仓库 ## 论文关键声明清单 1. **自适应高阶特征融合**(4.1 节):纯 i 阶邻接矩阵 `A_i = A^i − A^(i−1)`(Eq.1);可学习权重 α(softmax,和为 1)融合 `à = Σ α_i A_i`(Eq.2);`H = σ(÷X·W)`(Eq.3)。基础版模型记为 **ScaleGNN_b**。 2. **低阶增强特征聚合**(4.2 节):`H_low = σ(A·X·W_low)`、`H_high = σ(÷X·W_high)`(Eq.4),可学习 β 融合 `H = β·H_low + (1−β)·H_high`(Eq.5)。 3. **高阶冗余特征掩码**(4.3 节):Local Contribution Score `LCS(v,u,k) = α_k·(A_k)_vu·(x_vᵀx_u)/√(d_v·d_u)`(Eq.6),按 LCS 对每节点取 Top-K 邻居(Eq.7)。 4. **优化目标**(4.4 节):`L = L_task + λ1·L_LCS + λ2·L_mask`(Eq.8–11),其中 L_LCS 为被选邻居的 (1−LCS)² 和,L_mask 为过滤后高阶邻接矩阵的 ℓ1 范数。 5. **数据集**:Citeseer / Cora / Pubmed / ogbn-arxiv / ogbn-products / ogbn-papers100M,节点分类任务(Table 2 划分:120/500/1000、140/500/1000、60/500/1000)。 6. **评测指标与数字**(Table 3,Mi-F1/Ma-F1):ScaleGNN 在 Cora 84.53/84.01、Citeseer 74.22/73.61、Pubmed 81.95/80.50、ogbn-arxiv 73.02/64.08、ogbn-products 81.64/72.33、ogbn-papers100M 65.53/57.29;ScaleGNN_b 相应为 83.60/82.41、73.11/72.59、80.54/79.24、71.95/63.23、80.78/71.34、64.95/56.51。 7. **效率**(5.3 节):ogbn-papers100M 上 ScaleGNN_b 总运行时间 4110.2s,对比 S2GC 19914.4s、GBP 35706.1s、GAMLP 35656.6s、RpHGNN 10399.8s;在 ogbn-arxiv/products 上较最优基线快 4.1×–6.7×。 8. **过平滑**(5.4 节):ScaleGNN 在 30 层深度下仍保持高 Mi-F1,优于 S2GC/GBP/GAMLP/RpHGNN。 9. **消融**(5.5 节):w/o Ada(改用 S2GC)、w/o Low、w/o Mask 三变体;ogbn-arxiv 上 w/o Ada 71.25、w/o Low 72.07、w/o Mask 71.49 vs 完整 73.02(Mi-F1)。 10. **超参敏感性**(5.7 节):β 在 0.1–0.9 网格扫描、峰值 0.5;λ1、λ2 ∈ {0.0005, 0.001, 0.005, 0.01, 0.05, 0.1},λ1 最优 0.005/0.01、λ2 最优 0.01。 11. **实现细节**(5.1.3 节):小数据集 100 epochs、dropout∈{0.1,…,0.6}、weight decay∈{1e-5,1e-4,1e-3}、lr∈{0.001,0.005,0.01,0.05,0.1};大数据集 1000 epochs、lr=0.001、无 weight decay;hidden dim∈{32,…,512};用 GCN 作为消息聚合器。 ## 证据对照表(声明 | 代码证据(文件:行号) | 判定) | 声明 | 代码证据(文件:行号) | 判定 | |---|---|---| | Eq.(1) 纯 i 阶邻接 A_i = A^i − A^(i−1) | 在线路径:`model.py:334-353` `_sparse_powers` 计算 A^1…A^K(加自环+对称归一化,`model.py:300-332`);`model.py:371-390` `_pure_hop_edges` 用集合差(`torch.isin` 去重)提取"仅首次出现在 i 阶"的边。预计算路径:`precompute.py:57-90`、`ogb_precompute_train.py:61-73` 中 `pure[k] = A^(k+1)X − A^kX`(特征域数值差,`precompute.py:88 current - prev`) | 基本一致(思路一致;集合差实现非严格的矩阵数值差,属工程近似) | | Eq.(2) α 可学习、softmax、和=1 | `model.py:277-280` `_alpha = softmax(alpha_raw)`;`precomputed_model.py:47,85-91`(softmax/sparsemax);按阶加权求和 `model.py:212-213`、`precomputed_model.py:107-108` | 一致 | | Eq.(3) H = σ(÷X·W) | `model.py:167-170`(投影+ReLU+BN)、`model.py:210-214`(各阶 spmm 聚合后 α 融合,再 `high_linear`+ReLU)。变换与聚合顺序为 A·(X·W),与 ÷X·W 等价 | 一致(等价变形) | | Eq.(4)(5) 低/高阶分离 + β 融合 | `model.py:219-227`(low_power 聚合→`low_linear`,`fused = beta*low_out + (1-beta)*high_out`);β 可学习 `model.py:287-290`(sigmoid(beta_logit));`precomputed_model.py:117-124` 同;beta_init 见各 config | 一致 | | Eq.(6)(7) LCS 掩码 + Top-K | `model.py:414-460` `_lcs_soft_hard_mask`:score = (q·k)/√d(可学习线性变换后的点积,`model.py:427-430`)、per-node softmax、按可学习 mk 取 top-k(`model.py:435-450`) | 部分一致:保留"局部贡献分数+Top-K 掩码"思想;但 (i) 用 lcs_q/lcs_k 变换特征而非原始 x_vᵀx_u;(ii) 无 √(d_v·d_u) 度归一化;(iii) 无 α_k 乘项;(iv) Top-K 数量 mk 为可学习参数(`model.py:282-285`)而非固定超参;(v) 增加 soft-to-hard 直通门 | | Eq.(8) 交叉熵主损失 | `train.py:32` F.cross_entropy;`ogb_precompute_train.py:196-200` | 一致 | | Eq.(9) L_LCS = Σ(1−LCS)² | `train.py:34-41`(`lambda_lcs * mean((1-score)²)`,mean 而非 sum);但所有推荐 config 中 `lambda_lcs: 0.0`(如 `config_cora.yaml` loss 节) | 部分一致(项存在但默认关闭) | | Eq.(10) L_mask = Σ‖Ã_k‖₁ | 无 ℓ1 掩码范数实现;`train.py:43-49` 仅有 `lambda_sc`(mk/max_k 比例)与 `lambda_mk`(mk 均值)两个替代正则 | 不一致(论文 ℓ1 掩码约束无对应实现) | | Eq.(11) L = L_task+λ1·L_LCS+λ2·L_mask | `train.py:16-72` compute_loss 聚合多种正则(另有论文未提及的 `lambda_scale_ce`/`lambda_alpha_entropy`/`lambda_alpha_prior`,`train.py:51-70`) | 部分一致(结构类似、项集不同) | | 6 个数据集(3 小 + 3 OGB) | `dataloader.py:15-30`(Planetoid Cora/CiteSeer/PubMed)、`dataloader.py:33-53`(PygNodePropPredDataset ogbn-*);config 齐全(config_cora/citeseer/pubmed/arxiv/products/papers100m*.yaml);划分 140/500/1000、120/500/1000、60/500/1000 与 Planetoid 默认一致 | 一致 | | 指标 Mi-F1/Ma-F1(Table 3 数字) | 代码只算 accuracy:`train.py:161-164`(evaluator `["acc"]` 或 argmax 平均)、`ogb_precompute_train.py:109-117`;config 中 `eval_metric: acc`;main.py 打印 Test Acc。无任何 F1 计算代码 | 不一致(论文报告的 Mi-F1/Ma-F1 数字无法由该代码产出,无法对照) | | 效率数字(4110.2s、4.1–6.7× 等) | 代码仅打印运行时间(`ogb_precompute_train.py:281-285`),仓库无结果文件、无基准脚本 | 无法验证 | | 30 层过平滑实验 | `run_paper_experiments.py:62-81` `hop_sweep` 可生成不同 `num_layers`/`low_pass_hop` 配置(如 `config_products_selective_high.yaml` num_layers=20);无结果数据 | 实验框架存在,结果无法验证 | | 消融 w/o Ada / w/o Low / w/o Mask | `model.py:89,105-113,119-122,197,216,224` ablation 开关:`no_lcs`(≈w/o Mask)、`only_high_order`(≈w/o Low)、`no_fusion`、`fix_alpha/fix_mk/fix_beta`;"w/o Ada(改用 S2GC)"无对应实现 | 部分一致(w/o Low、w/o Mask 有对应开关;w/o Ada 无) | | β∈0.1–0.9 网格敏感性 | `run_paper_experiments.py:84-96` `beta_sweep`(仅改 beta_init,β 仍可学习) | 部分一致(有 sweep 脚本,但与论文"固定 β"略有差异) | | λ1/λ2 网格敏感性 | 无 λ1/λ2 sweep 脚本;`run_paper_experiments.py` 仅 hop_sweep/beta_sweep | 不一致(无对应实验脚本) | | 实现细节:小图 100 epochs、大数据 1000 epochs、lr=0.001 | `config_cora.yaml` epochs=300、`config_citeseer.yaml` 300、`config_pubmed.yaml` 200;`config_arxiv.yaml` epochs=100、`config_products.yaml` 80(论文称大数据 1000);lr 0.01/0.01/0.005/0.001/0.0015;weight_decay=5e-4(不在论文 {1e-5,1e-4,1e-3} 内);citeseer dropout=0.7(超出论文 0.1–0.6) | 部分一致(超参网格与论文不符;且 config 默认 `train_on_val: true` 将验证集并入训练,论文未提及) | | GCN 作为消息聚合器 | 归一化+spmm 聚合(`model.py:300-332,400-412`);另含论文未描述的 `local_gcn` 双 GCNConv 分支(`model.py:96-103,241-245`,config_cora/citeseer 启用) | 部分一致(存在论文之外的附加组件) | | 端到端(非预计算)模型 | 小图走 `ScaleGNN`(model.py:35);OGB 大图推荐 config 走预计算路径 `ScaleGNNPrecomputed`(`ogb_precompute_train.py:149-164`,README:10 "mini-batch training on precomputed OGB features"),即 ScaleGNN_b 式;papers100M 走 `papers100m_memmap_train.py` 的 MLP+低通特征融合(`papers100m_memmap_train.py:62-110 LowPassHopFusionMLP`),无 LCS/β 分离 | 部分一致(README.md:5 自述"keeps the paper's core idea while using scalable engineering paths",明确非逐式复现) | | 论文未提及的组件 | `scale_confidence_gate`(model.py:235-238)、`self_residual`(model.py:229-231)、标签平滑后处理 C&S(postprocess.py:8-33,config_citeseer/pubmed/arxiv/products 启用)、`local_gcn`、`lambda_alpha_prior`(config_cora alpha_prior=[0.6,0.3,0.1]) | 论文外附加项(方向:实现比论文多) | ## 运行尝试记录 环境:macOS(无 GPU),本机无预装 PyTorch/PyG。在仓库内新建 venv(Python 3.13),安装 CPU 版 torch 2.14.1 + torch-geometric 2.8.1 + ogb 1.3.6 + PyYAML(requirements.txt 中 `torch==2.11.0+cu128` 为 CUDA 版,本机不可用,改用 CPU 版)。 1. **静态检查**:`python3 -m py_compile *.py` → 全部 20 个文件语法通过。 2. **合成图冒烟测试(precomputed 路径)**:300 节点随机图 + `precompute_pure_hop_features` + `ScaleGNNPrecomputed` 训练 5 epoch → 前向/反向正常,loss 1.44→1.31,α 从 [0.338,0.331,0.331] 演化,β 0.502→0.511(可学习)。验证了论文 Eq.(2)/Eq.(5) 核心机制(α softmax 融合、β 低/高阶融合)代码可运行。 3. **Cora 真实数据(precomputed 路径)**:PyG Planetoid 自动下载被网络策略拦截(github.com 连接失败),改用手工 `curl` 从 raw.githubusercontent.com 下载全部 8 个 planetoid raw 文件至 `data/Planetoid/raw`,用 `read_planetoid_data` 加载。Cora n=2708、e=10556、划分 140/500/1000(与论文 Table 2 完全一致)。训练 5 epoch:loss 1.99→1.01,val acc 0.298→0.772,test acc 0.799;α 学习为 [0.345,0.331,0.323],β 0.488。**结论:仓库核心训练管线在真实数据上可运行、可收敛**。 4. **在线 ScaleGNN 路径(model.ScaleGNN,Eq.1/3/6/7 实现)**:依赖 `torch_sparse.SparseTensor`。PyG 官方 wheel 源无 macOS + cp313 的 torch-sparse 预编译 wheel,源码编译失败;改用 Python 3.12 venv(torch 2.9.0 CPU + torch-sparse 0.6.18 cp312 universal2 wheel)重试——见下。 5. **torch-sparse / 在线路径**:PyG 官方源无 macOS+cp313 wheel、源码编译失败;改用 Python 3.12 venv(torch 2.9.0 CPU + torch-sparse 0.6.18 + torch-scatter 的 macOS universal2 wheel)成功安装。随后 `model.ScaleGNN`(在线路径,含 `_sparse_powers`/`_pure_hop_edges`/`_lcs_soft_hard_mask`)在 Cora 上训练 3 epoch:loss 1.98→1.76,val acc 0.128→0.216;结构缓存正确(hop0/1/2 候选边 13264/86332/247250,LCS 掩码后保留 13264/15516/16927,mk 初始 [7,7,7] 符合 sigmoid(1.5)·(max_k−1)+1 的初始化);α 随训练演化。**在线与预计算两条路径均在真实数据上跑通、可收敛**。 6. **未运行的项**:ogbn-arxiv/products/papers100M(需 GPU/大数据集,本机不可行);论文效率数字与 Table 3 全部指标数字无法在 CPU 上复现核对。测试脚本留存于仓库根目录 `test_quick.py` / `test_cora.py` / `test_online.py` 供复核。 ## 官方性确认 1. **owner 与作者对应关系**:确认。GitHub 用户 `lx970414` 的学术主页 `https://lx970414.github.io/` 显示 "Xiang Li — Ph.D. student in SIGMA Lab, Faculty of Information Science and Engineering, Ocean University of China, supervised by Professor Yanwei Yu",与论文第一作者 Xiang Li(lixiang1202@stu.ouc.edu.cn,中国海洋大学,通讯作者 Yanwei Yu)完全吻合;主页 Publications 第一条即为 "ScaleGNN: Towards Scalable Graph Neural Networks via Adaptive High-order Neighboring Feature Fusion (WWW 2026)",作者列表与论文一致(主页版新增 Zhongying Zhao、Junyu Dong、Xinwang Liu,应为 WWW 2026 接收版作者)。 2. **README/代码是否引用论文或 arXiv ID**:README.md:3 引用论文完整标题;但全文与代码中**没有任何 arXiv:2504.15920 链接或 arXiv ID**。 3. **arXiv 页面是否链接该仓库**:否。arXiv abs 页面(https://arxiv.org/abs/2504.15920)与 HTML 全文均无任何 GitHub 链接(grep 无匹配)。即"arXiv 页面链接的仓库"这一前提不成立,仓库是作者自行托管。 4. **commit 时间**:仓库 created_at=2025-06-21(论文 v1 提交 2025-04-22 之后约 2 个月);当前唯一可见分支 main 仅 2 个 commit(2026-06-11 "Update README"、"Update",疑似 force-push 重写历史)。**commit 时间晚于论文,不满足"早于论文"**。 ## 结论 **部分一致**。核心机制(Eq.1–5:纯阶邻接构造、可学习 α 融合、低/高阶分离与 β 融合)在 `model.py` 与 `precomputed_model.py` 中有忠实实现,且在线与预计算两条路径均在真实 Cora 数据上运行收敛(见运行尝试记录);数据集覆盖与论文一致;仓库为作者本人(Xiang Li)官方仓库。但存在多项实质差异: 1. LCS 掩码(Eq.6–7)实现与论文公式不符(可学习变换点积、无度归一化、无 α_k 项、Top-K 数量可学习); 2. 论文损失中的 ℓ1 掩码约束 L_mask(Eq.10)无对应实现,L_LCS 默认关闭(lambda_lcs=0.0); 3. 评测指标不一致:代码只计算 accuracy,论文报告 Mi-F1/Ma-F1,论文 Table 3 数字无法由该代码产出/核对; 4. 训练超参与论文 5.1.3 节描述不符(epochs、weight_decay、dropout 网格均不同;train_on_val 合并验证集论文未提及); 5. 大图路径为预计算/MLP 工程变体(papers100M 无 LCS 与 β 分离),README 自述"保持核心思想、采用可扩展工程路径",非逐式复现; 6. 效率数字(4110.2s 等)、消融/深度实验数字无预存结果,无法验证。 ## 局限 - 论文 v1 仍为 ACM 模板占位状态("Conference: Make sure to enter…",DOI 为 XXXXX),无法核对 WWW 2026 接收版是否修改方法/数字;作者主页显示论文已被 WWW 2026 接收(2026.01),相机版作者列表与 v1 略有差异。 - 浅克隆仅得 2 个 commit,历史可能被重写,无法查看论文时期(2025 年)的代码版本;仓库创建于 2025-06-21,早于论文 v1 的代码快照不可得。 - 本地环境无 GPU、无预装 PyTorch/PyG;运行验证受限于依赖安装与数据集下载(详见运行尝试记录)。 - 论文 Table 3 大量基线数字(各 baseline 的 Mi-F1/Ma-F1)未逐一核对外部文献。