对新手来说,图神经网络入门容易吗?GNN/GCN入门

如果觉得难,那有可能是因为你没有找到一个正确的方法及正确的学习路线。就像刚开始深度学习流行的那时候一样,CNN在大家眼中都是个很新颖的东西,觉得他既难搞又神秘,那你看到现在,谁还会觉得觉得CNN很难了,框架一堆都是现成的轮子,三两行代码搭一个cnn,教程遍地都是。

有很多同学觉得难不好入门,是因为你还不了解它,你认真的去读它几篇文章,不用最新的,就从最基础的开始,认真读个三四篇,并着手把一些基础的模型,例如最初的GCN,GAT动手写一写。刚开始不会写不要紧啊,现在资料都已经很多了,照着别人的代码结合文章理解,仿照写一写,三两个模型之后。估计那时你就会觉得,这图神经网络也不过是各个节点向量间在乱七八糟的一顿加权求和罢了,一点也不神秘。

现在图相关的资料太多了,各大顶会现在都是图相关模型刷榜。但问题也在这,资料太多,反倒不知道从何下手了。

1. 学习路线

将我当时学习的路线,写在这,供大家参考。

我是通过看paper学习的,按图模型结构分类的话大致可以分为下面这两种。

给大家整理了相关图神经网络入门基础到进阶教学,超详细人工智能学习路线让大家在学习路上不再迷茫,欢迎关注我私信【123】白嫖领取

对新手来说,图神经网络入门容易吗?GNN/GCN入门_第1张图片

图嵌入类的这一种是以往的经典算法,采用一个三元组表示一个关系(h, r, t),然后依照h + r = t的基本思想,在此思想上也会有各种变形等,将知识图映射至高维空间,完成图的嵌入,这方面了解一下基本思想,优劣就好,不建议花太多的时间,毕竟追新不追旧,得往前看。

图游走类的可以从deepwalk看起,后续的Node2Vec,LINE跟上,deepwalk建议动手写一写,网上现在资料也很多,不会太难,动手实现一下,模型很简单,思想在游走类图模型上很通用,这几篇都是模型结构基本没太多变化,主要是在游走sample node时采取的不同的遍历策略(DFS/BFS,不多讲了,留给大家自己去探索),看完这几篇你会发现图游走类的模型基本“套路”都是各种游走策略采路径path + Skip-Gram训练方式。(如果没听过Skip-gram的话,那还得加一个word2vec,因为这里用的就是word2vec的训练方法及思想)

图卷积类的就是可以从最基本的GCN开始看起,然后带attention机制改进后的GAT,局部采样图模型GraphSAGE跟上。建议GCN、GAT动手写一写,因为这是基础的结构,后面在你看文章的过程中,你会陆续看看在此基础结构上的各种变体或各种改进,便于进一步深入理解。

GCN的原理与实现也写过详细解析,可以看这里怎么搭好一个GCN?只需这四步 ,GCN原理优缺点可以看这里图卷积:从GCN到GAT、GraphSAGE

2. 任务

看完以上这些,图网络中基本的模型及套路应该都有一点感觉了,接着往下,就应该是根据不同的任务、场景或研究领域进行继续往下的探索。图模型的图类型任务分类可以基本分为以下三种:

(说到任务这一块,有同学会私信问我一些问题,我把这三个基础任务拓展开简单说一下,另外大家一定要把以上基础的论文过一遍,看了就懂了)

1. Node Classification

点分类任务,就是对节点分类,这个任务是有监督的任务,简单点理解,就是通过图的GCN或其他聚合方式得到node embedding,这就跟NLP里的句子经过一个encode一样得到embedding等,然后label就是监督标签,由此来训练你的图网络参数,因此这是一个有监督的任务。比如论文里经常出现的Cora数据集,它的节点是paper,edge是paper的相互引用,paper会有7个类别的label,就是属于那个刊物之类的,这就是节点分类数据集。

2. Link Prediction

边预测,就是预测边关系,存在或不存在,这是一个自监督任务。因为图一构建起来,边就是天然的自监督label,你可以抽取一部分边,在原图训练的时候抹去,当做监督任务去做。在deepwalk里做的就是这个任务。像推荐场景中的user-item推荐一般会采用这种任务,推荐领域中的movielens数据集经常会被拿来做这个任务的实验,应该link prediction,在真实应用中会更多,毕竟真实场景中标注数据是比较少的,用这种方式做embedding表达很通用。

3. Graph Classification

