速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

阿里重磅发布大规模图神经网络平台 AliGraph,架构算法解读

  • 2019-04-05
  • 本文字数:14403 字

    阅读完需:约 47 分钟

阿里重磅发布大规模图神经网络平台AliGraph,架构算法解读

图神经网络(GNN)主要是利用神经网络处理复杂的图数据,它将图数据转换到低维空间,同时最大限度保留结构和属性信息,并构造一个用于训练和推理的神经网络。在实际应用中,为了加速 GNN 训练和新算法的快速迭代,设计一套统一的图计算框架面临着巨大的挑战。近日,阿里巴巴在阿里云峰会北京站上重磅推出了大规模图神经网络平台 AliGraph,本文是 AI 前线第 74 篇论文导读,我们将深入了解阿里图神经网络库 AliGraph 背后的系统架构细节和内部自研的 GNN 算法原理。

介绍

图作为一种复杂的模型,已广泛应用于各种现实应用中的建模和管理数据。典型的例子包括社交网络、物理系统、生物网络和知识图谱等。图分析探索隐藏在图数据中的潜在洞察,在过去的十年,引起了人们极大的关注。它们在许多领域发挥了重要的作用,如节点分类、链接预测、图聚类和推荐系统等。


由于传统的图分析任务经常面临着高额的计算和空间成本,一种称为图嵌入(GE)的新范式为解决此类问题提供了一种高效的方法。具体地说,图嵌入(GE)是将图数据转换为低维空间,以最大程度保留图中结构和内容信息。之后,生成的嵌入作为特征输入到下游机器学习任务中。此外,结合深度学习技术,通过将图嵌入(GE)与卷积神经网络(CNN)相结合,提出了图神经网络(GNN)。在 CNN 中,采用共享权重和多层结构来增强其学习能力。图是最典型的局部连接结构,共享权值以降低计算成本,多层结构是处理层次模式的关键同时可以捕获各种变化尺寸的特征。GNN 是 CNN 在图上的一种推广。因此,GNN 不但拥有图嵌入(GE)的灵活性,而且在有效性和鲁棒性两个方面展示了其优越性。

GNN 面临的挑战

当前已有大量论文贡献了大量精力在开发图嵌入(GE)和 GNN 算法方面上,这些工作主要集中在没有或者有少量辅助信息的简单图上。然而,大数据和复杂系统的兴起揭示了图数据上的新洞察。这是一种共识,绝大多数与现实商业场景相关的图数据表现出四个特点,即大规模、异构、属性化和动态。例如,现在的电商的图通常包含数十亿个顶点和边,这些顶点和边具有各种类型和丰富的属性,并且会随着时间的推移快速演变。这些特性为嵌入和表征图数据带来了巨大的挑战,如下所示:


  1. GNN 的核心步骤特别针对网格结构(grid structures)进行了优化,但不适用于不规则欧几里得空间中的图。因此,现有的 GNN 方法无法在具有极大尺寸的真实图上进行缩放。第一个问题是如何提高大规模图上 GNN 的时间和空间效率?

  2. 不同类型的对象从不同的视角描述数据。它们提供了丰富的信息,但是增加了将图信息映射到单个空间的难度。因此,第二个问题是如何将异构信息优雅地集成到一个统一的嵌入结果中?

  3. 属性信息可以进一步增强嵌入结果的能力并且使图嵌入规约成为可能。在不考虑属性信息的情况下,这些算法只能直推学习,而忽略了预测未知实例的必要性。然而,拓扑结构信息和非结构属性信息通常呈现在两个不同的空间中。因此,第三个问题是如何统一保存和定义它们的信息?

  4. 由于 GNN 的效率较低,从零开始更新结构和上下文信息,然后重新计算图嵌入结果非常昂贵。因此,第四个问题是如何设计动态的有效增量 GNN 方法?

论文贡献

为了应对上述挑战,大量的研究工作致力于设计高效并且有效的 GNN 方法。在表 1 中,基于不同工作的关注点以及我们内部开发的模型(黄色阴影部分),我们对一系列流行的 GE 和 GNN 模型进行了分类。


如图所示,大多数现有方法同时集中在一个或两个属性上。然而,现实世界中的商业数据通常面临更多的挑战。为了缓解这种情况,在本文中,我们提出了一个全面而系统的 GNN 解决方案。我们设计并实现了一个名为 AliGraph 的图神经网络平台,它提供了一套对应的系统和算法来解决更实际的问题,以更好地支持各种 GNN 方法和应用。



AliGraph 的主要贡献包括:

系统

在 Aligraph 的基础组件中,我们构建了一个支持 GNN 算法和应用的系统。系统结构是从通用 GNN 方法中抽象出来的,它由存储层、采样层和操作层组成。具体来说,存储层应用了三种新技术,即结构化和属性化的特定存储,图划分和缓存一些重要顶点的领域,来存储大规模的原始数据以满足高级操作和算法的快速数据访问要求。


采样层优化了 GNN 方法中的关键采样操作。我们将抽样方法分为三类,即横向抽样(TRAVERSE)、领域抽样(NEIGHBORHOOD)和反向抽样(NEGATIVE),并提出了在分布式环境下进行采样操作的无锁方法。


操作层提供了 GNN 算法中两个常用的应用操作的优化实现,即聚合(AGGREGATE)和组合(COMBINE)。我们应用缓存策略来存储中间结果,以加速计算过程。这些组件是共同设计和共同优化的,以使整个系统有效和可扩展。

算法

系统提供了一个灵活的接口来设计 GNN 算法。我们的研究结果表明,所有现有的 GNN 方法都可以很容易地在我们系统上实现。此外,我们内部还为实际需求开发了几个新的 GNN 算法。如表 1 所示,我们内部开发的方法用黄色阴影表示,每种方法在处理实际问题时都更加灵活和实用。


