参与Jamin 蛋酱

灵活、轻便,阿里开源简化GNN应用框架Graph-Learn

近日,阿里巴巴开源了简化 GNN 应用的新框架 Graph-Learn。该框架可从实际案例中提取解决方案,应用于推荐系统、反欺骗等多个领域。相关代码已经可以在 GitHub 上下载。

近年来,图神经网络(GNN)已经在图像分类、语义分割、推荐系统、程序推理乃至分子结构预测等领域,都有着越来越广泛的应用。GNN 一般是将底层图形作为计算图,通过在图上传递、转换和聚合节点特征信息学习神经网络基元以生成单个节点嵌入。生成的节点嵌入可以作为输入,用于如节点分类或连接预测的任何可微预测层,完整的模型可以通过端到端的方式训练。

近日,阿里巴巴团队开源了 Graph-Learn(以下简称 GL),这是一个用以简化图神经网络应用的新框架。它能够从实际的案例中提取出解决方案,并且这些解决方案已在推荐、反欺骗和知识图谱系统领域得到了应用和验证。

GL 的可移植性和灵活性对于开发者来说十分友好,在该框架的基础上,开发者可以更轻松地实现 GNN 算法、自定义与图相关的运算符,并且更轻松地拓展现有模块。Container 和物理机上都可以安装 GL。

项目地址:https://github.com/alibaba/graph-learn

模型示例

GCN

图卷积网络被认为是基于深度学习的图形结构化数据方法最突出的进展之一。GCN 上的卷积算子是频谱图卷积的部分近似。从空间角度来看,相邻节点的嵌入被聚合在一起用以更新节点的自嵌入。


GAT

图注意力网络是 GCN 接下来的主要工作。GAT 将注意力机制融入了 GCN。通过计算节点之间的注意力系数,GAT 对节点及其相邻进行加权汇总,从而使得每个节点都能专注于最相关的相邻项从而进行决策。

GraphSAGE 

GraphSAGE 是一个通用的归纳框架,可以有效地为之前无法可视化的数据生成节点嵌入。为了利用大规模图形数据,GraphSAGE 会建议从原始图形数据中采样计算子图形,然后进行逐批训练。以及它还提出了通过几个 aggregators 来有选择地聚合相邻项的嵌入。


快速开始

以最流行的图神经网络模型 GCN 为例,这部分展示一下如何基于 low-level 的 GL API 和深度学习框架(比如 TensorFlow)构建图学习模型。

如何创建一个基于学习的模型

需要执行以下四个步骤:

  • 采样:使用内置采样函数采样子图(称为 EgoGraph)。
  • 团队抽象了四个基本函数,包括sample_seed,positive_sample,negative_sample 和receptive_fn。sample_seed 用于生成初始 Nodes 以及 Edges(一系列节点或边缘),然后 positve_sample 将其用作输入以生成样本 Edges。negative_sample 函数可对非监督模型的负 Nodes 或 Edges 进行采样。GNN 需要聚集 nodes(edges)的相邻信息以便更新 nodes 及 edges 嵌入,因此提供了 acceptive_fn 来采样相邻信息。种子 Nodes 和 Edges 以及采样被统一组织为 EgoGraph。

  • 图形流:使用 EgoFlow 时会根据不同的后端将 EgoGraph 转换为 EgoTensor。
  • GL 建模是基于 TensorFlow 等深度学习框架之上的。因此,需要将采样的EgoGraphs 转换为张量格式 EgoTensor。团队将 EgoFlow 进行此转换。EgoFlow 还生成用于迭代训练和 pipeline 的 iterator。

  • 定义编码器:使用 EgoGraph 编码器和功能编码器对 EgoTensor 进行编码。
  • 获取 EgoTensor 之后,需要定义从原始数据到嵌入的转换例程。而对于 GNN 模型,此步骤是聚合节点并将其与自身节点的 nodes/edges 合并。

  • 定义损失函数和训练:将编码的嵌入内容提供给损失函数及训练。
  • GL 内置了一些常见的损失函数优化器,也可以自定义自己的损失函数优化器。同时支持本地和分布式培训。

主要概念

源数据

GL 支持多种数据格式,用以简化从原始数据到 Graph 对象的整个构建过程。源数据放置在文件系统上,建模时,加载程序会将文件读取为 StructuredAccessFile。

对于用户而言,提供了两类源数据:Node Source 以及 Edge Source。这里将其描述为 Node Source 和 Edge Source 支持的数据格式。

通常情况下,节点包含一个 ID 以及多个描述实体的属性。Edge 包含两个 ID,用于描述两个节点之间的关系。Edges 也可能附加了属性。例如,「用户在星期六早上购买了产品」。它使用了用户和产品 ID 描述 Edge,「星期六早上」是该 Edge 的属性。

除属性外,GL 还支持源数据中的权重和标签。权重对于许多采样算法很重要,而标签是监督训练的必备条件。

如上所述,GL 使用 WEIGHTED,LABELED 和 ATTRIBUTED 作为基本 ID 的可选扩展。

图形对象

Graph 是一个组织原始数据的单元,用以启用高级操作。GL 作业中只能存在一个且是唯一的 Graph 对象。能够支持所有类型的图,包括同构图,具有不同类型 nodes 或 edges 的异构图或是以及具有附加在 nodes 或 edges 上属性的图。提供丰富的 API 来提取有关图形的信息。

通常来说,创建图形对象需要以下三个步骤:

  • 声明一个 Graph 对象

  • 描述出其拓扑性

  • 初始化数据


分布式模式

GL 支持分布式模式运行的服务器或客户端以及其任意组合。服务器角色负责加载和管理图形。客户端与深度学习框架在同一过程中运行,以提供图形数据进行训练。在训练期间,将从客户端生成数据的查询或采样请求,在服务器中对其进行处理。最后,服务器的结果被聚合回客户端。

「服务器」和「客户端」只是 GL 中的逻辑层面的角色,它们也可以放在同一台机器上。
工程图神经网络阿里巴巴
相关数据
损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

知识图谱技术

知识图谱本质上是语义网络,是一种基于图的数据结构,由节点(Point)和边(Edge)组成。在知识图谱里,每个节点表示现实世界中存在的“实体”,每条边为实体与实体之间的“关系”。知识图谱是关系的最有效的表示方式。通俗地讲,知识图谱就是把所有不同种类的信息(Heterogeneous Information)连接在一起而得到的一个关系网络。知识图谱提供了从“关系”的角度去分析问题的能力。 知识图谱这个概念最早由Google提出,主要是用来优化现有的搜索引擎。不同于基于关键词搜索的传统搜索引擎,知识图谱可用来更好地查询复杂的关联信息,从语义层面理解用户意图,改进搜索质量。比如在Google的搜索框里输入Bill Gates的时候,搜索结果页面的右侧还会出现Bill Gates相关的信息比如出生年月,家庭情况等等。

语义分割技术

语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类。图像语义分割是AI领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

推荐文章
暂无评论
暂无评论~