图的任务,数据集上的区别是,它每一个样本是一个个的小图,比如每个化学分子,一个蛋白质结构等,这就是一个样本图(如蛋白质数据集PPI【Protein-Protein Interaction dataset】,这个数据集论文经常出现),对每一个小图做一个embedding的嵌入,一般的做法是,可以让每一个小图外面虚拟出一个节点,然后把此小图的所有特征聚合到这个虚拟节点上,这个虚拟节点就代表这个小的样本图的表达,然后就回到上面的节点分类了。图分类的任务接触的不多,以上的方法只是举一个例子,现在这方面研究的也很多,现在的方法上肯定比这好的多。

比如:像蛋白质功能预测就是对应的第三种任务,推荐场景中的user-item推荐就是第二种任务,一些社交网络人物群分类就是第一种任务了。此外,根据你的数据不同,你所构建起来的图网络自然也是不一样,这里又会分为同质图及异质图,不同的图数据对应不同的图模型,有些图模型是不支持异质图的,所以在此基础上,对应你不同的任务场景以及不同的数据,应在对应的分支上继续深入,在此就是各显神通了。

对新手来说,图神经网络入门容易吗?GNN/GCN入门_第2张图片

例如上文中提到的deepwalk、node2vec就是同质图的代表了,Metapath2vec就是简单异质图的代表了,还有GATNE就是异质图中多关系带属性类的图了。

现在学术界发文章很多都是挖空了心思,起各种名字搞噱头,来头都不小,但你只要静下心来看看它的实现,看的多了你就发现,新模型没有那么难弄懂,大多都是在原来的基础结构上做了一些叠加或改进,祝学习顺利。

给大家整理了相关图神经网络入门基础到进阶教学,超详细人工智能学习路线让大家在学习路上不再迷茫,欢迎关注我私信【123】白嫖领取

3. 工具:图框架

学习图模型,那还得有一个趁手的工具。

目前流行的图框架主要有这几种DGL、PGL、Pyg(pytorch-geometric),另外阿里、腾讯也出了一个,但这两个都没怎么更新了,没有什么活跃度,就不往下说了。

1.PyG

PyG最开始是由一群有图学习兴趣爱好的同学一起维护,复现了一些图模型论文,然后上传到这里,进行整理维护,后续火了,才有组织接过来进行开发维护,然后才在整体规范的封装抽象出一些通用接口出来。优点是它是全python、torch实现的,代码很直观、方便看懂实现的过程。但是这个正由于是兴趣者维护,它的功能支持不是很完善,九月的时候看到这个PyG实现了异构图建图,引来一阵欢呼。但这个隔壁PGL跟DGL都是早已经实现了的,分布式图都支持了挺长时间了。

若只是平常做研究用,数据集不大,没有复杂的功能需求,或者更偏爱看代码,弄懂每个接口的实现过程,Pyg是一个好选择。而且,在平常一些小任务PyG模型可以参考,它的一些模型实现的思路还是很清晰的。

2.PGL

PGL是百度开发的,中文社区,文档也都是中文资料,语言是不成问题的。但它只支持Paddle,你要是有使用过Paddle,或是公司本来就是Paddle生态的,那就是PGL了。PGL开发及维护,相比之下应该是这三个框架里开发速度最快、提issue解答问题也快了。PGL的功能应该来说,是支持的最全的,开发最快的。要是有什么功能不支持或支持的不够好,你甚至可以在它的issue里提,要是合理,也是可能会被他们加入开发任务需求的,哈哈哈。

但上面还是国内用户居多,没有推广开,也有部分原因可能是只支持Paddle框架。因此这个就看大家对这个Paddle的生态熟不熟了,不然就没必要在深度学习框架工具不熟的情况下,再给自己增加难度了。

3.DGL

DGL是亚马逊旗下的,是有一个组在维护的,社区维护的挺好,tutorial文档在大家的帮助下,也大多翻译成了中文,提issue解答问题也比较及时,而且它是支持pytorch、TensorFlow、Mxnet三个框架的,每个模型都在这三个框架下实现了,覆盖面确实广,所以也导致它推广起来比较快把。

DGL现在支持的功能也比较全了,大部分能用到的,如分布式图、多机多卡的模式里面都有例子实现,功能上差不多该支持的都支持上了,若是工程应用,应该是首推这个了,上手比较友好。

给大家整理了相关图神经网络入门基础到进阶教学,超详细人工智能学习路线让大家在学习路上不再迷茫,欢迎关注我私信【123】白嫖领取

你可能感兴趣的:(神经网络,人工智能,深度学习)