AliGraph 平台已经在阿里巴巴公司内部实际部署。实验结果从系统和算法两方面验证了其有效性和效率。如图 1 所示,我们内部在 AliGraph 平台上开发的 GNN 模型,将标准化评估指标提高了 4.12%-17.19%。其中数据来自阿里巴巴的电商平台淘宝,我们会将此数据集(预计在 2019 年 5 月)贡献给社区,以推动该领域进一步发展。


预备知识

在本节中,表 2 总结了本文中常见的符号和标记。


属性异构图

为了全面描述现实世界中的商业数据,实际图往往包含丰富的内容信息,如顶点的多种类型、边的多种类型和属性等,因此我们进一步定义属性异构图(AHG)。AHG 是一个元组(V,ε,W,TV,TE,AV,AE),其中 V,ε和 W 跟简单图具有相同的含义。T(V):V–>F(V)和 T(E):ε–>F(E)表示顶点类型和边类型的映射函数。为了确保异构性,我们要求|FV|大于等于 2 和(或)|FE|大于等于 2。A(v)和 A(E)两个函数,为每个顶点 v 和每个边 e 分配一些表征其属性的特征向量。我们将顶点 v 和边 e 的第 i 个特征向量分别表示为 x(v,i)和 w(e,i)。AHG 的一个例子如图 2 所示,它包含两种类型的顶点,即 user 和 item,以及连接它们的四种类型的边。


动态图

现实世界中图通常随着时间而演化。给定一个时间间隔[1,T],动态图是一个系列的图 G(1),G(2),…,G(T)。对于每个 t 大于等于 1 并且小于等于 T,G(T)是一个简单图或者一个 AHG。为了便于记忆,我们添加一个上标 t 来表示时间戳 t 处对象的对应状态。例如,V(t) 和 E(t)分别表示图 G(t)的顶点集和边集合。

问题定义

给定一个输入图 G,它是一个简单的图或者 AHG,预先定义一个嵌入维度 d ∈ N,其中 d << |V|,在尽可能保留图性质的前提下,嵌入问题是将图 G 转换到 d 维空间。GNN 是一种特殊的图嵌入方法,它将神经网络应用在图上,学习嵌入结果。注意,在本文中,我们主要关注顶点级别的嵌入。也就是说,对于每个顶点 v,嵌入输出结果是一个 d 维度的向量 h(v)。我们在第 7 节中讨论未来工作中,我们还将考虑边的嵌入、子图嵌入甚至是整个图的嵌入。

AliGraph 系统详解

Aligraph 平台架构如图 3 所示,我们设计并实现了一个底层系统(用浅蓝色方块标记),以更好地支持高级别的 GNN 算法和应用。本节将介绍该系统的详细信息,在第 3.1 节中,我们抽象了一个 GNN 的通用框架来解释为什么我们的系统是这样设计的;第 3.2 至 3.5 介绍了系统中每个关键组件的设计和实现细节。


3.1 GNN 算法框架

在本小节中,我们将为 GNN 算法抽象为一个通用框架。一系列经典的 GNN,如 Structure2Vec,GCN,FastGCN,AS-GCN 和 GraphSAGE 可以通过在框架中实例化操作器来描述。GNN 框架的输入包含一个图 G,嵌入维度 d ∈ N,每个顶点 v ∈ V 的顶点特征 x(v),邻居的最大跳数 k(max)。对于每个顶点 v ∈ V,GNN 的输出是一个嵌入向量 h(v),将被送入下游机器学习任务,如分类、链接预测等。


算法 1 是对 GNN 框架的描述。在最开始,顶点 v 的嵌入向量 h(v)(0)被初始化为等于输入属性向量 x(v)。然后,在每个 k 处,每个顶点 v 聚合其邻居顶点的嵌入向量,以更新自身的嵌入向量。具体地说,我们应用样本函数在顶点 v 的领域集 Nb(v) 的基础上提取一个顶点的子集 S,用聚合函数对所有顶点 u ∈ S 的嵌入进行聚合,得到一个向量 h^(v),并将 h^(v)与 h(v)(k-1) 通过组合函数生成嵌入向量 h(v)(k) 。在处理完所有的顶点后,嵌入向量被归一化。最后,经过 k(max) 跳后,


h(v)(k(max)) 作为顶点 v 的嵌入结果 h(v)返回。



基于上面描述的 GNN 框架,我们构建了 AliGraph 平台的系统架构,如上一节图 3 所示。平台总体由五层组成,其中三个底层构成了系统以支持算法层和应用层。在系统内部,存储层对不同类型的原始数据进行组织和存储,以满足高级操作和算法的快速数据访问要求。


在此基础上,通过算法 1,我们发现三个主要的算子在各种 GNN 算法中起着重要的作用,即采样、聚合和组合。其中,采样操作为聚合和组合操作奠定了基础,因为它直接控制了要处理的信息范围。因此,我们设计了采样层来访问存储,以便快速准确地生成训练样本。在此之上,操作层专门优化聚合和组合函数。在系统的基础上,可以在算法层构建 GNN 算法,为应用层的实际任务提供服务。

3.2 存储

在本小节中,我们将讨论如何存储和组织原始数据。存储现实世界的图的空间成本非常大,常见的电子商务图可以包含数百亿个节点和数百亿个边,存储成本很容易超过 10TB。图的大尺寸给有效访问带来了巨大的挑战,特别是在集群的分布式环境中。为了更好地支持高级运算操作和算法,我们在 AliGraph 的存储层中应用了以下三种策略。

图分区

