图神经网络,如何变深?

云脑智库 2022-06-28 00:16


来源 | 智源社区

智库 | 云脑智库(CloudBrain-TT)

云圈 | “云脑智库微信群”,请加微信:15881101905,备注研究方向


撰文:侯振宇

编辑:贾   伟


现实世界中很多很多任务可以描述为图(Graph)问题,比如社交网络,蛋白质结构,交通路网数据,图是一个很值得研究的领域。


近年来,随着深度学习的发展,研究人员借鉴了CNN等神经网络的思想,定义和设计了用于处理图数据的神经网络结构——图神经网络(Graph Neural Networks,GNN)。


不同于CNN可以通过堆叠非常多层数的神经网络来取得更好的模型表现,自从「图神经网络」的概念被提出后,大部分图神经网络仅仅堆叠两层就能够在下游任务上取得较好的效果。


那么自然提出一个问题:深层的图神经网络必要吗?


当网络层数加深时,按照常见的解释,会发生过平滑(over-smoothing)或者过压缩(over-squashing)现象,导致不同节点之间的区分度和节点自身的特征表达下降,从而使得深层的图神经网络效果反而不如浅层网络。


但鉴于CV/NLP中的相关经验,浅层网络对数据的拟合能力会弱一些,因此对如何构建深层图神经网络的探索从未停止,例如深层图神经网络GCNII在Cora/PPI等数据集,RevGEN在ogbn-proteins数据集上都取得了state-of-art的结果,我们仍然希望看到深层图神经网络未来的潜力。


深层的图神经网络一方面增加了每个节点的感受野,使得节点可以感知到更大邻域的拓扑和节点特征信息;另一方面,深层网络增大了模型的复杂度和模型容量,使得网络的拟合能力更强


 

01



如何设计深层GNN?


那么如何设计一个深层的GNN呢?


图神经网络变深,需要面临的最主要的问题在于:如何克服over-smoothing和over-squashing问题,以及如何训练好一个深层的图神经网络模型


当结合所有层的输出,图神经网络层数过深、传播次数过多会带来大部分节点的过平滑,而我们又希望通过捕获高阶邻居的信息来帮助获得更好的节点表示,JKNet(Jumping Knowledge Networks)[2]给出的解决方法是:考虑每一层网络的输出结果,将每一层的节点输出进行融合,使得网络能够自适应地学习整合不同层的信息,得到最终的节点表示:



4层JKNet


另外GRAND[10]是将所有传播的结果叠加在一起: 



不过,JKNet这类模型并不属于深层GNN,一方面并没有克服GNN加深时存在的各种问题,另一方面也无法堆叠到非常深,模型“自适应学习融合不同层”的信息很难实现。所以JKNet实际上仍然属于浅层GNN,只不过在引入了聚合更高阶邻居的信息的方式。


我们针对这些问题,在最新发表的论文《CogDL: An Extensive Toolkit for Deep Learning on Graphs》中,提出三种策略,包括:初始残差连接、归一化+跳跃连接以及可逆网络(克服内存瓶颈)。


论文题目:CogDL: An Extensive Toolkit for Deep Learning on Graphs

论文链接:https://www.aminer.cn/pub/603e2f2191e01129ef28fecc


1、初始残差连接


APPNP 提出利用PageRank来的模拟传播过程(实际上是一个固定的图滤波器)来取代逐层堆叠的GCN。由于PageRank的局部性,APPNP能够利用图的局部性,在节点分类任务上取得了不错的表现。记归一化后的邻接矩阵Ã,APPNP的计算可以表示为:



在将信息传播和特征转换解耦的同时,在每次传播的过程中,APPNP都将初始节点特征以一定的权重 α 增叠到每次传播的结果上,从而使得在聚合邻域节点信息的同时,保持节点本身的特征,避免过平滑现象。但由于APPNP在每一次传播时只有线性变换而且并无可学习的权重,所以仍然只能算是一个浅层模型。关于APPNP的实现可以参见:


https://github.com/THUDM/cogdl/blob/master/cogdl/models/nn/ppnp.py


为了构建真正的深层图神经网络,GCNII 在此APPNP基础上,提出了两个技巧:初始残差连接(Initial residual connection)和恒等映射(Identity Mapping)。


Initial Residual Connection(初始残差连接) 与APPNP中相同,GCNII 每次将初始特征$H^{(0)}$ 以一定的权重增加到每层的传播结果上,来使得传播的每一层都能保持至少一定比例的节点的初始特征:(1-αι)ÃH(ι)+αιH(0)在代码实现中,αι,∀ι=0,1,...,L取相同且固定的值。


