0.背景简述
GNN的本质,是要学习网络中每个节点的表达的,这些潜在的表达对图中每个节点的“社交”关系进行了编码,把离散值的节点编码成稠密向量,后续可用于分类回归,或者作为下游任务的特征。
更多:本次学习的图神经网络模型(如谱聚类的GCN、GAT等等),这些图神经网络即将节点或图映射到一个低维空间(称为图嵌入);而除了GNN还有很多图嵌入方法(在GNN之前图嵌入的概念常出现在流行学习和网络分析的研究中),这类图嵌入方法可以分为【基于矩阵分解的图嵌入方法】和【基于随机游走的图嵌入方法】。
- DeepWalk从图上的幂律分布着手,开启了图表示学习这个领域.
- node2vec探索了图上同质性和结构等价性,提出了新的随机游走策略.
- GCN从图谱理论出发,通过一阶近似,设计了AXW的聚合函数.
- PPNP研究了GNN和PageRank的联系,并分析了GNN层数和图半径(最短路径)的联系.
参考文献:
14KDD DeepWalk: Online Learning of Social Representations
16KDD node2vec: Scalable Feature Learning for Networks
17ICLR_GCN_Semi-Supervised Classification with Graph Convolutional Networks
19ICLR PPNP Predict then Propagate Graph Neural Networks meet Personalized PageRank
1.资源推荐
PyG:
(0)PYG库的官方文档:https://pytorch-geometric.readthedocs.io/en/latest/index.html (1)Hands-on Graph Neural Networks with PyTorch & PyTorch Geometric
(2)虽然教程中用的是PyG,但是学习过程可以参考google的DGL(https://docs.dgl.ai/guide_cn/graph-basic.html#guide-cn-graph-basic),一方面有翻译的中文版,一方面是注释解释好像比较多。
(3)清华叉院大佬的GNN资料总结:https://github.com/zlpure/awesome-graph-representation-learning(包括论文+博客等)
(4)知乎大佬专栏——深度学习与图网络(https://www.zhihu.com/column/marlin)
(5)清华NLP实验室github上关于GNN的paper整理:https://github.com/thunlp/GNNPapers#graph-types
(6)马腾飞的《图神经网络》,书中的勘误链接:https://github.com/matenure/GNNbook_related
(7)百度飞桨的GNN七天训练营:https://aistudio.baidu.com/aistudio/education/group/info/1956
(8)一群清北老师的GNN教程:https://graph-neural-networks.github.io/index.html
2.菜鸡学习笔记
【GNN】task1-简单图论 & Data类-PyG中图的表示及使用
【GNN】task2-消息传递图神经网络 实现图神经网络的通用范式(MPNN消息传递范式),PyG中的消息传递基类的属性、方法和运行流程,最后自定义一个消息传递图神经网络。
【GNN】task3-基于图神经网络的节点表征学习 以GCN和GAT为例学习GNN的节点表征,并降维后可视化MLP、GCN和GAT三者节点分类任务,GCN和GAT的原理。
- GCN
- 缺点在于它灵活性差,transductive,并且扩展性非常差,除此之外这篇论文借助验证集来早停帮助性能提升,跟它半监督学习的初衷有点相悖。
- 训练是full-batch的,难以扩展到大规模网络,并且收敛较慢
- gcn增加深度会降低模型效果主要是因为过度平滑的问题。
- GraphSage
- 这篇论文旨在提升gcn扩展性和改进训练方法缺陷。它将模型目标定于学习一个聚合器而不是为每个节点学习到一个表示,这中思想可以提升模型的灵活性和泛化能力。除此之外,得益于灵活性,它可以分批训练,提升收敛速度。
- 但是它的问题是因为节点采样个数随层数增长,会造成模型在time per batch上表现很差,弱于GCN,这方面的详细讨论可以参考Cluster-GCN这篇论文。
- 虽然支持mini-batch方式训练,但是训练较慢,固定邻居数目的node-wise采样,精度和效率较低。
- GAT
- 这篇论文创新之处是加入attention机制,给节点之间的边给予重要性,帮助模型学习结构信息。
- 模型可以进一步改,用attention做排序来选取采样节点,这样效果和效率方面应该会有提升。
- 参数量比GCN多,也是full-batch训练;
- 只用到1-hop的邻居,没有利用高阶邻居,当利用2阶以上邻居,容易发生过度平滑(over-smoothing)
task4~7是节点预测、边预测与图预测的实践,学习其中的数据集构造方法、表征过程等,以及阅读相关的论文。
【GNN】task4-数据完整存储与内存的数据集类+节点预测与边预测任务实践
【GNN】task5-超大图上的节点表征学习 为将整个数据集的数据都存储到内存,学习InMemoryDataset
基类的属性、方法、运行流程
【GNN】task6-基于图神经网络的图表征学习方法 这次学习了基于图同构网络(GIN)的图表征网络。为了得到图表征首先需要做节点表征,然后做图读出。
- GIN中节点表征的计算遵循WL Test算法中节点标签的更新方法,因此它的上界是WL Test算法。
在图读出中,我们对所有的节点表征(加权,如果用Attention的话)求和,这会造成节点分布信息的丢失。 - 为了研究图神经网络的表达力问题,产生一个重要模型——图同构模型,Weisfeiler-Lehman测试就是检测两个图是否在拓扑结构上图同构的近似方法;该测试最大的特点是:对每个节点的子树的聚合函数采用的是单射(Injective)的散列函数。
【GNN】task7-超大规模数据集类的创建+图预测任务实践
3.小结
在task7开头也有提到前几天刚结束的KDD CUP和OGB共同举办第一届的OGB-LSC(OGB Large-Scale Challenge)图神经网络比赛(KDDCUP是ACM SIGKDD组织的数据挖掘领域最影响力的顶级赛事),该比赛就是提供真实世界的超大规模图数据,完成图学习领域的节点分类、边预测和图回归三大任务,百度在2个赛道上获得冠军,强的一批:
- 大规模节点分类赛道冠军:引入基于异构关系的统一消息传递模型
- 大规模图关系预测赛道冠军:提出 20 层的 NOTE-RPS 知识图谱嵌入模型
这次的GNN学习也是学习图学习的节点分类、边预测和图回归三大任务,更侧重GNN模型的应用,对于论文我也没有细读论文做笔记(更多是太懒了直接搜别人的博客的论文解读),顺便提下:
- CSDN大佬“不务正业的土豆”好多论文解读or翻译都很牛逼(比如图卷积网络Graph Convolutional Network(GCN)的理解和详细推导)
- CSDN大佬“诸神缄默不语”同为研0大佬早已远超我几条街了,多学习思考后和别人交流。
- 大白佬一堆PyG的总结笔记可以学习,如【pyg】终结篇一般模型书写框架。
4.下一阶段
- 现阶段理论知识不足,如GNN中的傅里叶变换算法等等数学推导不说全能推出来,但是大致思想至少要懂才行。
- 动手能力有待加强,出现bug时要多google或者上stackoverflow上康康别人的解决方案,多思考然后将bug解决方案记录到博客,以便下次出现时能够快速解决。
- 学习李沐的《动手学习深度学习》
- 学习CS224W(图机器学习)2021冬季课程 or 宾夕法尼亚大学GNN课程
- "Deep Learning on Graphs"一书涵盖了为图结构数据开发深度学习技术的全面内容,详细介绍了GNN模型的基础,讨论了GNN模型的鲁棒性和可扩展性,介绍了GNNs在不同领域的最具代表性的应用,如自然语言处理、计算机视觉、数据挖掘和医疗等;
- 阅读综述文章Graph Neural Networks: A Review of Methods and Applications;研读提出模型等论文原文,重现论文中的实验。
5.Reference
- datawhale course:https://gitee.com/rongqinchen/team-learning-nlp/blob/master/GNN/Markdown%E7%89%88%E6%9C%AC/10-%E6%80%BB%E7%BB%93.md
- 小桐大佬、天国大佬等等
- https://mp.weixin.qq.com/s/ggEQ9LO8geP6oV5UnA9Rxg
- 清华大学图神经网络综述:模型与应用
其他github: https://github.com/thunlp/GNNPapers https://github.com/Jiakui/awesome-gcn
https://github.com/joeat1/GNN_note
https://github.com/weslynn/AlphaTree-graphic-deep-neural-network