Aligraph 平台建立在一个分布式环境中,因此整个图被切分并分别存储在不同的 work 节点。图分区的目标是最小化交叉边(crossing edges)的数量,其的端点(endpoints)分布在不同的 work 节点上。为此,文献工作中提出一系列算法。


我们实现了四个内置的图分区算法:(1)METIS;(2)顶点切割和边切割分区;(3)2-D 分区;(4)流式分区策略,这四种算法适用于不同的环境。简而言之,METIS 专门处理稀疏图;顶点切割和边切割分区在稠密图上表现更好;在 woker 数量固定时,通常使用 2-D 分区;而流式分区方法通常应用于边更新频繁的图上。用户可以根据自己的需要选择最佳的分区策略,此外,他们还可以将其他图分区算法实现为系统中的插件。


在算法 2 中,第 1-4 行给出了图分区的界面。对于每个边 e,第 4 行中的通用 ASSIGN 函数将根据它的端点(endpoint)计算出 e 在哪个 woker 节点中。


单独存储属性

对于 AHG,我们需要在每个 work 节点中存储分区图的结构和属性。图的结构信息可以简单地用邻接表存储。也就是说,对于每个顶点 v,我们存储它的邻居集 Nb(v)。然而,对于两个顶点的属性和边,不建议将它们存储在邻接表中。原因有两方面:


  1. 属性通常需要更多的空间。例如,存储顶点 id 的空间成本最多为 8 字节,而顶点上的属性可能在 0.1KB 到 1KB 之间。

  2. 不同顶点和边之间的属性有很大的重叠。例如,许多顶点可能具有相同的标记”man“,表示其性别。因此,单独存储属性更为合理。


在我们的系统中,我们通过构建两个索引 I(v)和 I(e)分别在顶点和边上存储属性。如图 4 所示,在邻接表中,对于每个顶点 u,我们将属性 Av(u)的索引存储在 I(v)中。对于每个边(u,v),我们也将属性 Ae(u,v)存储在 I(e)中。假设 N(D)和 N(L)分别是邻居数量的平均值和属性长度的平均值。设 N(D)为顶点和边上不同属性的数目。显然,我们单独存储策略将空间成本从 O(n*ND*NL)降低到 O(n*ND+NA*NL)。


缓存重要顶点的邻居

在每个 work 节点,我们进一步提出了一种局部缓存重要顶点的邻居的方法,以降低通信成本。如果一个顶点 v 经常被其他顶点访问,我们可以在它发生的每个分区中存储它的外部邻居。这样做可以大大降低其他顶点通过 v 访问相邻顶点的开销。但是,如果 v 的邻居数目很大,存储 v 的邻居的多个副本也会产生巨大的存储空间成本。为了更好地权衡,我们定义了一个度量来评估每个顶点的重要性,决定一个顶点是否值得缓存。


假设 Di(v)(k)和 Do(v)(k)分别表示顶点 v 的 k-hop 入和出的邻居的数目。那么 Di(v)(k)和 Do(v)(k)就可以衡量缓存顶点 v 的外部邻居的收益和成本。因此,顶点 v 第 k 重要性表示为 Imp(v)(k),定义如下:



在算法 2 中,第 5-9 行给出了缓存重要顶点的邻居的过程。假设 h 表示邻居的最大深度。对于每个顶点 v,我们缓存顶点 v 的 1 到 k-hop 的外部邻居顶点,在 Imp(v)(k)大于等于τk 的条件下。其中,τk 是用户指定的阈值。注意,将 h 设置为一个小数字(通常为 2)就足够支持一系列实际的 GNN 算法。实际上,我们发现τk 不是一个敏感参数。通过实验评估,将τk 设置为 0.2 左右可以在缓存成本和收益之间进行最佳的权衡。


有趣的是,我们发现要缓存的顶点只是整个图的一小部分。Di(v)(1)和 Do(v)(1)在实际图中经常服从幂律分布。也就是说,在图中只有很少的顶点具有较大的出入度。基于此,我们得到了以下两个定理。



定理 2 表明图中只有极少数顶点是重要级别比较高的,这意味着,我们只需缓存少量重要顶点就可以显著降低图遍历的成本。

3.3 采样

回想一下,GNN 算法依靠聚合邻居信息来生成每个顶点的嵌入。然而,现实世界图的度的分布往往是偏度的,这使得卷积运算难以操作。为了解决这个问题,现有的 GNN 通常采用各种抽样策略来对大小一致的邻居子集进行抽样。由于它的重要性,我们在 AliGraph 中抽象了一个特定的采样层来优化采样策略。

概要

形式上,采样函数接受一个顶点子集 V(T)的输入,抽取一个小的子集 V(S),|V(S)|<<|V(T)|。通过对现有 GNN 模型的调研,我们抽象出三种不同的采样器,即遍历、邻域、负采样。


  • 遍历(TRAVERSE):用于从整个分区图中,采样一批顶点或边。

  • 邻域(NEIGHBORHOOD):将生成顶点的上下文。该顶点的上下文可以是一个或多个 hop 邻居,用于对该顶点进行编码。

  • 负采样(NEGATIV):用于生成负样本以加速训练过程的收敛。

实现

在文献中,抽样方法对提高 GNN 算法的效率和准确性起着重要的作用。在我们的系统中,采样器都以插件的形式存在。这三种采样器可以实现如下:


  • 对于遍历采样器,他们从局部图中获取数据。

  • 对于领域采样器,他们可以从本地存储获取一跳(one-hop)邻居,也可以从本地缓存获取多跳(multi-hop)邻居。如果没有缓存顶点的邻居,则需要从远程图服务器调用。当获取一批顶点的上下文时,我们首先将顶点划分为子批,并从相应的图服务器上获得返回结果后,每个子批的上下文将被拼接在一起。

  • 负采样器通常从本地图服务器生成样本。对于某些特殊情况,可能需要从其他图服务器进行负采样。负采样在算法上是灵活的,我们不需要批量调用所有的图服务器。


