es的master节点怎么启动 es ingest节点_es的master节点怎么启动

论文链接:https://arxiv.org/abs/1706.02216 github链接:https://github.com/williamleif/GraphSAGE

1 概括

在大规模图上学习节点embedding,在很多任务中非常有效,如学习节点拓扑结构的 DeepWalk 以及同时学习邻居特征和拓扑结构的semi-GCN。

但是现在大多数方法都是直推式学习, 不能直接泛化到未知节点。这些方法是在一个固定的图上直接学习每个节点embedding,但是大多情况图是会演化的,当网络结构改变以及新节点的出现,直推式学习需要重新训练(复杂度高且可能会导致embedding会偏移),很难落地在需要快速生成未知节点embedding的机器学习系统上。

此文提出的方法叫GraphSAGE,针对的问题是之前的网络表示学习的transductive,从而提出了一个inductive的GraphSAGE算法GraphSAGE是为了学习一种节点表示方法,即如何通过从一个顶点的局部邻居采样并聚合顶点特征,而不是为每个顶点训练单独的embedding

直推式(transductive)学习:从特殊到特殊,仅考虑当前数据。在图中学习目标是学习目标是直接生成当前节点的embedding,例如DeepWalk、LINE,把每个节点embedding作为参数,并通过SGD优化,又如GCN,在训练过程中使用图的拉普拉斯矩阵进行计算。
归纳(inductive)学习:平时所说的一般的机器学习任务,从特殊到一般:目标是在未知数据上也有区分性。

GraphSAGE基本思路:
既然新增的节点,一定会改变原有节点的表示,那么为什么一定要得到每个节点的一个固定的表示呢?何不直接学习一种节点的表示方法。去学习一个节点的信息是怎么通过其邻居节点的特征聚合而来的。 学习到了这样的“聚合函数”,而我们本身就已知各个节点的特征和邻居关系,我们就可以很方便地得到一个新节点的表示了。

2 GraphSAGE框架

本文提出GraphSAGE框架的核心是如何聚合节点邻居特征信息,本章先介绍GraphSAGE前向传播过程(生成节点embedding),不同的聚合函数设定;然后介绍无监督和有监督的损失函数以及参数学习

2.1 前向传播

a. 可视化例子:下图是GraphSAGE 生成目标节点(红色)embededing并供下游任务预测的过程:

es的master节点怎么启动 es ingest节点_inductive_02

  1. 先对邻居随机采样,降低计算复杂度(图中一跳邻居采样数=3,二跳邻居采样数=5)
  2. 生成目标节点embedding:先聚合2跳邻居特征,生成一跳邻居embedding,再聚合一跳邻居embedding,生成目标节点embedding,从而获得二跳邻居信息。(后面具体会讲)。
  3. 将embedding作为全连接层的输入,预测目标节点的标签。

b. 伪代码:

es的master节点怎么启动 es ingest节点_GraphSAGE_03

4-5行是核心代码,介绍卷积层操作:聚合与节点es的master节点怎么启动 es ingest节点_节点嵌入_04相连的邻居(采样)es的master节点怎么启动 es ingest节点_GraphSAGE_05层的embedding,得到第es的master节点怎么启动 es ingest节点_采样_06层邻居聚合特征es的master节点怎么启动 es ingest节点_节点嵌入_07,与节点es的master节点怎么启动 es ingest节点_节点嵌入_04es的master节点怎么启动 es ingest节点_GraphSAGE_05层embedding es的master节点怎么启动 es ingest节点_GraphSAGE_10 拼接,并通过全连接层转换,得到节点es的master节点怎么启动 es ingest节点_节点嵌入_04在第es的master节点怎么启动 es ingest节点_采样_06层的embedding es的master节点怎么启动 es ingest节点_节点嵌入_13

2.2 聚合函数