Identity Mapping(恒等映射) 在ResNet中,残差的存在使得网络在深度增加时,至少可以保持“模型表现不下降”,只要在网络深度不断加深时学习到一个恒等映射即可。在GCNII作者的论述中,GCNII借用相似的思路,设计了特征变换的恒等映射:



在实际实现中,eta_l为固定值(0, 0.5),随着层数l的增大而减小。在关于过平滑的分析中,由于一般W(ι)的最大特征值:



因此W(ι)的存在会加剧过平滑的出现,Identity Mapping则增大了“特征变换”矩阵的特征值:



因此有助于缓解过平滑现象。


因此,GCNII 的形式为:



其中σ(·)为非线性变换。


一般地,由于αι≠0,βι≠0,所以每一层GCNII实际上并不能学习到恒等映射,在每一层仍然会不断聚合更高阶邻居的信息。


而消融实验也说明,Initial Residual Connection 在拓展网络深度、避免过平滑现象中发挥了主要作用,而Identity Mapping在有助于缓解过平滑现象的同时,能够进一步增强模型的效果。


GCNII的实现可以参见:


https://github.com/THUDM/cogdl/blob/master/cogdl/models/nn/gcnii.py


GCNII消融实验


2、归一化 + 跳跃连接


CNN利用BatchNorm和跳跃连接(Skip-connection),能够将网络深度做到上前层。BatchNorm有效改善了深层网络训练中出现的梯度弥散现象,skip-connection则使得CNN能够在增加网络深度的同时能够取得不弱于浅层网络的表现。


跳跃连接/残差


同样地,归一化和跳跃连接在设计深层图神经网络时也能够有效发挥作用。DeeperGCN将归一化和跳跃连接整合到了图神经网络中,设计了DeeperGCN,同时设计了“提前激活(pre-activation)"形式的残差图神经网络,在实验中,当层数增加到100+层时,DeeperGCN仍然能够在ogbn-proteins数据集上取得非常优异的表现。


ResGCN: 



ResGCN+: 



不过,在DeeperGCN论文中,作者并没有测试当网络层数加深时,模型在Cora/Citeseer/PubMed这些常用半监督节点分类数据集上的效果。因为具有“稀疏性高,图规模、直径较小”等特点,关于过平滑现象常见的讨论主要关注在这三个数据集上。我们利用CogDL中复现的DeeperGCN代码发现,深层的DeeperGCN虽然未发生过平滑,但在三个半监督的数据集上的表现略微逊色一些。


在DeeperGCN中,归一化和跳跃连接是一起使用的,除了减缓过平滑现象外,归一化和残差操作都能够提升训练的稳定性和收敛性,使得深层图神经网络的训练更加容易,损失曲线更加平滑。特别地,归一化能够提高深度网络运算过程中的数值稳定性,避免运算过程中出现数值爆炸,而残差连接能够提高深层图神经网络的模型训练表现。


有趣的是,GCNII在实现上除了利用Initial Residual Connection之外,有时也会使用Residual Connection来提升模型的表现,这表明了Residual Connection在加深图神经网络时是一个非常重要的技巧。


CogDL中实现了以上提到的GCNII和DeeperGCN,包括更多的参数模块,可以进行更多地消融实验来探索每一部分的影响和作用。


3、克服内存瓶颈


当网络层数增加时,一方面模型的计算速度会降低,因为需要进行更多次的传播和运算;另一方面,网络层数的增加也会带来内存占用的线性增加,在GPU显存有限的情况下,硬件资源往往也是网络层数增加的一个重要限制。网络层数增加带来的内存占用增加主要包括2个部分:


  • 模型参数的增加,这一部分往往非常小O(d²),所以往往可以忽略;

  • 需要保存每一层前向计算的结果O(Nd)  ,用于反向传播时梯度的计算,这一部分占用内存较高。


为了缓解模型层数增加带来的内存线性增长,[7]提出了可逆网络(RevNets),即当前层的激活计算结果可以由下一层的计算结果计算得出。也就是说,如果我们知道网络最后一层的结果,就可以反推出中间每一层的结果。因此,在神经网络进行前向传播的过程中,不再需要保存中间计算结果,从而极大地节省GPU显存的占用。


为了实现可逆网络,我们将输入X切分成2部分(X₁,X₂),因此会得到两个输出(Y₁,Y₂)。在计算中,我们有:


F 和 G 表示网络前向传播的计算过程,在实现中往往取 F = G。

在后向传播时,我们可以利用计算结果反推出输入,即每一层的输出可以由下一层的输出计算得到:


因此,网络在实际计算时,在反向传播时只需要根据下一层的结果计算上一层的结果即可,不再在需要保存中间的激活结果。这虽然带来了一定的额外的计算的开销(约额外一倍的前向传播计算开销),但极大地节省了显存的占用,使得模型计算的显存占用与层数无关。

所以,如果不考虑模型参数占用的显存,理论上可逆网络可以拓展到任意深度。[6] 将可逆网络应用到了图神经网络上,从而构建了上百层甚至上千层的图神经网络,并利用448层的GNN在ogbn-proteins数据集上取得了state-of-art的效果。这表明深层图神经网络在仍然具有潜力。


02



模型实现


在CogDL 中,我们实现了我们实现了上述提到的所有图神经网络模型,并放在Models下,可以尝试模型在不同数据集上的效果和进行不同参数的调节实验,模型的调用可以直接利用命令行或者 cogdl.experiment 接口实现,同时单独的GNN层放在Layers下,方便进行使用和构建新模型。

python scripts/train.py --dataset cora --model gcnii --task node_classification

或者直接在代码中使用

from cogdl.experiment import experiment
experiment(task=
"node_classification", model="gcnii", dataset="cora")


同时,我们将DeeperGCN的残差连接形式和RevNet的可逆实现封装成统一的接口,从而可以将任意图神经网络进行封装成深层的图神经网络,具体代码可以参见:
from cogdl.layers import RevGNNLayer, ResGNNLayer
from cogdl.layers import GCNLayer
from cogdl.datasets import build_dataset_from_namedata = build_dataset_from_name("cora").data