总之,一个典型的采样阶段可以实现为如图 5 所示。



我们可以通过采用动态权重的几种有效采样策略来加速训练。我们在采样器的反向计算中实现更新操作,就像反向传播的运算一样。所以,当需要更新时,我们应该做的是为采样器注册一个梯度函数。更新模式是同步还是异步,由训练算法决定。


到目前为止,读取和更新都将在内存中的图存储上进行,这可能导致性能下降。根据邻居需要,该图由源顶点分割。在此基础上,我们将图服务器上的顶点分组。每个组都将与一个请求流桶相关,其中的操作(包括读取和更新)都与该组中的顶点有关。桶是一个无锁队列,如图 6 所示,我们将每个 bucket 绑定到一个 CPU 内核,然后,桶中的每个操作都按顺序处理,不加锁进一步提高了系统的效率。


3.4 运算符

概要

采样后,输出的数据被对齐,处理起来就会容易很多。在采样器上,我们需要一些类似 GNN 的运算符来使用它们。在我们的系统中,我们抽象了两种运算符,即聚合和组合。他们的作用如下:


  • 聚合:收集每个顶点的邻居信息以生成统一的结果。例如,算法 1 中的聚合算法将一系列向量 h(u)映射到单个向量 h^(v),其中 u 属于 v 的采样邻居节点。h^(v)是一个中间结果为了进一步生成 h(k)(v)。聚合函数从周围邻居收集信息,它可以用作卷积操作。各种聚合方法被应用在不同的 GNN 中,例如,元素平均值、最大池化神经网络和 LSTM。

  • 组合: 负责如何使用顶点的邻居来描述顶点。在算法 1 中,组合函数映射两个向量 h(v)(k-1)和 h^(v)为一个向量 h(v)(k)。组合函数可以将前一跳和领域的信息集成到一个统一的空间中。通常,现有的 GNN 方法中,h(v)(k-1)和 h^(u)求和然后输入到神经网络中。

实现

采样器和类似 GNN 的运算符不仅可以前向运算,还可以反向运算,以便更新参数,使整个模型成为端到端的训练网络。考虑到图数据的特点,为了获得更好的性能,可以考虑大量的优化。一个典型的运算符由前向和后向的运算组成,以便参与到深层网络的训练中。用户可以在基于运算符的基础上,快速构建 GNN 算法。


为了进一步加速这两个算子的运算,我们通过应用策略将中间结果向量 h(v)(k)缓存。在训练过程中的每个 mini-batch 中,所有顶点我们可以共享采样邻居集合。同样,在同一个 mini-batch 中,对于所有的 k>=1 且 k<=k(max),我们也可以共享向量 h(v)(k)。为此,我们将 k(max)个 h^v(1)、h^v(2)、…h^v(kmax)向量存储为 mini-batch 中所有顶点的最新向量。在聚合函数中,我们利用向量 h^v(1)、h^v(2)、…h^v(kmax)来获取 h^(v)。然后,我们通过应用组合函数计算 h^(v)和 h(v)(k-1)来获得 h^(v)(k)。最后,存储的向量 h^(k)通过 h^(v)(k)更新。通过这种策略,运算符的计算成本可以大大减小。

方法论

在系统的基础上,我们来讨论算法的设计。我们的研究结果表明,现有的 GNN 在 AliGraph 上非常容易创建。此外,我们还提出了一系列新的 GNN 算法,以解决第 1 节中总结的真实世界的图数据嵌入的四个新挑战。它们在 AliGraph 平台算法层以插件形式供用户使用。

4.1 GNN 最佳实践

由于 AliGraph 平台是基于通用 GNN 算法抽象出来的,因此现有的 GNN 可以很容易地在这个平台上实现。具体来说,表 1 中列出的 GNN 都可以按照算法 1 中的框架构建在 AliGraph 中。这里我们以 GraphSAGE 为例进行简要介绍,其他 GNN 也可以用类似的方式实现。对于 GraphSAGE,它应用简单的逐节点采样,从每个顶点的相邻集中提取一个子集。显然,这一采样策略通过我们的采样运算符很容易就能实现。然后,我们需要在算法 1 中实例化聚合和组合函数。GraphSAGE 可以在第 4 行的聚合函数中应用加权元素平均。此外,也可以使用其他更复杂的函数,如 maxpooling 神经网络和 LSTM 神经网络。在其他的 GNN 方法中,如 GCN、FastGCN 和 AS-GCN,我们可以在抽样、聚合和组合上替换不同的策略。

4.2 阿里内部开发的 GNNs

我们内部开发的 GNN 专注于不同方面,例如:采样(AHEP)、复合边(GATNE)、多模态(Mixture GNN)、层次(Hierarchical GNN)、动态(Evolving GNN)和多源信息(Bayesian GNN)。

AHEP 算法

该算法是为了减轻传统嵌入传播(EP)算法在异构网络(HEP)上的繁重计算和存储成本而设计的。HEP 遵循 GNN 的总体框架,对 AHG 进行了细微修改。


在 HEP 中,所有的顶点嵌入都是以迭代的方式生成的。在第 k 次 hop 中,对于每个顶点 v 和每个节点类型 c,c 中 v 的所有邻居 u,传播其嵌入 h(u,c)给 v 来重构一个 h^(v,c)嵌入。然后,跨所有节点类型连接 h^(v,c)嵌入来更新 v 的嵌入。但是,在 AHEP(HEP 用自适应抽样)中,我们只对重要的邻居进行抽样,而不考虑所有邻居。


