导读:本文是“数据拾光者”专栏的第三十三篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇从理论到实战详细介绍了目前很火的图神经网络GNN,希望对于学习并将图神经网络GNN应用到实际业务场景的小伙伴可能有所帮助。
摘要:本篇从理论到实战详细介绍了目前很火的图神经网络GNN。首先介绍了背景,主要包括学习GNN的原因、GNN应用场景以及在我们业务中如何应用GNN;然后从理论详细介绍了GNN,包括GNN和Graph Embedding的关系、GNN的整体流程和分类以及GNN的经典模型GCN、GAT和GraphSAGE;最后在CORA数据集上基于开源框架tf_geometric实践了GAT模型。希望对于学习并将图神经网络GNN应用到实际业务场景的小伙伴可能有所帮助。
下面主要按照如下思维导图进行学习分享:
01
背景
1.1 为什么学习图神经网络
还是按照惯例讲下学习图神经网络的背景。最近几年图神经网络很火,之前也写过关于图模型Graph Embedding的文章,再加上最近工作上想把图神经网络应用到我们的拓量模型中,所以专门学习整理了一篇图神经网络的文章。
近几年深度学习浪潮越来越猛,主要有三个原因:首先,随着Hadoop等大数据技术越来越成熟,我们可以获取并且用于训练的数据越来越多;然后,配套的算力也越来越强。光有数据,算力不够也很难成事,随着GPU等广泛应用到模型的计算当中,使得训练迭代速度越来越快;最后,传统的深度学习可以从欧式空间中获取有效的特征。
前两个原因很容易理解,重点就在于理解第三个原因,这也是图神经网络出现的原因。传统的深度学习使用CNN、RNN等模型在CV和NLP领域应用范围很广,其中一个主要原因是图像和文本等数据可以很好的在欧式空间中进行表示,并且以规则的栅栏结构呈现,传统的深度学习模型可以很好的处理这些数据。但是现实世界中很多数据是以更加复杂的图结构的方式进行组织的,比如社交网络图结构、生物化学图结构和引文网络等等。下面是图像数据和图结构数据在欧式空间和非欧空间的对比图:
图1 图像数据和图结构数据对比图
拿CNN卷积神经网络举例,CNN在传统深度学习中效果显著,主要原因是CNN利用了图像在其信号域中的局部平移不变性。CNN的核心是使用卷积操作来提取图像的特征,图像作为一个规整的二维矩阵,无论卷积核平移到图像中哪个位置都可以保证运算结果的一致性。但是对于图结构来说,每个节点的相邻节点数是变化的,失去了局部平移不变性这个特质,所以传统的CNN无法很好的应用在图结构数据中。
总结下来就是现实世界中有很多图结构场景,而传统的深度学习在图结构中表现效果较差,主要有两个原因:
- 图是复杂不规则的。因为图大小是任意的,拓扑结构复杂,没有图像的空间局部性,同时图没有固定的节点顺序,经常是动态的,有些还包含多模态的特征,所以导致传统的深度学习在图结构中效果较差;
- 图结构数据样本之间具有依赖。传统的深度学习算法一个核心假设是数据样本之间是彼此独立的,比如文本分类任务中两条样本是相互独立的。但是在图结构中每个数据样本节点可能和其他的样本节点相连,样本之间并不是相互独立的,而这些信息可以用于捕捉样本之间的依赖关系,所以图结构和图像、文本等数据不同。
1.2 图神经网络的由来和应用
针对图结构数据业界借鉴了CNN、RNN和深度自动编码思想,专门定义和设计了用于处理图结构数据的神经网络,这就是图神经网络的由来。
现实世界中应用图结构无处不在,下面是主要应用场景:
- 物理领域:可以应用到物理系统模型;
- 化学领域:应用图神经网络研究分子的图结构;
- 图像领域:可以应用于图像人物关系理解、图像分类等;
- 文本领域:可以应用于文本分类、机器翻译、知识问答等;
- 社交网络:可以应用于社交网络关系理解等。
下面是图神经网络应用场景图:
图2 图神经网络应用场景
1.3 在我们业务中应用图神经网络
虽然现实世界中很多都需要应用图神经网络,但是最重要的是如何在我们的实际工作业务场景中使用图神经网络。我们应用图神经网络主要有以下几个方面:第一,深入理解各种数据源,尤其是app数据源,得到app的基于图神经网络的节点embedding表示,应用到下游搜索和拓量模型的特征中;第二,使用图神经网络进行数据源打标分类;第三,将图神经网络应用到推荐系统中,构建user-ad的图结构,利用user2user、ad2ad和user2ad之间的关系以及内容属性信息来生成高质量的广告推荐。
小结下,本节主要介绍了学习图神经网络的背景。首先,现实世界中有很多图结构场景,因为图是复杂并且不规则的,而且图结构数据样本之间具有依赖,使得传统深度学习方法在图场景中效果较差,因此出现了专门用于解决图场景问题的图神经网络;然后介绍了图神经网络的由来和应用,可以应用到物理、化学、文本、图像和推荐系统等领域;最后介绍了在我们实际工作中需要应用图神经网络的场景。
02
详解图神经网络
2.1 图神经网络和图嵌入的关系
去年也研究过一段时间图嵌入模型Graph Embedding,强烈建议小伙伴可以先去看看之前的那篇文章《广告行业中那些趣事系列11:推荐系统领域必学的Graph Embedding》。总的来看,图神经网络和图嵌入密切相关,都属于表示学习范畴。从节点到图有两个层次理解:
- 从节点角度来看将图中的节点表示成低维稠密向量。该层次主要是获取在向量空间中具有表示以及推理能力的节点的向量表示,然后应用到下游任务中。举例说明,我们可以构建用户购买商品序列的图结构,然后得到向量差异较大的各个商品的向量表示。这里差异较大可以体现在热门商品和冷门商品的embedding表示差异较大,或者不同品类商品的embedding表示差异较大等等;
- 从图的角度来看将整个图表示成低维稠密向量,可用于整个图结构进行分类。
图嵌入算法主要分成以下三个类别:
- 基于随机游走的图表示学习。这一类算法的典型代表是DeepWalk以及多样化游走策略的Node2Vec。DeepWalk算法是基于NLP领域的word2vec算法提出来的。第一步获取用户行为序列,第二步构造图结构,第三步使用随机游走的策略生成序列,最后一步基于word2vec算法获取各个节点的embedding表示。下面是DeepWalk算法的四个主要步骤:
图3 DeepWalk算法的主要步骤
- 基于矩阵分解的图表示学习。基于矩阵分解的方法是将节点间的关系用矩阵的形式进行表达,然后分解该矩阵得到embedding向量表示。通常用于表示节点关系的矩阵包括邻接矩阵、拉普拉斯矩阵、节点转移概率矩阵等等;
- 基于神经网络的图表示学习。图结构结合深度学习方法搭建的网络统称为图神经网络GNN,这也是本节的主要内容。
2.2 图神经网络的输入输出以及整体流程
首先看下图神经网络模型的输入和输出。输入是图结构数据,输出可以是节点的embedding、边的embedding或者图的embedding等。
然后看下图神经网络的整体流程。通常情况下图神经网络包括以下四个流程:
- 第一步,构建图结构。根据业务场景构建适配当前任务的图结构,这里重点是节点以及边关系的定义和理解;
- 第二步,确定图类型和规模。图类型包括无向图、有向图等,而图规模则包括节点的数量和边的数量,根据图不同的类型以及规模会确定使用不同的图神经网络模型;
- 第三步,根据训练集和任务确定损失函数。训练集主要包括有监督、半监督和无监督三种类型,任务则包括节点级别、边级别和图级别。根据训练集和任务类型不同来确定损失函数,从而确定任务的目标;
- 第四步,使用计算模块构建图神经网络模型。计算模块主要包括三部分,第一部分是传播模块propagation models,主要是进行卷积运算、循环运算等操作;第二部分是采样模块sampling models,主要是进行不同采样策略的操作;第三部分是池化模块pooling models,主要进行池化操作。根据实际业务需求可以自定义图神经网络层数以及具体操作从而构建图神经网络模型。
下面是图神经网络的整体流程图:
图4 图神经网络整体流程
2.3 图神经网络分类
根据不同的计算模块,可以对图神经网络进行分类。下面是参考文献1整理的图神经网络全家桶:
图5 图神经网络全家桶
上图中根据计算模块主要将图神经网络分成三大类:
- 第一类是传播模块propagation models。根据传播模块中操作的不同分成卷积运算、循环运算和Skip Conection三块,其中比较重要的是基于卷积运算又分成基于谱(Spectral)和基于空间(Spatial),后面会详细说明;
- 第二类是采样模块sampling models。根据采样对象的不同又分成节点采样、层采样和子图采样;
- 第三类是池化模块pooling models,分成Direct和Hierarchical。
从上图也可以看出图神经网络模型种类非常繁多,下面会根据图神经网络的发展选择一些经典模型进行详细讲解。
2.4 图神经网络的发展以及经典模型
2.4.1 图神经网络的开山之作图卷积神经网络GCN
图卷积神经网络GCN将卷积运算从图像、文本等数据推广到图数据,其核心思想是学习一个函数映射f,通过自身节点的特征和连接节点的特征来生成自身节点的embedding表示。
GCN本身属于基于卷积运算的图神经网络中的基于谱(Spectral),核心思想是通过傅里叶变换将图数据从空间域转换到频域,然后在频域上定义卷积操作。前面也讲过,传统的深度学习在图结构数据中效果较差,所以如果直接在图结构数据中进行卷积操作,可能并不会得到很好的效果。针对这个问题,GCN想办法将图结构数据先从空间域转换到频域,然后在频域再定义卷积操作,就能得到不错的效果。基于谱的GCN模型本身涉及比较复杂的信号处理,这块后续如果有需要会专门出一篇文章详细介绍GCN转换的内部细节。小伙伴们只需要明白图数据经过傅里叶变换之后就可以使用卷积操作提取特征,从而得到不错的效果。
下面是两种比较常见的GCN模型结构图:
图6 两种常见的GCN模型结构
2.4.2 GNN和Attention相结合的图注意力网络GAT
图注意力网络GAT属于基于卷积运算的图神经网络中的基于空间(Spatial),核心思想是将深度学习领域非常火的Attention机制应用到GNN中。因为注意力机制广泛应用到序列任务中并且取得了不错的效果,优点是自动提升海量数据中重要部分的影响,所以也有很多人将注意力机制融入到GNN中并取得不错的模型效果。
下面分别从效率、通用性和灵活性三个方面对比基于谱(GCN)和基于空间(GAT)两类模型:
- 从效率方面看,基于谱的模型计算成本随着图规模变大而急剧增加,因为需要执行特征向量计算,同时需要处理整个图,所以难于处理大型图。而基于空间的模型主要通过聚集相邻节点进行卷积操作,可以在局部节点进行计算,而不用在整个图中执行,所以可以处理大型图;
- 从通用性方面看,基于谱的模型需要一个固定的图,使得模型很难在图中添加新的节点。而基于空间的模型可以在局部节点进行图卷积,可以轻松的在不同位置和结构之间共享权重;
- 从灵活性方面来看,基于谱的模型仅限于无向图,因为有向图上的拉普拉斯矩阵没有明确的定义,所以需要将有向图先转换为无向图之后再进行卷积操作。而基于空间的模型可以灵活的处理有向图、无向图等。
整体来看,基于空间的模型在效率、通用性和灵活性方面都完胜基于谱的模型,后续在实际业务场景中主要考虑应用基于空间的模型,比如GAT。
2.4.3 基于采样模块的GraphSAGE
上面基于谱和基于空间的模型都属于传播模块,这里再介绍一种采样模块中基于节点的GraphSAGE模型。介绍GraphSAGE模型之前需要先了解下归纳学习Inductive learning和转换学习Transductive learning。因为图结构数据和其他图像、文本数据不同,图结构数据中的每一个节点可以通过边的关系利用其他节点的信息,这就导致GCN模型需要输入整个图,所以会使用训练集、验证集和测试集,这个过程称为转换学习。这种转换学习存在一个明显的问题,就是很难处理新的节点,表现为模型的泛化能力较差。而实际大多数机器学习问题都属于归纳学习,我们会将数据集刻意划分成训练集、验证集和测试集,并且只将训练集和验证集用于训练,归纳知识获得模型,然后再去测试集进行评估,相当于测试集对于模型是不可见的。因此归纳学习得到的模型泛化性较好,可以很好的处理新节点。
GraphSAGE模型就是基于归纳学习的框架。GraphSAGE模型学习主要包括三个步骤,第一步是随机采样邻近节点,也就是重要的Sample;第二步是将这些邻近节点进行汇聚操作并更新节点的embedding,也就是重要的Aggregate;最后一步是利用更新后的embedding信息预测节点的标签。下面是GraphSAGE模型学习过程:
图7 GraphSAGE模型学习过程
这里需要注意的是GraphSAGE模型学习过程中每一层网络中聚合器和权重矩阵都是共享的。
小结下,本节详解了图神经网络,首先讲了下图神经网络和图嵌入的关系;然后讲了图神经网络的输入输出以及整体流程;接着讲了图神经网络分类;最后重点讲了图神经网络的发展以及经典模型,包括GCN、GAT和GraphSAGE。
03
项目实践图神经网络
上面一节主要从理论详解了图神经网络,下面从项目实践的角度实战下图神经网络。我们主要使用公共的CORA数据集和GAT模型进行项目实践。
3.1 CORA数据集介绍
图神经网络学习中一个常用的数据集是CORA,该数据集是主要是基于论文引用构建的图数据集,总共有2708个样本,每个样本是一篇科学论文,所有样本被分为8个类别,分别是基于案例、遗传算法、神经网络、概率方法、强化学习、规则学习等。每篇论文都至少引用了一篇其他的论文,或者被其他论文引用,也就是说样本之间都存在联系,并且没有一个孤立样点,这就构成了一个基于论文引用的图结构数据集。
3.2 基于tf_geometric来实践图神经网络GAT
调研了目前开源的四大GNN框架:DGL、PyG、AGL和tf_geometric,感觉对于初学者使用最友好的是基于Tensorflow开发的GNN库tf_geometric,虽然目前star数不多,但是强烈建议感兴趣的小伙伴可以自己动手跑一下。下面是基于tf_geometric框架的GAT示例地址:
https://github.com/CrawlScript/tf_geometric/blob/master/demo/demo_gat.py
04
总结及反思
本篇从理论到实战详细介绍了目前很火的图神经网络GNN。首先介绍了背景,主要包括学习GNN的原因、GNN应用场景以及在我们业务中应用GNN;然后详细介绍了GNN,包括GNN和Graph Embedding的关系、GNN的整体流程以及分类,以及GNN的经典模型GCN、GAT和GraphSAGE模型;最后在CORA数据集上基于tf_geometric实践GAT模型。希望对学习并将图神经网络GNN应用到实际业务场景的小伙伴有所帮助。