伪代码第5行可以使用不同聚合函数,本小节介绍五种满足排序不变量的聚合函数:平均、GCN归纳式、LSTM、pooling聚合器。(因为邻居没有顺序,聚合函数需要满足排序不变量的特性,即输入顺序不会影响函数结果

a.平均聚合:先对邻居embedding中每个维度取平均,然后与目标节点embedding拼接后进行非线性转换。

es的master节点怎么启动 es ingest节点_es的master节点怎么启动_14

b. 归纳式聚合:直接对目标节点和所有邻居embedding中每个维度取平均(替换伪代码中第5、6行),后再非线性转换:

es的master节点怎么启动 es ingest节点_inductive_15

c. LSTM聚合:LSTM函数不符合“排序不变量”的性质,需要先对邻居随机排序,然后将随机的邻居序列embedding es的master节点怎么启动 es ingest节点_GraphSAGE_16

d. Pooling聚合器:先对每个邻居节点上一层embedding进行非线性转换(等价单个全连接层,每一维度代表在某方面的表示(如信用情况)),再按维度应用 max/mean pooling,捕获邻居集上在某方面的突出的/综合的表现 以此表示目标节点embedding。

es的master节点怎么启动 es ingest节点_inductive_17

2.3 无监督和有监督损失设定

损失函数根据具体应用情况,可以使用基于图的无监督损失和有监督损失。

a. 基于图的无监督损失:希望节点es的master节点怎么启动 es ingest节点_GraphSAGE_18与“邻居”es的master节点怎么启动 es ingest节点_节点嵌入_04的embedding也相似(对应公式第一项),而与“没有交集”的节点es的master节点怎么启动 es ingest节点_采样_20不相似(对应公式第二项)。

es的master节点怎么启动 es ingest节点_es的master节点怎么启动_21

  • es的master节点怎么启动 es ingest节点_es的master节点怎么启动_22 为节点es的master节点怎么启动 es ingest节点_inductive_23通过GraphSAGE生成的embedding。
  • 节点es的master节点怎么启动 es ingest节点_es的master节点怎么启动_24是节点es的master节点怎么启动 es ingest节点_inductive_23随机游走访达“邻居”。
  • es的master节点怎么启动 es ingest节点_es的master节点怎么启动_26 表示负采样:节点 es的master节点怎么启动 es ingest节点_GraphSAGE_27 是从节点es的master节点怎么启动 es ingest节点_inductive_23的负采样分布 es的master节点怎么启动 es ingest节点_inductive_29 采样的,es的master节点怎么启动 es ingest节点_es的master节点怎么启动_30为采样样本数。
  • embedding之间相似度通过向量点积计算得到。

b. 有监督损失:无监督损失函数的设定来学习节点embedding 可以供下游多个任务使用,若仅使用在特定某个任务上,则可以替代上述损失函数符合特定任务目标,如交叉熵。

2.4 参数学习

通过前向传播得到节点es的master节点怎么启动 es ingest节点_GraphSAGE_18的embedding es的master节点怎么启动 es ingest节点_inductive_32 ,然后梯度下降(实现使用Adam优化器) 进行反向传播优化参数 es的master节点怎么启动 es ingest节点_es的master节点怎么启动_33

3.实验

3.1 实验目的

  1. 比较GraphSAGE 相比baseline 算法的提升效果;
  2. 比较GraphSAGE的不同聚合函数。

3.2 数据集及任务

  1. Citation 论文引用网络(节点分类)
  2. Reddit web论坛 (节点分类)
  3. PPI 蛋白质网络 (graph分类)

3.3 比较方法

  1. 随机分类器
  2. 手工特征(非图特征)
  3. deepwalk(图拓扑特征)
  4. deepwalk+手工特征
  5. GraphSAGE四个变种 ,并无监督生成embedding输入给LR 和 端到端有监督

(分类器均采用LR)

3.4 GraphSAGE 设置

  • K=2,聚合两跳内邻居特征
  • S1=25,S2=10: 对一跳邻居抽样25个,二跳邻居抽样10个
  • RELU 激活单元
  • Adam 优化器
  • 对每个节点进行步长为5的50次随机游走
  • 负采样参考word2vec,按平滑degree进行,对每个节点采样20个。
  • 保证公平性:所有版本都采用相同的minibatch迭代器、损失函数、邻居抽样器。
  • 实验测试了根据式1的损失函数训练的GraphSAGE的各种变体,还有在分类交叉熵损失上训练的可监督变体
  • 对于Reddit和citation数据集,使用”online”的方式来训练DeepWalk
  • 在多图情况下,不能使用DeepWalk,因为通过DeepWalk在不同不相交的图上运行后生成的embedding空间对它们彼此说可能是arbitrarily rotated的(见文中附录D)

3.5 运行时间和参数敏感性

  1. 计算时间:下图A中GraphSAGE中LSTM训练速度最慢,但相比DeepWalk,GraphSAGE在预测时间减少100-500倍(因为对于未知节点,DeepWalk要重新进行随机游走以及通过SGD学习embedding)
  2. 邻居抽样数量:下图B中邻居抽样数量递增,边际收益递减(F1),但计算时间也变大。 平衡F1和计算时间,将S1设为25。
  3. 聚合K跳内信息:在GraphSAGE, K=2 相比K=1 有10-15%的提升;但将K设置超过2,边际效果上只有0-5%的提升,但是计算时间却变大了10-100倍。

3.6 效果

  1. GraphSAGE相比baseline 效果大幅度提升
  2. GraphSAGE有监督版本比无监督效果好。
  3. LSTM和pool的效果较好

es的master节点怎么启动 es ingest节点_inductive_34