百度图神经网络学习地址:https://aistudio.baidu.com/aistudio/education/group/info/1956
PGL算法地址:https://github.com/PaddlePaddle/PGL
一、图学习应用有哪些:
二、图游走类型模型有哪些
1、Deepwalk 采样
对于给定的节点,DeepWalk会等概率的选取下一个相邻节点加入路径,直至达到最大路径长度,或者没有下一个节点可选。
因此, 假如我们想要得到一条walk, 我们需要输入一个graph, 起始节点ID, 游走的深度walk_len。
2、GCN采样
3、GAT采样
首先回顾下注意力机制的定义,注意力机制实质上可以理解成一个加权求和的过程:对于一个给定的 query,有一系列的 value 和与之一一对应的 key,怎样计算 query 的结果呢?
很简单,对 query 和所有的 key 求相似度,然后根据相似度对所有的 value 加权求和就行了。这个相似度就是 attention coefficients,在文章中计算如下:
其中 是前馈神经网络的权重系数,|| 代表拼接操作。
利用注意力机制对图中结点特征进行更新:
既然得到了上式,那么多头注意力的更新就不言而明了,用 k 个权重系数分别得到新的结点特征之后再拼接就可以了:
3、GraphSAGE
GraphSAGE 由 Inductive Representation Learning on Large Graphs 提出,该方法提供了一种通用的归纳式框架,使用结点信息特征为未出现过的(unseen)结点生成结点向量,这一方法为后来的 PinSage(GCN 在商业推荐系统首次成功应用)提供了基础。
论文标题:Inductive Representation Learning on Large Graphs
论文链接:https://arxiv.org/abs/1706.02216
但 GraphSAGE 的思想却非常简单,也可以用一张图表示。
算法的详细过程如下:
1. 对图上的每个结点 v,设置它的初始 embedding 为它的输入特征 ;
2. 之后进行 K次迭代,在每次迭代中,对每个结点 v,聚合它的邻居结点(采样后)的在上一轮迭代中生成的结点表示 生成当前结点的邻居结点表示 ,之后连接 输入一个前馈神经网络得到结点的当前表示 ;
3. 最后得到每个结点的表示 。
这个算法有两个关键点:一是邻居结点采样,二是聚合邻居结点信息的聚合函数。
邻居结点采样方面,论文中在 K 轮迭代中,每轮采样不同的样本,采样数量为 。在聚合函数方面,论文提出了三种聚合函数:
Mean aggregator:
LSTM aggregator:使用 LSTM 对邻居结点信息进行聚合。值得注意地是,因为 LSTM 的序列性,这个聚合函数不具备对称性。文章中使用对邻居结点随机排列的方法来将其应用于无序集合。
Pooling aggregator:
论文在三个数据集上取得了对于 baseline 的 SOTA。
既然为工程应用提出的方法,对于实验部分就不能一笔带过了,这里给出论文中两个有意思的结论:
对于邻居结点的采样,设置 K=2 和 得到比较好的表现;
对于聚合函数的比较上,LSTM aggregator 和 Pooling aggregator 表现最好,但是前者比后者慢大约两倍。
4、ERNIESage
ERNIESage可以很轻松地在PGL中的消息传递范式中进行实现,目前PGL在github上提供了3个版本的ERNIESage模型:
为了使得大家对下面有关ERNIE模型的部分能够有所了解,这里先贴出ERNIE的主模型框架图。
通过以上三个版本的模型代码简单的讲解,我们可以知道他们的不同点,其实主要就是在消息传递机制的部分有所不同。ERNIESageV1版本只作用在text graph的节点上,在传递消息(Send阶段)时只考虑了邻居本身的文本信息;而ERNIESageV2版本则作用在了边上,在Send阶段同时考虑了当前节点和其邻居节点的文本信息,达到更好的交互效果, ERNIESageV3则作用在中心和全部邻居上,使节点之间能够互相attention。
希望通过这一运行实例,可以帮助同学们对ERNIESage有更好的了解和认识,大家快快用起来吧!