我们设计了一个度量,通过结合每个顶点的结构信息和特征来评估其重要性。之后,根据相应的概率分布,分别对不同类型的所有邻居进行采样。我们仔细设计了概率分布,以最小化抽样方差。在特定任务中,为了优化 AHEP 算法,损失函数一般可以描述为:



其中,L(SL)是批处理中监督学习的损失,L(EP)是批处理采样时的嵌入传播损失,Ω(Θ)是所有可训练参数的正则化,α, β是两个超参数。根据第 5 节的实验结果验证,AHEP 的运行速度比 HEP 快得多,同时达到了相当的精度。

GATNE 算法

该算法用于处理顶点和边上具有异构和属性信息的图。为了解决上述问题,我们提出了一种既能捕获丰富属性信息,又能利用不同节点类型的多重拓扑结构新方法,即通用的属性多重异构网络嵌入,简称 GATNE。


每个顶点的整体嵌入结果由三部分组成:通用嵌入、特定嵌入和属性嵌入,分别对应描述结构信息、异构信息和属性信息。对于每个顶点 v 和任何节点类型 c,通用的嵌入 b(v)和属性嵌入 f(v)保持相同。设 t 为可调超参数,当 1 ≤ t^ ≤ t 时 g(v,t^)是元-特定嵌入。特定嵌入是通过连接所有的 g(v,t^)得到。然后,对于每种类型 c,所有的 h(v,c)嵌入如下:



其中,α©和β©是反映特定嵌入和属性嵌入重要性的两个可调参数;利用注意力机制计算系数矩阵 a©;M© and D 是两个可训练的变化矩阵。最终嵌入结果 h(v)可以通过连接所有的 h(v,c)。


嵌入可以应用类似于随机游走的方法学习。具体来说,在随机游走中给定 c 类型的顶点 v 和窗口大小 p,设 v(-p),v(-p+1),…v,v(1),…v§表示其上下文。我们需要最小化 negative log-likelihood:


Mixture GNN 算法

该模型是一个混合的 GNN 模型,用于处理多模态的异构图。在这个模型中,我们扩展了异构图上的 skip-gram 模型,以适应异构图上的多义场景。在传统的 skip-gram 模型中,我们试图寻找参数为θ的图嵌入,通过最大化似然函数:



其中,Nb(v)表示 v 的邻居,Prθ(u|v)表示 softmax 函数,在我们对异构图上的设置中,每个节点有多感知。为了区分它们,假设 P 是节点感知的已知分布。我们将目标函数改写为:



此时,很难结合负采样方法直接优化等式(6)。或者,我们推导出一个新的方程(6)的下界 L(low),并尝试最大化 L(low)。我们发现下界 L(low)可以用负采样近似。因此,在现有的工作中,如 Deepwalk 和 node2vec 中,通过稍微修改采样过程,可以很容易地实现训练过程。

层次 GNN 算法

当前的 GNN 方法本质上是扁平的,并不学习图的层次表征。这个限制对于明确研究不同类型用户行为的相似性问题时尤其明显。层次 GNN 算法模型组合了层次结构,增强了 GNN 的表达能力。


假设 H(k)表示在 GNN 的 k 步之后,计算节点的嵌入矩阵。A 是图 G 的邻接矩阵,在算法 1 中,传统的 GNN 迭代学习 H(k)通过组合 H(k-1)、A 和一些可训练的参数θ(k)。开始,我们设置 H(0)=X,其中 X 表示节点特征的矩阵。在我们的层次 GNN 中,我们以层级方式学习嵌入结果。具体来说,让 A(l)和 X(l)分别表示第 l 层中的邻接矩阵和节点特征矩阵。通过输入 A(l)和 X(l)到单层 GNN 来学习第 l 层的节点嵌入向量结果矩阵 Z(l)。


在此之后,我们对图中的一些顶点进行聚类,并将邻接矩阵 A(l)更新为 A(l+1)。设 S(l)表示在第 l 层中的可学习的赋值矩阵。S(l)中的每一行和每一列分别对应第 l 层和(l+1)层中的一个聚类。S(l)可以通过在另外一个 pooling GNN 的 A(l)和 X(l)上应用 softmax 函数获得。利用 Z(l)和 S(l),我们可以为第 l+1 层获得一个新的粗粒度邻接矩阵 A(l+1)=S(l)(T)*A(l)*S(l)和一个新的特征矩阵 X(l+1)=S(l)(T)*Z(l)。如第 5 节所验证的,多层的层次 GNN 比单层传统 GNN 更有效。

动态演化的(Evolving)GNN 算法

这个模型用于在动态网络设置中的顶点嵌入。我们的目标是学习图序列(G(1),G(2),G(3),…G(T))中顶点的表征。


为了捕获动态图的演化性质,我们将演化链接分为两种类型:(1)正常演化代表边的大部分合理的变化;(2)突发链接代表稀有和异常的边演化。


在此基础上,以交错方式学习动态图中的所有顶点的嵌入。在时间戳 t 处,图 G(t)上找到的正常和突发的链接与 GraphSAGE 模型集成,以生成 G(t)中每个顶点 v 的嵌入结果 h(v)。然后,我们利用变分自动编码器和 RNN 模型对图 G(t+1)上的正常和突发信息进行预测。该过程在迭代中执行,以在每个时间戳 t 输出每个顶点 v 的嵌入结果。

贝叶斯 GNN 算法

该模型通过贝叶斯框架集成了两种信息源,即知识图谱嵌入或行为图嵌入。它模拟了认知科学中人类的理解过程,在这个过程中,每一种认知都是通过调整特定任务下的先验知识来驱动的。具体来说,给定一个知识图 G 和 G 中的一个实体(顶点)v,它的基础嵌入 h(v)是通过纯粹考虑 G 本身来学习的,它描述了 G 中的先验知识,然后根据 hv 生成一个特定任务下的嵌入 z(v),并对该任务生成一个修正项δv,也就是:



