这周的第39周图神经网络热点论文,我照例花了一个晚上加一个早上的时间,把公开预印本平台上新挂出来的图神经网络相关文章扫了一遍。图神经网络(GNN)这个方向上新论文的产出速度一直很快,但热点的分布其实很集中,尤其是“图神经网络表情识别”这类把图结构与视觉分支结合起来的交叉方向,这周能明显感觉到投稿密度在增加。所以这篇文章不是给你列一篇论文流水账,而是把这一周的热点拆成几个方向,每个方向讲清楚它在解决什么问题、主流方法长什么样、复现时会遇到哪些坑。适合两类人看:一类是刚入坑图神经网络、想知道当前大家都在做什么的同学;另一类是已经跑过不少GNN基线、想找新选题或者新思路的工程师和学生。
1. 这周的图神经网络到底在卷什么
1.1 三个关键词概括本周风向
这周的投稿方向如果非要用三个词总结,我选“动态化”“大图化”“多模态化”。
动态化指的是越来越多的工作不再满足于静态图上的节点分类和链接预测,而是把时间维度直接拉进图结构里,去做连续时间上的演化建模。你去翻这周挂在网上的论文,十篇里至少有三四篇的标题里带“temporal”或者“dynamic”。原因很简单:现实里的图几乎都是动态的。交通流量图谱每一个时间片都在变,社交关系网络每周都有新增和删除的边,交易网络更是秒级在更新。静态GNN拿一张快照硬编码所有信息,本质上丢掉了图数据最值钱的那部分信息——演化规律。
大图化则是往工业级规模走。这周有多篇论文在讨论百亿边级别的图神经网络训练问题,核心还是老生常谈的可扩展性。但细看会发现,大家不再满足于朴素的邻居采样,而是开始研究采样策略的自适应性,比如让采样的邻居数量和结构重要程度挂钩。多模态化最明显。过去GNN的输入基本是结构特征和数值特征,这周看到好几篇工作把文本、图像甚至语音特征塞进图节点里,先在各自模态里做编码,再通过图传播做跨模态对齐。这个趋势和“图神经网络表情识别”这周的热度上升有直接关系——表情识别本质上就是一个视觉特征加结构关系的多模态建模问题。
1.2 我筛选热点论文的方法论
不少读者问我,每周这么多论文,怎么挑出值得看的?我自己的筛选流程很固定,先扫预印本平台的新列表,再用标题和摘要做第一轮过滤,剔除掉单纯改损失函数但没有新结构的工作。第二轮看OpenReview上的公开评审意见,尤其是那些被拒稿但评审给了详细改进意见的文章,往往比很多中稿文章更有参考价值,因为它们的问题真实、改进路径清晰。第三轮才是去看GitHub上的复现热度和代码质量。
我的标准很简单:一个工作如果只在数据集上涨了零点几个点,我不会花太多时间;但如果它提出了一个和现有范式不同的建模思路,哪怕实验并不完美,我也会放进来细看。这周的动态图记忆模块改进、基于图结构的语义词元构造、以及面部关键点构图做表情识别,都属于“思路上有新东西”的类型,所以我把它们放在了这周的重点方向里。
2. 动态图网络:从静态关系走向时序建模
2.1 为什么动态图方向越来越值得看
静态GNN跑到今天,天花板已经被反复验证了。你把GCN、GAT、GraphSAGE换着花样堆,在几个经典数据集上的提升越来越有限。原因也清楚,绝大多数基准数据集都是静态的,模型没有时间维度的输入,自然学不到演化规律。但工业场景恰恰相反,欺诈检测、风险识别、推荐系统、流量预测,全是时变图数据。
拿交通流量预测来说,道路节点之间的车流影响会随着早晚高峰发生明显的规律性变化,凌晨三点和早八点的高架桥关系强度完全不是一个量级。静态图输入一张平均邻接矩阵,等于把早晚高峰的动态关系抹平了。动态图模型要解决的核心问题,就是如何在边事件不断到来的时候,持续更新节点表示。这周看到的工作里,有几个很有启发性的套路:引入可学习的记忆模块,让节点在每次参与事件后更新自己的状态;还有给边加上连续时间编码,让聚合操作能区分“刚刚发生”和“很久以前发生”的关系。这些思路本质上都是把时间放进图传播的循环过程里,而不是简单地把时间戳拼进特征向量,属于结构层面的改动。
2.2 本周看到的几条技术路线
这周动态图方向里让我停留最久的是一个关于连续时间事件驱动采样的工作。它不再按固定间隔划分时间窗,而是把每条边当成一个独立事件,模型只在事件发生的时候做局部更新。这么做的好处很直观:固定窗口在事件稀疏时浪费计算,在事件密集时又丢失时间精度,事件驱动可以精确到每条边的时间点。
另一个热点是时间编码器的改进。很多工作还在用三角函数式的time embedding,但这周有论文提出,不同边的局部时间模式应该不一样,用一个全局共享的时间编码函数容易把不同子图的演化韵律压平。这个观点我觉得很实在,你去看一个社交网络里的用户活跃时间分布和金融网络里的交易时间分布,差异非常大,全局共享确实不够灵活。
还有一条路线是把图神经网络和时序模型做耦合。一些工作把节点的历史表示序列丢进GRU或者Transformer,再用输出作为下一次图聚合的输入。这个方向的代价是训练速度明显变慢,但这周不少论文的实验显示,换来的收益确实不小。动态图如果往深了做,和时序预测的边界会越来越模糊。
2.3 复现时的框架与数据集选择
想复现动态图方向的论文,工具链上首选PyTorch Geometric的Temporal扩展库和Deep Graph Library(DGL)两套。我更推荐PyG Temporal,理由是它的文档更平滑,内置了好几个公开的连续时间图数据集,省去了自己处理边时间戳的麻烦。
实操上有几个坑值得提前说。动态图的训练集、验证集、测试集切分,不能像静态图那样随机切。正确做法是按时间顺序切,较早的数据训练,中间一段验证,最新一段测试,否则提前用未来信息做训练会让指标好看很多但完全不能反映真实表现。负采样也要格外小心。链接预测任务里,负边不能随便采样,得保证采样出来的负边不在训练时的历史中出现过,否则会造成信息泄漏。我自己的经验是,先把基线模型在数据集上完整跑一遍,确认训练曲线的形态正常,再去改结构。很多人一上来就魔改模型,结果分不清效果波动到底来自新结构还是来自数据处理差异。
3. 异质图与多模态:GNN不再只看同一种关系
3.1 异质图和同质图的本质区别
进到这一周的第二大方向前,先花点时间说清楚异质图到底是什么。我们平时见最多的GNN教程,都是同质图,一个图里只有一种节点类型、一种关系类型,比如论文引用网络里只有“论文引用论文”这种关系。但真实业务几乎没有这么规整的结构。推荐系统里,用户、商品、品牌、类目是不同的节点,用户收藏商品和商品隶属品牌是不同类型的关系;学术网络里,论文、作者、机构、会议是四类节点,一个作者会有“发表”和“任职于”两种完全不等价的边。
异质图的难点在于,不同类型的关系需要不同的建模方式,但如果每类关系单独训练一套GNN,又形不成统一的表示空间。这周的工作里,我看到几个主流的处理思路,一种是设计元路径,把多跳的异质关系压缩成一条同构的路径去做聚合;一种是给关系类型分配独立的变换矩阵,再在聚合时加权融合;还有一种是引入对比学习,让不同视角下同一个节点的表示尽量一致。三种方案各有侧重,元路径依赖专家经验,关系级矩阵参数多但表达能力强,对比学习稳定性相对好。
3.2 本周多模态融合的新工作
这周有一类工作明显变多:把预训练语言模型编码的文本信息作为节点初始特征,再和图结构一起做传播。过去图节点特征基本来自one-hot或者浅层embedding,文本信息被砍到只剩几个词频统计。现在的思路是让每个节点先被“阅读理解”一遍,得到一个语义丰富的向量表示,再丢进GNN。
还有个方向是把图像也纳入图结构,视觉模型抽取目标的区域特征,区域之间的空间关系被建模成边,做法非常像场景图生成。这类工作放在视觉问答、视觉推理上特别实用,因为很多问题不是看见一个目标就能回答,而是需要理解目标之间的位置和交互关系。这周有篇工作把这种思路迁移到了面部动作单元上——嘴巴区域和眼睛区域之间的协同关系被显式建模成边,这正是往表情识别方向靠的信号。
3.3 表情识别里怎么用异质图
如果把话题收窄到图神经网络表情识别,异质图的价值也很明确。一张人脸上有很多信息可以结构化成图:人脸关键点是一类节点,面部动作单元之间有关系边,面部区域分块可以构成另一类图。你可以把关键点连接关系图、区域相邻关系图、动作单元因果关系图叠加在一起,变成一个异质图,再让模型分别按不同关系做聚合,最后融合成整体表示。这周看的几篇表情识别预印本里,这个思路被反复使用。
你去看人类表情的产生机制其实就明白了,真正的高兴不只是嘴角上扬,它同时伴随眼角收缩、面颊上提、眉毛微抬,这些动作之间存在强相关性。普通CNN提取特征时更关注局部纹理和空间位置,对这种远距离的协同响应天然不敏感。用图结构的优势,就是把“嘴角上扬”和“眼角收缩”这种跨像素距离的关系显式建模出来,模型有机会学到组合关系而不是孤立特征。
4. 专门聊聊图神经网络表情识别
4.1 表情识别为什么需要引入图结构
很多人会问,表情识别不是早就用CNN解决了吗,怎么这周突然和GNN绑在一起了。其实经典的CNN方案在受控环境里表现不错,但一到真实场景就明显吃紧。真实的表情识别不仅受光照、遮挡、姿势影响,更核心的问题是,人脸各区域之间存在复杂的协同依赖关系。CNN靠卷积核一层层扩大感受野,理论上也能捕捉远距离依赖,但要堆很多层才能覆盖全脸,中间还会损失一部分结构信息。
图结构带来的一个直接好处是参数量大幅度下降。人脸关键点通常只需要几十个到一百多个节点,邻接矩阵也是稀疏的,整个图卷积的计算量比大型CNN小很多。更关键的是,图结构可以天然编码人脸拓扑。比如用68个关键点构图时,眉毛的点只和它周围的点连接,嘴巴的点只和嘴巴周围的点连接,这种先验结构不需要模型从数据里硬学,直接注入进去。这周有篇论文专门对比了有无图结构先验的差距,结果显示在头部姿态变化大的测试集上,引入人脸拓扑先验的模型鲁棒性明显更高。
4.2 近期论文里的两类主流架构
这周看到的图神经网络表情识别工作,架构上大体分成两类。第一类是经典的关键点图GCN,先通过人脸关键点检测器提取68点或更多关键点的坐标,然后用坐标加局部纹理特征构造节点表示,邻接矩阵采用KNN或者距离阈值方式生成。第二类是把面部区域分块后构图,比如把特征图切成若干小patch,每个patch作为一个节点,节点之间的边由空间距离和特征相似度共同决定,再通过图卷积和Transformer混合处理。
两个思路各有优劣。关键点图结构更符合人脸先验,计算量也小,但严重依赖关键点检测器的质量,一旦遇到遮挡严重的图片,关键点检测错误会直接传导到后续图卷积。分块图对检测器依赖低,输入是CNN提取的特征图,但节点数和边数都会增加,训练起来更慢。这周看到有个工作用了可学习的邻接矩阵,让模型在训练时自适应调整边权重,显著缓解了检测器误差带来的影响。如果你想自己设计实验,我的建议是先用关键点图配合距离阈值构造邻接矩阵,跑通之后再尝试可学习邻接矩阵,逐步替换,这样排错比较方便。
4.3 数据、训练与评估的实战心得
表情识别方向公开数据集不少,RAF-DB、AffectNet、FERPlus算是学术圈最常用的几个基准。真跑起来你会立刻遇到三个问题。
第一个是数据不平衡。中性表情的样本量通常远远大于惊讶、厌恶这类表情,直接用准确率评估会被多数类主导。正确做法是多看F1值和混淆矩阵,训练时使用类别加权损失,或者做样本重采样。第二个问题是标注噪声。表情标注的主观性很强,同一张脸在不同标注者眼里可能有不同答案,很多数据集的原始标签质量并不高。这时候可以引入一致性正则,或者对不确定样本做低权重处理,而不是硬学那些可能标错的样本。
第三个也是最隐蔽的坑,身份泄漏。很多人划分训练测试集时按图片随机分,没有考虑同一张人脸会出现在多张图片里。这样模型在测试时其实见过同一批人的其他照片,评估结果会比真实场景乐观很多。按身份划分数据集才是更严谨的做法,虽然指标会下降,但那是真实水平。我有个习惯,任何视觉类GNN实验,第一件事就是检查数据划分代码里有没有按ID去重,这一步做好,后面省心很多。
5. 大模型时代下的图神经网络
5.1 图结构和大语言模型结合的两条路线
这周的热点里,图神经网络和多模态连接密不可分。把大型语言模型和图结构拉到一起的主流做法,现在可以分成两条路线。一条是把大模型当作特征增强器:用预训练语言模型把节点的文本属性编码成稠密向量,再当作GNN的初始节点特征。这种方法实现成本低,不改变GNN的传播机制,收益也立竿见影。比如节点是商品的场景里,商品的标题和描述本身信息量极大,直接用一个语言模型编码,比用传统的词频统计要多保留很多语义。
另一条路线是把图结构交给大模型本身去理解。具体做法是先把图结构序列化,抽取出三元组或者子图路径,拼成一段自然语言文本,再让大模型完成推理。这种思路对人类友好的地方在于,不用为每个图任务单独训练一个GNN头,一套模型可以完成多种图任务。但这周有篇论文也明确指出了问题:图一旦复杂到一定程度,序列化之后的文本会非常长,超出模型上下文窗口,信息不可避免地被截断。所以目前这个路线更适合小规模的知识图谱推理,离大图落地还有距离。
5.2 本周看到的语义词元与GraphRAG方向
这周有个概念被多处提到:把图结构语义词元化。以前做图相关任务时,实体和关系被映射成离散ID,语义上断裂。现在有工作尝试用语言模型把节点或者子图转成语义词元,让模型明确知道“节点A是一个安装了某系统的服务器”而不只是编号007。这个处理让模型在少样本场景下的表现更稳,因为语言模型本身的知识被激活了,不再依赖大量图标注数据。
另一个热点是GraphRAG方向。传统的检索增强生成,通常是拿文本向量做相似度检索。但很多事实性问题的答案不是藏在某一段文本里,而是需要串联多个实体之间的关系。这周有几篇工作直接用知识图谱子图作为检索结果,再让大模型基于子图生成答案。相比传统的向量检索,这种方式能更自然地处理多跳问题。我理解其中关键点是子图的抽取策略,不能无脑取邻居节点,要按实体重要度和关系类型做裁剪,尤其在子图规模又大又密的场景下,抽取不当会把噪声全部喂给大模型,生成结果反而变差。
5.3 想试这个方向的最低配置建议
图加语言模型的方向虽然听起来很花哨,但自己动手试也没那么恐怖。第一个建议是不要一上来就追求最大的模型,先拿一个小型开源预训练模型做节点特征编码,构造一个几千节点的子图,把GNN部分跑通。整个链路分两段:离线阶段批量生成节点文本嵌入并且缓存下来,训练阶段只读缓存,不做重复编码,这样显存压力会小很多。第二个建议是控住上下文长度,图转文本时限制每个节点的描述在几十个token之内,关系路径的采样深度控制在两三跳,避免一次采样出几十个节点把输入撑爆。第三个建议是评估要拆开看,分别看大模型编码带来的增益和GNN传播带来的增益,很多人混合强化之后只看到总分上涨,说不清楚哪个模块真正起到了作用。
6. 大规模图与采样效率:论文很丰满,显存很骨感
6.1 邻居爆炸问题的根源
每一周的图神经网络论文精选里,几乎必有一批是和“在大图上跑不起来”搏斗的工作。说起来很气人,GNN的公式定义得很优雅,但一到大图就暴露硬伤。假设图的平均度d,一个两层GCN每个节点聚合邻居的复杂度是O(d²),如果中途再做三层四层,规模会指数上升。你在大规模电商图上训练时,不是模型不想收敛,是第一步采样就把显存堆满了。
这周看到有个论文里做了个很直接的实验,只改变每层采样邻居数量的budget,模型显存占用和训练时间就产生数倍差异。增加采样数并不总是带来正收益,因为邻居数量到一定程度后,新增的邻居多为冗余信息。所以现在很多高效方法的核心,不是简单的采样,而是如何在不损失表示质量的前提下减少参与聚合的边数。
6.2 讨论主流高效方案及其局限
现在用得最广的还是GraphSAGE式固定邻居采样,每层固定采固定数量,好处是实现简单、显存可控,坏处是丢弃了邻居重要性的差异,采样到的邻居可能都是无关噪音。这周的改进思路主要集中在两个方向:一个是可学习的采样策略,用一个小型网络预测邻居的重要程度,再做加权聚合,相当于给邻居采样装上了注意力机制;另一个是图结构稀疏化,先用图算法把冗余边剪掉,再在瘦身后的图上做全邻居聚合。
分布式训练也是这周不少论文的靶点。PyG和DGL都提供了分布式GNN能力,把节点和边切到多张卡上,关键还是在切分策略。随机切分会导致通信量巨大,按社区结构做感知切分能减少跨卡边界,速度提升非常明显。如果你只是在一张卡上实验,可以先从小处优化,比如控制邻居采样总数、做混合精度、开启梯度累积,这些改动加起来的收益常常比换模型结构更直观。
6.3 显存优化的一组实操配置
我自己的实验环境是单张显卡,大规模图的很多套路用不上,但积累了一些小经验。先用PyG的NeighborLoader做mini-batch训练,不要把整张大图一次性载入显存。下面是缩放版本:
from torch_geometric.loader import NeighborLoader train_loader = NeighborLoader( data, num_neighbors=[15, 10, 5], batch_size=1024, shuffle=True, ) for batch in train_loader: batch = batch.to(device) optimizer.zero_grad() out = model(batch.x, batch.edge_index) loss = criterion(out[batch.train_mask], batch.y[batch.train_mask]) loss.backward() optimizer.step()num_neighbors逐层递减的写法,默认人的直觉是每层要采一样的数量,实际上高层聚合对细节的敏感度在下降,递减采样在显存和效果之间更容易取到平衡。batch_size建议从256开始测试,再逐步加大,观察显存占用曲线。开启混合精度,用autocast包裹前向传播和损失计算,收益率非常可观。梯度累积则适合那些显存卡在峰值的情况,先累积几个batch再更新一次参数,模拟出更大的batch size效果,缺点是训练时间会拉长一些。我遇到自己魔改模型导致显存溢出时,会先取消免梯度模块,把模型结构改回能跑的状态,再逐步加回改动,这样定位最快。
7. 分子图与科学计算:GNN的硬核应用场
7.1 分子天然就是一张图
这周的图神经网络热点论文里,科学计算方向的投稿数量稳定得惊人,核心载体就是分子图。任何分子都可以被看成天然图结构:原子是节点,化学键是边。图神经网络在分子的性质预测上,本质上是在学习“原子怎么组合,决定了分子表现为什么性质”。比起传统指纹特征需要人工设计描述符,GNN把分子表示的学习完全交给模型,适合大规模化学空间的筛选。
分子图方向有一个区别于普通图数据的特点:边通常带类型。单键、双键、芳香键对这个分子性质有决定性影响,如果你把边的类型当作离散标签放进去而不设计有针对性的聚合,信息就白白丢掉了。这周的论文里有一篇让我印象深刻,它把键的类型和键长同时融进消息传递函数,结果显示对量子化学性质的预测误差改善明显,说明细节特征确实有作用。
7.2 本周看到的分子图建模新思路
进入3D时代是这周分子图论文的关键词。以往的分子图建模只在意二维拓扑结构,但真实分子的性质由三维构象决定。两个分子拓扑结构完全一样,空间构象不同,性质可能天差地别。这周有工作直接在原子坐标上做等变建模,让模型在分子旋转或平移后仍然有相同的预测结果,实现方式上通常是在消息传递中加入方向信息,让聚合过程由坐标相对关系来调制。
另一条线是分子图生成,用扩散模型做逆设计,从性质条件出发生成分子结构,而不是只做预测。这个方向我正在关注,图神经网络在这里的作用可以是对生成过程的节点和边分布进行调整和校准。现在分子图方向复现时比较稳妥的路径是:先在公开的QM9分子数据集上跑一个基线GNN,验证环境没问题,再尝试3D坐标和图生成模型。特征工程上,原子类型、原子电荷、键类型、键长这些必须标准化,同一个特征在训练集和测试集上分布差异过大,模型就会不稳定。
7.3 复现分子图实验的三点提醒
第一个提醒,分子数据集的划分不能随机。很多分子数据集包含同一分子的不同构象,随机划分会把同一分子的多个构象分到训练和测试里,模型等于见过答案。常见做法是按分子骨架或者分子ID划分,让测试集里的分子在结构上和训练集差异更大。第二个提醒,回归任务必须关注评价指标。MAE还是RMSE,对异常样本的敏感度不一样,很多新方法只是在RMSE上好看,但仔细看MAE并没有优势,说明它主要靠修正少数极端样本。第三个提醒,3D坐标类模型对GPU内存的消耗更大,因为要处理原子对的距离矩阵和方向向量,建议从小分子数据集开始调参,不要一上来就对大分子体系全量跑。这周在看这类论文时我给自己定的标准是:一个分子图工作如果连数据切分和标准化都没写清楚,我会直接怀疑它的实验可信度。
8. 常见问题与避坑技巧实录
8.1 过平滑:层数一深,效果反而下降
图神经网络踩坑排行榜上,过平滑必须排前几名。层数增加到一定阶段,所有节点表示开始趋向于同一个方向,区分度暴跌。原理不复杂,消息传递机制本质上是迭代式邻居信息混合,每经过一层传播,节点表示里自己原本的比重就会下降一些。尤其是那些度数高的节点,信息接收幅度大,更容易被拉向全局平均水平。
解决手段里最常用的是加残差连接,把每一层的输入和输出相加,确保节点自身信息不丢失。Jumping Knowledge(JK-Net)思路也不错,把每一步的表示拼接或者做注意力加权,让模型自己选择最合适的聚合深度。DropEdge则在训练时随机丢弃边,相当于给图结构加噪声,破坏信息融合路径的完全重叠,帮模型对抗过平滑。我实际跑实验时会先观察训练集和验证集准确率的变化趋势。如果训练集表现好但验证集掉得快,优先检查是否过拟合;如果两者一起随层数升高而大幅下滑,那大概率就是过平滑,先往浅层发展试试。
8.2 数据划分导致的信息泄漏
很多GNN任务里,数据划分对测试指标的干扰程度,比模型结构差异更大。社区结构强相关的数据里,随机划分容易让同一社区的节点同时出现在训练集和验证集,模型实际上是把社区标签背下来了,而不是学到了真正的预测逻辑。链接预测任务里,同一个边拆到训练集还拆到测试集,模型评估时直接“开卷考试”。
切图前应该先做连通分量分析,统计节点所在的社区分布。如果做的是节点分类,优先考虑按社区划分数据。如果做的是链接预测,测试集中的正边必须是在训练期间完全不可见的。动态图则按时间戳切分,这个前面也强调过。数据划分看起来是预处理环节,但它在实验结果中的影响力非常大。
8.3 指标单一,模型好坏误判
只盯着准确率,会让很多GNN设计上的问题被悄悄遮掩。前面提到的表情数据集,还有欺诈检测、异常识别这类场景,负面样本占比很小,准确率很容易被长尾走向带偏。这时候必须看F1分数、AUC、精确率、召回率这些对不同类别的表现敏感的指标,并且结合分类报告逐类分析。
特别想多说一句,做图神经网络论文的消融实验时,指标口径要一致。有人对比的时候,报的是宏观F1,有人报的是微观F1,不同口径下可以直接有百分之几的差异。为了让自己不犯低级错误,我习惯在代码里固定指标计算函数,跑所有模型都调用同一个函数,并且把受试者操作特征曲线下的面积,在二分类任务里作为核心评判项,剩下几个指标并排展示。这样判断模型好坏会更客观。
8.4 显存和训练时间暴走怎么办
排查训练时间失控,先看三件事:数据加载是不是成了瓶颈,邻居采样数量是不是太大,还有是不是在做无意义的全批量训练。很多人把整张图直接放进显存里跑,如果只有几千节点还好,一旦上百万节点,再轻量的模型也扛不住。显存溢出时我先做减法,把特征维度临时降一半,把邻居采样数量改小,把batch_size改小,哪个改动先行之有效再继续定位。如果这几个操作都不解决问题,再去看是不是代码里无意间保留了大矩阵的梯度。
新入坑的话,直接借用成熟框架的mini-batch接口,不要在内存管理上自己造轮子。自己写的话,代码跑崩溃往往不是模型本身的问题,而是忘记了把节点和边的索引映射到当前batch的局部索引。PyG这一类框架帮你处理了,但你一旦混合使用其他逻辑,很容易出现索引错位的低级错误,报错信息还很难看懂。所以调试时一定从小数据集小图开始,跑通之后再逐步膨胀,不要期待一个超大规模图第一次就能优雅地跑起来。
我个人在整理这一周图神经网络热点论文时的体会是:热点再多,落到自己的实验里,最终还是要靠扎实的数据处理和训练细节支撑。动态图建模、图神经网络表情识别、大模型与图的结合,这些都是很有潜力的方向,但能真正把它们变成可复现成果的关键,反而是在数据切分、指标选择、显存排障这些基础环节上做到位。如果你这周也想复现某个方向,我建议不要贪多,就挑一个最感兴趣的路子,跑通一个基线模型,再复现一篇新论文,把链条打通一次。一次完整的实证经验,比泛读十篇摘要带来的提升要大得多。