首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二进制节点分类任务GNN的故障训练

二进制节点分类任务GNN的故障训练
EN

Data Science用户
提问于 2023-05-22 01:22:32
回答 1查看 14关注 0票数 1

我使用一个GNN来解决我有一个查询目标和一个无向图的问题。我的目标是发出图中节点的子集(通过节点级的二进制预测),其特性与目标查询相加。我想这是相对容易学的,但我一直在挣扎。

为了简化到最基本的事情,我目前有一个模型由2 GATConv (隐藏大小16下至1昏暗输出)层从火把几何分离,由一个ReLU激活。我不使用边缘权重,节点只有两个特性:感兴趣的特性和查询目标(因此,图中所有节点的第二个目标特性是相同的)。我认为这个设置是引入查询的最简单的方式,但是这可能会导致问题。我还想知道,这种缺乏特性是否也是一个问题--也许没有足够的信息来有意义地区分节点,尽管我不相信这会干扰简单的目标。

最后,我使用BCEWithLogitsLoss,因为目标子图既是二进制掩码,也是Adam优化器。我知道这个丢失函数对于我真正的目标来说并不理想,而且我确实有一个定制的损失函数可以使用,但是为了最小化潜在的bug来源,我回到了使用CE损失。

我有一个非常大的数据集可供我使用,但为了诊断问题,我一直在处理的图形只有10,甚至1,碰巧被镜像,以迫使模型过度适应。在绘制此1图场景的逻辑演化时,我注意到值是以镜像的方式一致移动的,无论我是训练10个时代还是100个,考虑到消息传递是如何工作的,这是有意义的,而且我相信消除了节点表示同质化的可能性。损失也持续下降,但似乎信号不足以发射任何东西,除了所有的0,也许是因为目标节点掩码稀疏。

对如何进行有任何帮助或建议吗?我主要希望找出我是否从根本上误解了GNN,使我的设置总是失败,或者是否有其他建议下一步要尝试。我将注意到,我已经尝试了典型的建议-调节学习率,差异损失函数(尝试焦距损失),更深/更宽的架构,GCNConv层,开箱即用的GCN模型,在吡咯烷酮几何,数据集简化。

EN

回答 1

Data Science用户

发布于 2023-05-25 08:24:44

听起来你已经尝试过许多不同的方法,并且对你想要解决的问题有了很好的理解。对我来说最突出的一点是,除了感兴趣的特性和查询目标之外,缺乏节点特性。您已经提到,您不认为这会干扰简单的目标,但是更多的特性可能有助于模型更好地区分节点并做出更有意义的预测。

虽然您已经尝试过不同的丢失函数,但值得尝试的想法是使用不同的丢失函数,该函数更适合您的目标,即释放一个节点子集,其特性与目标查询相加。其中一个损失函数可能是二进制交叉熵的一个修改版本,它惩罚那些其特性不与目标查询相加的节点的模型,而不仅仅是惩罚不正确的二进制预测。

您还可以尝试使用不同的超参数,例如层数、隐藏大小和激活函数。更深或更宽的体系结构可能有助于模型了解节点之间更复杂的关系,并更准确地预测目标子图。

最后,使用大型数据集,您可以尝试使用数据子集进行培训,使用不同的子集进行验证,以确保模型不仅仅适合于一小部分图。目标节点掩码的稀疏性也可能使模型难以学习,因此您可以尝试生成更高密度的合成掩码,以查看这是否提高了性能。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/121681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档