其中,f 是一个非线性函数。注意,学习精确的δv 和 f 似乎是不可行的,因为实体 v 有不同的δv,f 函数非常复杂。为了处理这个函数,通过考虑二阶信息,我们应用生成模型从 h(v)到 z(v)。具体地说,对于每个实体 v,我们从一个高斯分布 N(0,s(v)(2))中采样出修正变量δv。其中,s(v)由 h(v)的相关系数决定。然后,对于每个 v1 和 v2 实体对,我们从另外一个高斯分布中采样 z(v1)-z(v2):



其中,φ表示函数 f 可训练的参数。δv 的后验均值是 u^(v),φ^是结果参数。我们应用 h(v)+u^(v)作为修正的知识图谱的嵌入,fφ(h(v)+u^(v))作为修正的特定任务的嵌入。

实验

5.1 系统评估

在本小节中,我们从存储、采样、运算的角度评估 AliGraph 平台中底层系统的性能(图构建和缓存邻居节点)。所有实验都在两个数据集上进行的,如表 3 所示,Taobao-small 和 Taobao-large,后者的存储容量是前者的六倍之大。它们都代表了淘宝电子商务平台中用户和物品的子图。

图构建

图构建的性能在图计算平台中起着核心作用。AliGraph 支持多种来自不同文件系统的各种原始数据,无论是否分区。图 7 显示了在两个数据集上 worker 节点构建图所消耗的时间成本。我们观察到以下两个结果:(1)随着 woker 节点数量增加,构建图的时间明显缩短了;(2)AliGraph 可以在几分钟内构建大型图,如:Taobao-large 花费 5 分钟。这比通常需要几个小时(比如,PowerGraph)构建图的大多数技术高效得多。


缓存邻居的有效性

我们研究了缓存重要顶点的 k 跳(k-hop)邻居的效果。在我们的缓存算法中,为了分析 Di(k)和 Dv(k),我们为方程 1 中的 Imp(v)设置阈值。在实验中,我们局部缓存所有顶点的一跳(1-hop)邻居,并改变控制缓存二跳(2-hop)邻居的阈值。我们逐渐将阈值从 0.05 增加到 0.45,以测试其敏感性和有效性。


图 8 说明了缓存顶点百分比和阈值的情况。当阈值小于 0.2 时,缓存顶点百分比急剧下降,之后变得相对稳定。这是因为顶点的重要性服从幂率分布,正如我们定理 2 中证明那样。为了在缓存成本和收益之前进行良好的权衡,我们根据图 9 将阈值设置为 0.2,并且只需要缓存大约 20%的额外顶点。


我们还比较了基于重要性的缓存策略和另外两种策略,即随机策略(缓存随机选择一小部分顶点的邻居)和 LRU 替换策略。图 9 说明了时间成本和缓存顶点百分比的关系。实验结果表明我们的随机策略方法节省了大约 40%-50%的时间成本,LRU 替换策略节省了大约 50%-60%的时间成本。这仅仅是因为:(1)随机选择的顶点不太可能被访问;(2)LRU 策略由于经常替换缓存顶点而增加了额外的成本。然而,我们基于重要性的缓存顶点更容易被其他顶点访问。


抽样的影响

我们测试了采样优化实现的影响。表 4 显示了三种抽样方法的时间成本,其中批处理大小 512、缓存率为 20%。我们发现:(1)采样方法非常有效,完成时间在几毫秒到不到 60 毫秒之间;(2)采样时间随着图大小缓慢增长,虽然 Taobao-large 是 Taobao-small 的六倍,但是两个数据集的采样时间却相当接近。这些观察结果验证了我们的采样方法的实现是有效且可扩展的。


算子的影响

我们进一步研究了我们在聚合、组合算子上实现的影响。表 5 显示了这两个运算符的时间成本,在我们提出的实现中,时间成本可以加快一个数量级。这是因为我们应用了缓存策略来消除中间嵌入向量的冗余计算,这再次证明了 AliGraph 平台的优点。


5.2 算法评估

5.2.1 实验设置

数据集


我们在实验中使用了两个数据集,包括一个来自 Amazon 和 Taobao-small 的公共数据集。


数据集的统计数据汇总在表 6 中,他们两个都是 AHG。Amazon 公共数据集是从亚马逊电子产品类别下的产品元数据抽取的。在这个图中,每个顶点代表一个具有属性的产品,每个边连接两个由同一个用户共同查看或者共同购买的产品。它有两个顶点,即 user 和 item,以及 user 和 item 之间的四种边类型,即点击、添加到 preference、添加到购物车和购买行为。



算法


我们实现了所有在本文中提出的算法。为了进行比较,我们还实现了一些不同类别的有代表性的图嵌入算法,如下所示:


  • C1:Homogeneous GE 方法。比较的方法包括:DeepWalk、LINE 和 Node2Vec。这些方法只能应用于纯结构信息的普通图。

  • C2:带属性的 GE 方法。 比较方法包括 ANRL,它可以生成嵌入捕获结构和属性信息。

  • C3:异构(Heterogeneous)的 GE 方法。比较方法包括 Methpath2Vec、PMNE、MVE 和 MNE。MethPath2Vec 只能处理具有多种类型顶点的图,而其他三种方法只能处理具有多种类型边的图。PMNE 包括三种不同的方法来扩展 Node2Vec 方法,分别表示为 PMNE-n,PMNE-r 和 PMNE-c。

  • C4:基于 GNN 的方法。比较方法包括 Structural2Vec、GCN、Fast-GCN、AS-GCN、GraphSAGE 和 HEP。