data = build_dataset_from_name("
cora").data

# 通过CogDL中的图神经网络层GCNLayer/ResGNNLayer/RevGNNLayer构建一个深层GNN
class RevGCN(BaseModel):
     
def __init__(self, in_feats, out_feats, nhidden, nlayer):
           
self.input_fc = nn.Linear(in_feats, nhidden)
           
self.output_fc = nn.Lineare(nhidden, out_feats)  

           
self.layers = nn.ModuleList()

            for i in range(nlayer):
                    gcn_layer = GCNLayer(data.num_features, data.num_classes)
                 # 得到Pre-activation的残差连接GCN层
                resgcn_layer = ResGCNLayer(gcn_layer)
                 # 得到Reversible的GCN层
                revgcn_layer = RevGNNLayer(resgcn_layer)
self.layers.append(revgcn_layer)  def forward(self, graph):

     
def forward(self, graph):
           x = graph.x

           h = self.input_fc(x)
           for layer in self.layers:
                h = layer(graph, h)
            return self.output_fc(h)

deepgnn = RevGNN(data.num_features, data.num_classes,
64, nlayer=100)

我们目前在CogDL中实现了Deeerpgcn,可逆网络包括 revgcnrevgatrevgen等,当然用户也可以根据个人需求利用CogDL提供的接口便捷地实现自定义的模型。

03



深层GNN表现如何?


GCNII在Cora/PPI上,以及RevGEN在ogbn-proteins等数据集上都取得非常优秀甚至state-of-art的效果。

我们在Flickr、Reddit等常用数据集上进行了测试,结果如下表所示,可以看到,通过增加层数,模型可以取得更优的表现。这些说明深层图神经网络还有待进行更深入的研究,以及开发深层图神经网络的潜力。


关于更多深层图神经网络和其他GNN模型,包括在异构图[9]、图对抗[12]、推荐[13]等方面的模型和应用,可以参照 CogDL中的实现。

CogDL 项目传送门:

https://github.com/THUDM/cogdl CogDL 0.1.1 release 

详细信息 :

https://github.com/THUDM/cogdl/releases/tag/0.1.1

 参考资料(上下滑动可浏览)

[1] Cen, Yukuo, et al. "CogDL: An extensive toolkit for deep learning on graphs." arXiv preprint arXiv:2103.00959 (2021).

[2] Xu, Keyulu, et al. "Representation learning on graphs with jumping knowledge networks." ICML\\\\\'18.

[3] Klicpera, Johannes, Aleksandar Bojchevski, and Stephan Günnemann. "Predict then propagate: Graph neural networks meet personalized pagerank."ICLR\\\\\'19.

[4] Chen, Ming, et al. "Simple and deep graph convolutional networks." ICML\\\\\'20.

[5] Li, Guohao, et al. "Deepergcn: All you need to train deeper gcns." arXiv preprint arXiv:2006.07739 (2020).

[6] Li, Guohao, et al. "Deepgcns: Can gcns go as deep as cnns?." ICCV\\\\\'19.

[7] Li, Guohao, et al. "Training Graph Neural Networks with 1000 Layers." ICML\\\\\'21.

[8] Gomez, Aidan N., et al. "The reversible residual network: Backpropagation without storing activations." NeuIPS\\\\\'17.

[9] Lv, Qingsong, et al. "Are we really making much progress? Revisiting, benchmarking, and refining heterogeneous graph neural networks." KDD\\\\\'21.

[10] Feng, Wenzheng, et al. "Graph Random Neural Network for Semi-Supervised Learning on Graphs." NeuIPS\\\\\'20.

[11] Qiu, Jiezhong, et al. "LightNE: A Lightweight Graph Processing System for Network Embedding." SIGMOD\\\\\'21.

[12] Zou, Xu, et al. "TDGIA: Effective Injection Attacks on Graph Neural Networks." KDD\\\\\'21.

[13] Huang, Tinglin, et al. "MixGCF: An Improved Training Method for Graph Neural Network-based Recommender Systems." KDD\\\\\'21.



版式制作:Camel

- The End

声明:欢迎转发本号原创内容,转载和摘编需经本号授权并标注原作者和信息来源为云脑智库。本公众号目前所载内容为本公众号原创、网络转载或根据非密公开性信息资料编辑整理,相关内容仅供参考及学习交流使用。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请跟我们联系。我们致力于保护作者知识产权或作品版权,本公众号所载内容的知识产权或作品版权归原作者所有。本公众号拥有对此声明的最终解释权。

投稿/招聘/推广/合作/入群/赞助 请加微信:15881101905,备注关键词

微群关键词:天线、射频微波、雷达通信电子战、芯片半导体、信号处理、软件无线电、测试制造、相控阵、EDA仿真、通导遥、学术前沿、知识服务、合作投资.

“阅读是一种习惯,分享是一种美德,我们是一群专业、有态度的知识传播者.”

 阅读原文加入知识星球,发现更多精彩内容.

   ///  先别走,安排点个“赞”和“在看” ↓  

云脑智库 努力是一种生活态度,与年龄无关!专注搬运、分享、发表雷达、卫通、通信、化合物半导体等技术应用、行业调研、前沿技术探索!专注相控阵、太赫兹、微波光子、光学等前沿技术学习、分享
评论
  •  光伏及击穿,都可视之为 复合的逆过程,但是,复合、光伏与击穿,不单是进程的方向相反,偏置状态也不一样,复合的工况,是正偏,光伏是零偏,击穿与漂移则是反偏,光伏的能源是外来的,而击穿消耗的是结区自身和电源的能量,漂移的载流子是 客席载流子,须借外延层才能引入,客席载流子 不受反偏PN结的空乏区阻碍,能漂不能漂,只取决于反偏PN结是否处于外延层的「射程」范围,而穿通的成因,则是因耗尽层的过度扩张,致使跟 端子、外延层或其他空乏区 碰触,当耗尽层融通,耐压 (反向阻断能力) 即告彻底丧失,
    MrCU204 2025-01-17 11:30 152浏览
  • 实用性高值得收藏!! (时源芯微)时源专注于EMC整改与服务,配备完整器件 TVS全称Transient Voltage Suppre,亦称TVS管、瞬态抑制二极管等,有单向和双向之分。单向TVS 一般应用于直流供电电路,双向TVS 应用于电压交变的电路。在直流电路的应用中,TVS被并联接入电路中。在电路处于正常运行状态时,TVS会保持截止状态,从而不对电路的正常工作产生任何影响。然而,一旦电路中出现异常的过电压,并且这个电压达到TVS的击穿阈值时,TVS的状态就会
    时源芯微 2025-01-16 14:23 185浏览
  • 随着消费者对汽车驾乘体验的要求不断攀升,汽车照明系统作为确保道路安全、提升驾驶体验以及实现车辆与环境交互的重要组成,日益受到业界的高度重视。近日,2024 DVN(上海)国际汽车照明研讨会圆满落幕。作为照明与传感创新的全球领导者,艾迈斯欧司朗受邀参与主题演讲,并现场展示了其多项前沿技术。本届研讨会汇聚来自全球各地400余名汽车、照明、光源及Tier 2供应商的专业人士及专家共聚一堂。在研讨会第一环节中,艾迈斯欧司朗系统解决方案工程副总裁 Joachim Reill以深厚的专业素养,主持该环节多位
    艾迈斯欧司朗 2025-01-16 20:51 146浏览
  • 一个易用且轻量化的UI可以大大提高用户的使用效率和满意度——通过快速启动、直观操作和及时反馈,帮助用户快速上手并高效完成任务;轻量化设计则可以减少资源占用,提升启动和运行速度,增强产品竞争力。LVGL(Light and Versatile Graphics Library)是一个免费开源的图形库,专为嵌入式系统设计。它以轻量级、高效和易于使用而著称,支持多种屏幕分辨率和硬件配置,并提供了丰富的GUI组件,能够帮助开发者轻松构建出美观且功能强大的用户界面。近期,飞凌嵌入式为基于NXP i.MX9
    飞凌嵌入式 2025-01-16 13:15 216浏览
  • 80,000人到访的国际大展上,艾迈斯欧司朗有哪些亮点?感未来,光无限。近日,在慕尼黑electronica 2024现场,ams OSRAM通过多款创新DEMO展示,以及数场前瞻洞察分享,全面展示自身融合传感器、发射器及集成电路技术,精准捕捉并呈现环境信息的卓越能力。同时,ams OSRAM通过展会期间与客户、用户等行业人士,以及媒体朋友的深度交流,向业界传达其以光电技术为笔、以创新为墨,书写智能未来的深度思考。electronica 2024electronica 2024构建了一个高度国际
    艾迈斯欧司朗 2025-01-16 20:45 184浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 54浏览
  • 本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。源码修改修改源码根目录下文件device/rockchip/rk3562/package_performance.xml并添加以下内容,注意"+"号为添加内容,"com.tencent.mm"为AP
    Industio_触觉智能 2025-01-17 14:09 117浏览
  • 日前,商务部等部门办公厅印发《手机、平板、智能手表(手环)购新补贴实施方案》明确,个人消费者购买手机、平板、智能手表(手环)3类数码产品(单件销售价格不超过6000元),可享受购新补贴。每人每类可补贴1件,每件补贴比例为减去生产、流通环节及移动运营商所有优惠后最终销售价格的15%,每件最高不超过500元。目前,京东已经做好了承接手机、平板等数码产品国补优惠的落地准备工作,未来随着各省市关于手机、平板等品类的国补开启,京东将第一时间率先上线,满足消费者的换新升级需求。为保障国补的真实有效发放,基于
    华尔街科技眼 2025-01-17 10:44 203浏览
  • 电竞鼠标应用环境与客户需求电竞行业近年来发展迅速,「鼠标延迟」已成为决定游戏体验与比赛结果的关键因素。从技术角度来看,传统鼠标的延迟大约为20毫秒,入门级电竞鼠标通常为5毫秒,而高阶电竞鼠标的延迟可降低至仅2毫秒。这些差异看似微小,但在竞技激烈的游戏中,尤其在对反应和速度要求极高的场景中,每一毫秒的优化都可能带来致胜的优势。电竞比赛的普及促使玩家更加渴望降低鼠标延迟以提升竞技表现。他们希望通过精确的测试,了解不同操作系统与设定对延迟的具体影响,并寻求最佳配置方案来获得竞技优势。这样的需求推动市场
    百佳泰测试实验室 2025-01-16 15:45 307浏览
  • Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、Android等操作系统,接口丰富,开发评估快人一步!添加新账号1、使用adduser命令来添加新用户,用户名以industio为例,系统会提示设置密码以及其他信息,您可以根据需要填写或跳过,命令如下:root@id
    Industio_触觉智能 2025-01-17 14:14 81浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 114浏览
  • 百佳泰特为您整理2025年1月各大Logo的最新规格信息,本月有更新信息的logo有HDMI、Wi-Fi、Bluetooth、DisplayHDR、ClearMR、Intel EVO。HDMI®▶ 2025年1月6日,HDMI Forum, Inc. 宣布即将发布HDMI规范2.2版本。新规范将支持更高的分辨率和刷新率,并提供更多高质量选项。更快的96Gbps 带宽可满足数据密集型沉浸式和虚拟应用对传输的要求,如 AR/VR/MR、空间现实和光场显示,以及各种商业应用,如大型数字标牌、医疗成像和
    百佳泰测试实验室 2025-01-16 15:41 189浏览
  • 随着智慧科技的快速发展,智能显示器的生态圈应用变得越来越丰富多元,智能显示器不仅仅是传统的显示设备,透过结合人工智能(AI)和语音助理,它还可以成为家庭、办公室和商业环境中的核心互动接口。提供多元且个性化的服务,如智能家居控制、影音串流拨放、实时信息显示等,极大提升了使用体验。此外,智能家居系统的整合能力也不容小觑,透过智能装置之间的无缝连接,形成了强大的多元应用生态圈。企业也利用智能显示器进行会议展示和多方远程合作,大大提高效率和互动性。Smart Display Ecosystem示意图,作
    百佳泰测试实验室 2025-01-16 15:37 194浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