解决‘GNN’中‘over—smoothing’问题(通俗易懂)

本文探讨了图神经网络中的'over-smoothing'现象,介绍了其产生的原因,以及如何通过调整层数、增加表达能力、使用skip-connections等策略来避免或缓解这一问题。讲解了通过实验和实例来优化GNN模型的有效方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:'over-smoothing'问题的提出:

如下图:

按照我们以往学习‘CNN’等其他层时,我们通常会有这么一个概念,就是加入越多层,我们的神经网络的表达能力也就越强。这种观念在‘GNN’层中是不合理的,为什么这么说呢?

再解释这问题之前我们要引入一个概念--‘receptive field’(接受域)如下图:

 

接受域简单来讲就是假如有1层GNN层,那么我们是不是就是从要嵌入节点(图中黄色节点)的一阶邻居(图中红色的点)那里拿信息?那对于有K层GNN层来讲是不是从要嵌入节点的1-k阶邻居那里拿信息?对的,接受域就是指你具体要到哪些邻居那里拿信息,那些邻居的总和就是接受域

知道了接受域的概念后我们就可以定义‘over-smoothing’问题了,如下图:

 

假如现在你想进行链路预测,那你就需要对一对节点进行嵌入,如果GNN层很深的话,这两个节点所共享的邻居就会非常多,导致这两个节点的嵌入非常相似(如图中的红点部分为两个节点的接受域的共享部分)(黄色节点是需要嵌入的两个节点),这就是‘over-smoothing’问题了

二:'over-smoothing'问题的产生:

所以我们可以这么归纳‘over-smoothing’问题的产生:

我们知道节点嵌入是取决于它的接收域范围的,如果两个节点的接收场高度重叠,那么他们的节点嵌入也可能十分相似,所以会有以下逻辑:我们堆叠过多的GNN层—节点具有高度重叠的接收域—节点的嵌入变得十分相似—这就是我们所说的over-smoothing问题

三:'over-smoothing'问题的解决:

lesson1:

  在增添GNN层的时候要小心添加(不像是其他如CNN网络那样,过多的添加GNN层对节点精确嵌入没有好处):
(1):要分析可行的节点接收域,分析多少层GNN是好的(这可以每一层叠加完之后看训练的准确率来确定最合适的gnn层数)
(2):当我们要设计l层GNN的时候,不要轻易的让层数增加,试着使用不同的方法来怎么加精度的问题

lesson2:

我们知道层数小意味着我们神经网络的表达能力会下降,那我们如何能做到让少层数的GNN还能增强GNN的表达能力呢?
solution1:在一层GNN层中增加表达能力,我们可以通过聚合和转换,让一层GNN层本身变成深度
的一个神经网络(比如增加linear层,dropout层,激活层,attention层,Bantch Norm层等)如图中的几种层:

 

solution2:(常用)我们可以添加不传递消息的图层(比如linear层等),这里意味着,我们不必全是GNN层在神经网络模型的构建中如下图:你可以把它们看作预处理(preprocess)层和后处理(postprocess)层,来增加神经网络的表达能力,这也意味着我们将经典的神经网络也结合了进来。

 

lesson3:

如果我需要解决的问题就是需要很多GNN层,那该怎么办呢?
solution:添加一些跳过链接的概念(skip connection)这可以理解为在最后添加早些时候(层数较少时候的嵌入)输入到下面深层次的嵌入中如下图左边部分(我们可以添加红色的链接,这样做可以跳过1层或多层GNN层,比如从第一层跳到第三层而这里的数据不需要经过第二层),所以会出现这种情况,(下图中中间部分)相当于把输入复制成了两份,一份通过正常的GNN层顺序更新,另一份走的是skip connection,最后把这两种数据结合起来。这样可以有效的提升最后的表达能力(因为输出混合了多层的输入)

 

那为什么skip connection有用呢?

(拿普通的GCN层为例)就可以简单理解为走正常GNN层更新的得到的最终节点的嵌入(如下图黄色部分)会参考之前层更新后的节点嵌入(如下图蓝色部分),使得减轻‘over-smoothing’的问题。

四:参考视频:

1:属于视频的7.3部分内容:

 

【双语字幕】斯坦福CS224W《图机器学习》课程(2021) by Jure Leskovec_哔哩哔哩_bilibiliicon-default.png?t=M1FBhttps://www.bilibili.com/video/BV1RZ4y1c7Co?p=28&spm_id_from=pageDriver

### 使用深度强化学习与GNN解决柔性作业车间调度问题(FJSP) #### 方法概述 为了应对复杂的FJSP挑战,研究者们提出了多种结合图神经网络(GNN)和深度强化学习(DRL)的技术方案。一种有效的方式是采用两阶段GNN架构来处理异构图中的节点特征嵌入[^2]。 在该方法中,首先通过两个连续的GNN层分别对工件工序关系以及机床分配情况进行建模。这不仅能够捕捉到操作本身的状态信息,还能反映不同机器之间的关联特性及其对应的操作需求状态。随后利用近端策略优化(PPO)算法训练得到最终决策模型,从而实现高效的任务安排与资源调配。 #### 构建环境表示 对于每一个时刻t下的系统状况,可以构建一张包含所有待加工零件及其所需经过各道工艺流程在内的有向无环图DAG。其中顶点代表具体的工作任务而边则指示前后置依赖关系: ```mermaid graph TD; A[Task_0] --> B(Start); subgraph Machine_1 C(Task_A) ---|can be processed on| E(Machine_1) D(Task_B) ---|can be processed on| E end subgraph Machine_2 F(Task_C) ---|can be processed on| G(Machine_2) end H(Task_D) -.-> I(Job Completion); ``` 此结构允许将整个生产过程抽象成易于理解的形式,并便于后续应用GNN提取有用的信息作为输入给定至DRL模块之中。 #### 设计奖励机制 定义合理的即时回报函数至关重要,因为其直接影响着智能体的学习效果。通常情况下会考虑以下几个方面因素综合评定当前采取行动的好坏程度: - 完成时间越短越好; - 资源利用率越高越好; - 违约惩罚尽可能低; 这些目标可以通过加权求和的方式来形成总的评价指标体系,进而指导AI做出更优的选择[^1]。 #### 训练过程 在整个模拟环境中不断重复执行以下循环直至满足收敛条件为止: 1. 初始化环境并重置内部变量; 2. 获取当前观察值o_t (即上述所描述之图形化表达形式),并通过已训练好的编码器转换为固定长度向量v_t; 3. 将v_t送入由PPO构成的动作预测网络当中计算出概率分布p(a|s)=πθ(a|st=v_t),从中采样选取实际要实施的具体措施a_t; 4. 执行选定指令更新世界状态获得新的观测数据o_{t+1}连同相应反馈r_t一同返回给代理; 5. 根据累积收益调整参数使得未来相似场景下能作出更好反应。 这种迭代式的探索方式有助于逐步逼近全局最优解空间内的某个局部极值点附近位置处停留下来。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小林学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值