为了公平起见,所有的算法都通过在我们的系统上应用优化的运算符来实现。如果一个方法不能处理属性或多个类型的顶点,我们在嵌入过程中会忽略这些信息。我们为具有相同边类型的每个子图生成嵌入,并将它们连接在一起作为基于异构的 GNN 的最终结果。请注意,在我们的检查中,我们不会比较我们提出的每个 GNN 算法。因为每个算法设计的侧重点不同。我们将详细介绍每个 GNN 算法的竞争对手,报告其实验结果。


指标


我们评估了所提出方法的效率和有效性。该算法的执行时间可以用于简单地衡量效率。为了测量有效性,我们将算法应用于广泛采用的链接预测任务,在推荐等现实场景中发挥着重要作用。我们随机抽取一部分数据作为训练集,其余部分作为测试集。为了测量结果的质量,我们使用了四个常用的指标,即 ROC 曲线下的面积(ROC-AUC)、PR 曲线(PR-AUC)、F1 分数和命中召回率(HR Rate)。值得注意的是,每个度量在不同类型的边之间取平均值。


参数


对于所有的算法,我们设置嵌入向量的维度 d 为 20。

5.2.1 实验结果

AHEP 算法


AHEP 算法的目标是快速获得嵌入结果同时不会牺牲太多的精度。在表 7 中,我们展示了在 Taobao-small 数据集上,AHEP 算法和其他算法比较的结果。在图 10 中,我们说明了不同算法的时间和空间成本。


显然,我们有以下观察:(1)在 Taobao-small 数据集上,HEP 和 AHEP 是唯一两种能够在合理的时间和空间限制下产生结果的算法。然而,AHEP 比 HEP 快 2-3 倍,而且比 HEP 占用的内存要小的多。(2)在结果质量方面,AHEP 的 ROC-AUC 和 F1 评分与 HEP 相当。实验结果表明,利用最短的时间和空间,AHEP 可以产生与 HEP 相似的结果。




GATNE 算法


GATNE 的目标是处理具有顶点和边的异构和属性信息的图。我们将 GATNE 算法以及其竞争对手的比较结果显示在表 8 中。


显然,我们发现 GATNE 在所有度量指标方面都优于现有的方法。例如,在 Taobao-small 数据集上,GATNE 将 ROC-AUC、PR-AUC 和 F1 得分分别提高了 4.6%、1.84%和 5.08%。这仅仅是因为 GATNE 同时捕获顶点和边的异构信息以及属性信息。同时,我们发现 GATNE 的训练时间与 woker 节点数呈现线性关系。GATNE 模型收敛在不到两个小时内,在 150 个节点的分布式环境下。验证了 GATNE 方法的高效性和可扩展性。



Mixture GNN


我们比较了 Mixture GNN、DAE 和β*-VAE 方法。将嵌入结果应用于推荐任务的命中率如表 9 所示。注意,通过应用我们的模型,命中率提高了 2%左右。同样,这种改进也在大型网络中有重要贡献。



层次 GNN


我们比较了层次 GNN 和 GraphSAGE。结果如表 10 所示。分数显著提高 7.5%左右。这表明我们的层次 GNN 可以产生更具前景的嵌入结果。



Evolving GNN


我们比较了在多分类链接预测任务中 Evolving GNN 和其他方法。竞争对手包括具有代表性的 DeepWalk、DANE 、DNE 、TNE 和 GraphSAGE。这些竞争算法无法处理动态图,因此我们在动态图的每个快照上运行该算法,并报告所有时间戳的平均性能。Taobao-small 数据集的比较结果如表 11 所示。


我们很容易发现,在所有的度量上,Evolving GNN 优于所有其他方法。例如,在剧烈演变情况下,Evolving GNN 将微观(micro)和宏观(macro)F1 得分提高了 4.2%和 3.6%。这仅仅是因为我们提出的方法能够更好地捕获真实网络的动态变化,从而产生更具前景的结果。



贝叶斯 GNN


该模型的目标是将贝叶斯方法和传统 GNN 模型相结合。我们使用 GraphSAGE 作为基准线,并将结果与包含和不包含贝叶斯模型的结果进行比较。表 12 中给出了推荐结果的命中率。注意,我们同时考虑商品品牌和类别的粒度。显然,在应用贝叶斯模型时,命中召回率分别增加了 1%到 3%。请注意,这种改进可以为我们包含 900 万个 item 的网络带来显著的好处。


相关工作

在本节中,我们简要回顾了 GE 和 GNN 方法的最佳性能。根据第 1 节总结的四个挑战,我们将现有方法分类如下。

同质性

DeepWalk 首先通过随机游走在图上生成一个语料库,然后,在语料库上训练一个 skip-gram 模型。LINE 通过保留一阶和二阶近邻来学习节点的表征。NetMF 是一个统一的矩阵因式分解框架,用于理论上理解和改进 DeepWalk 和 LINE。Node2Vec 增加了两个参数来控制随机游走过程,而 SDNE 则提出了一种 structure-preserving 的嵌入方法。GCN 使用卷积运算合并邻居的特征表征。GraphSAGE 提供一种将结构特征信息与节点特征相结合的归纳方法。

异构性

对于具有多种顶点和(或)边的图,PMNE 提出了三种方法将复合边网络投影到连续向量空间。MVE 使用注意力机制将具有多视图的网络嵌入到协同后的单个向量表征中。MNE 为每个节点使用一个通用嵌入和多个不同边类型的附加嵌入,这些嵌入由统一的网络嵌入模型共同学习。Mvn2Vec 通过同时保存和协作建模来探索嵌入结果。HNE 将内容和拓扑结构共同考虑为统一的向量表征。PTE 利用标记信息构建大规模异构文本网络,并将其嵌入低位空间。Metapath2Vec 和 HERec 将基于元路径的随机游走形式化,以构造节点的异构领域,然后利用 skip-gram 模型进行节点嵌入。

