EdisonLeeeee / MaskGAE

[KDD 2023] What’s Behind the Mask: Understanding Masked Graph Modeling for Graph Autoencoders
https://arxiv.org/abs/2205.10053
76 stars 6 forks source link

关于大图扩展性和inductive学习方式 #1

Closed Gmrylbx closed 2 years ago

Gmrylbx commented 2 years ago

首先感谢您的代码,非常杰出的工作!

我想问一下,MaskGAE能够适用于几千万甚至上亿节点的大图吗?使用GCN作为编码器需要在显存里存储图结构(邻接矩阵),这导致跑大图几乎不现实。我看到你们文章里跑了76万节点的大图,我觉得很不可思议,40G的显存是存不下这么大的图结构的,这是不是因为用了PyG框架的缘故,对显存进行了优化?

另外,MaskGAE能进行inductive的学习方式吗?

期待您的解答

EdisonLeeeee commented 2 years ago

您好,感谢您对我们工作的关注和肯定!

首先,MaskGAE理论上是适用于几千万甚至上亿节点的大图的,重点需要将encoder设计成inductive的模式,例如使用GraphSAGE,也就是设计成inductive的方式,分batch对输入的边进行重构。

其次,在我们的实现中,并未使用传统的邻接矩阵方式存储图,而是使用PyG框架,将图表示为稀疏的edge_index, edge_weight格式。此外,在训练过程中,由于采用了Mask操作将图中大部分(例如70%)的边掩蔽(删除),输入的图更加稀疏了,导致内存消耗更低。综上,40G内存理论上100万节点内的数据集是能够运行的。

最后,MaskGAE是能够进行inductive的学习方式的,类似GraphSAGE,只需要采样子图即可。不过由于MaskGAE是link-level的,与node-level稍有区别,采样的时候对应改成输入边的k阶子图即可。

Gmrylbx commented 2 years ago

感谢回复,相比较之下我直接把邻接矩阵存到显存里的方式太憨了,导致我24G显存跑Pubmed都费劲。

确实Encoder变成GraphSAGE可以inductive learning,但是对batch进行重构相较于全图重构是有损的,不知道效果会不会好。

我没搞错的话你们应该是蚂蚁机器智能,我也是蚂蚁机器智能一名待入职的实习生,我也在研究图嵌入,希望以后有进一步交流的机会^_^

EdisonLeeeee commented 2 years ago

但是对batch进行重构相较于全图重构是有损的

如果直接将这个batch的边作为输入是有损的,但是如果是采样的是这个batch内所有节点构成的K-hop子图,理论上是无损的。

随时欢迎任何形式的交流合作^_^

Gmrylbx commented 2 years ago

多谢解惑!