属性

属性网络嵌入的目的是寻找低维向量表征,以 保留拓扑和属性信息。TADW 通过矩阵分解将顶点的文本特征融入到网络表征学习中。LANE 在保留相关性的同时,平稳地将标签信息整合到属性网络潜入中。AANE 使联合学习过程能够以分布式方式完成,从而加速属性网络嵌入。SNE 提出了一种通过捕获结构邻近度和属性邻近度来嵌入社交网络的通用框架。DANE 可以捕获高的非线性,并在拓扑结构和节点属性中保留各种近似性。ANRL 使用邻居增强自编码器对节点属性信息进行建模,并使用 skip-gram 模型捕获网络结构。

动态的

实际上,一些静态方法也可以通过基于静态嵌入更新新的顶点来处理动态网络。考虑到新的顶点对原始网络的影响,扩展了 skip-gram 方法来更新原始顶点的嵌入。“Dynamic network embedding by modeling triadic closure process”重点捕获学习网络嵌入的三元结构属性。考虑网络结构和节点属性,“Attributed network embedding for learning in a dynamic


environment”着重于更新 streaming 网络的特征向量和特征值。

结论

我们从目前实际的图数据问题中总结出了四个挑战,即大规模、异构、属性和动态。基于这些挑战,我们设计并实现了 AliGraph 平台,它为解决更多实际问题提供了系统和算法。今后,我们重点关注但不限于以下几个方面:


  1. 边级别和子图级别嵌入的 GNN;

  2. 更多的执行优化,例如,将计算变量与图数据在 GNN 中共同定位以减少跨网络流量,引入新的梯度优化方法,利用 GNN 的特点加速分布式训练,而不造成精度损失,在多 GPU 架构中更好地分配 work 节点;

  3. Early-stop 机制,有助于在没有预期结果的情况下,提前终止训练任务;

  4. Auto-ML,有助于从各种 GNN 中选择最佳方法。


论文原文链接:https://arxiv.org/pdf/1902.08730.pdf


公开数据集平台:https://tianchi.aliyun.com/dataset/dataDetail?dataId=9716


更多内容,请关注 AI 前线



2019-04-05 15:5934227
用户头像

发布了 27 篇内容, 共 19.2 次阅读, 收获喜欢 56 次。

关注

评论

发布
暂无评论
发现更多内容

阿里云搭建halo博客

乌龟哥哥

9月月更

测试

乌龟哥哥

9月月更

promise执行顺序面试题令我头秃,你能作对几道

loveX001

JavaScript

在vue的v-for中,key为什么不能用index?

bb_xiaxia1998

Vue

能不能手写Vue响应式?前端面试进阶

bb_xiaxia1998

Vue

【牛客刷题-算法】 NC19 连续子数组的最大和

清风莫追

数据结构与算法 10月月更

【牛客刷题-算法】1-算法入门-数据结构-栈

清风莫追

算法与数据结构 10月月更

spring-cloud-kubernetes与SpringCloud Gateway

程序员欣宸

Kubernetes spring-cloud 10月月更 spring-cloud-kubernetes

操作系统导论:分页

小白钊钊

操作系统 java; 10月月更

mysql中的事务隔离级别序列化如何实现

知识浅谈

MySQL 隔离级别 10月月更

linxu入门指令

乌龟哥哥

9月月更

启动 Hello Spring Security Boot 应用

HoneyMoose

【愚公系列】2022年10月 Go教学课程 015-运算符之赋值运算符和关系运算符

愚公搬代码

10月月更

大数据ELK(九):使用VSCode测试分词器

Lansonli

ELK 10月月更

面试官:说说Event Loop事件循环、微任务、宏任务

loveX001

JavaScript

问:React的setState为什么是异步的?

beifeng1996

React

React面试:谈谈虚拟DOM,Diff算法与Key机制

beifeng1996

React

When allowCredentials is true, allowedOrigins cannot contain the special value ___ since that cannot be set on the _Access-Contr

共饮一杯无

Java springboot 10月月更

多线程(进阶)

StackOverflow

编程 多线程安全 10月月更

【结构体内功修炼】结构体内存对齐(一)

Albert Edison

C语言 结构体 10月月更 内存对齐

计算机网络——MAC地址、IP地址

StackOverflow

编程 计算机网络 10月月更

大画 Spark :: 网络 (8)-Spark 网络中的“四次握手”Driver 如何获取 Executor 的 EndpointRef 烧脑

dclar

大数据 hadoop spark 源代码 spark源码

腾讯云搭建wordpress网站超详细介绍

乌龟哥哥

9月月更

浅谈云原生安全

HummerCloud

云原生 云安全 云原生安全

多线程——死锁的原因和解决方案

StackOverflow

编程 多线程 10月月更

Java中的自旋锁和适应性自旋锁是什么意思?其分类依据是啥?

wljslmz

Java 自旋锁 10月月更 适应性自旋锁

从特斯拉人形机器人亮相看AI人工智能模型落地面临的两个难题

felix

落地 机器人 AI人工智能

从单机百万tpmc到分布式千万tpmc,GaussDB性能提升的3个关键技术剖析

乌龟哥哥

9月月更

GaussDB(DWS)如何实现实时,批量和交付式查询一站式开发

乌龟哥哥

9月月更

【牛客刷题-算法】 NC13 二叉树的最大深度

清风莫追

二叉树 数据结构与算法 10月月更

【CSS】:什么是z-index属性?该属性有哪些取值类型?

翼同学

CSS 前端 样式设置 10月月更

阿里重磅发布大规模图神经网络平台AliGraph,架构算法解读_AI&大模型_阿里巴巴集团_InfoQ精选文章