GraphSAGE_biji

Graph SAGE:工业应用,是目前所有工业上图模型的雏形。归纳式学习,可以泛化到没有未参与训练的节点上。卷积部分可以有很多种,比如平均,pooling,lstm聚合,以及GCN聚合等。
GraphSAGE(Graph SAmple and aggreGatE)框架,工业应用,附带python 开源实现。归纳式学习,可以泛化到没有未参与训练的节点上。卷积部分可以有很多种,比如平均,pooling,lstm聚合,以及GCN聚合等。

区别于 GCN 使用邻接矩阵 A 使用图全局结构信息,这里是对 GCN 做了进一步精简,每次迭代只抽样取直接相邻的节点,通过训练聚合节点邻居的函数(卷积层),使GCN扩展成归纳学习任务,对未知节点起到泛化作用。

SAGE实现的归纳式,除了在一般的直推式学习到embedding的表示之外,多了一个学习的过程,即学习由邻居节点表示embedding的function要如何表示。所以,整个过程由两部分组成:1. embedding的表示的学习;2. 邻居节点泛化表示embedding function的学习。这两个学习过程可以放到一个学习过程中进行。

GraphSAGE_biji_第1张图片

Aggregate邻居结点的状态,作为邻居结点的一个“和”状态。
将这个“和”状态和当前结点的状态通过Concat操作和带非线性激活的全连接层融合到一起更新当前结点的状态。

抽样 1 阶、2 阶邻居节点,深度遍历迭代聚合 2 阶邻居。利用 2 阶邻特征,生成 1 阶邻居embedding,再聚合 1 阶embedding,生成目标节点 embedding。

需要注意的点

  1. 局部图卷积 PinSage,聚合邻居特征的方式生成节点embedding。
  2. 对于一阶、二阶采用不同的卷积核,这里可以改进为一阶好友、二阶好友、关注收藏夹,关注话题,多个通道(原文的一阶和二阶本身用不同的卷积核,类似于通道思想)
  3. 对节点u的邻居采样:从节点u开始随机游走,统计每个节点的访问次数(L1正则化),取访问次数top的节点作为u的邻居。(可以加入用户亲密度数据,根据亲密度score值直接采样)

实验结果

  1. 在GraphSAGE,对一跳邻居抽样 25 个,二跳邻居抽样 10 个。K=2 相比K=1 有10-15%的提升;但将K设置超过2,边际效果上只有0-5%的提升,但是计算时间却变大了10-100倍.所以2跳就 ok 了。
  2. GraphSAGE有监督版本比无监督效果好。
  3. LSTM和pool的效果较好
  4. 梯度下降(实现使用Adam优化器) 进行反向传播优化参数W和聚合函数内参数。(注意这里是两种参数,不是一种参数,不要混为一谈,之前的创新点2 是有问题的)

分析

GraphSage这个过程和原始的热传导过程是这么的相似,我们可以发现:

原始的热传导用所有直接相邻的邻居的简单加和作为邻居“和”状态,GraphSage用一个Aggregator作用于所有采样邻居(可以是二阶)得到“和”状态。本质是Aggregate,只是后者更加非线性,建模能力更强。
原始的热传导把邻居“和”状态和当前结点状态简单加权叠加作为融合态,GraphSage使用Concat操作加上神经网络非线性融合一把。本质是把邻居的“和”和本地的现有状态糅合得到本地新状态,依然只是后者更加非线性,建模能力更强。
原始热传导使用所有一阶邻居。GraphSage会采样邻居,因为实际上邻居可能很多全部算很慢,同时它还会采样高阶邻居。本质是主动融合几何上相近的单元。这里可能存在一个隐患,在高度非线性下,对周围邻居的采样的Aggregate是不是对周围所有邻居的Aggregate的无偏估计,本人知识有限,有待进一步考证。

所有的所有,还是“相邻”、“叠加”与“融合”三个关键词,只是解法更新、迭代、升级了。

理解了Laplacian变换和图上的热传播的关系,搞明白了Message Passing和有源无源状态下的均衡状态,再去看浩如烟海的paper和高票答案,相信你一定会有更深刻的理解

参考

  1. 如何理解 Graph Convolutional Network(GCN)物理学热传导角度解释
  2. GraphSAGE: GCN落地必读论文
  3. PinSage:第一个基于GCN的工业级推荐系统
  4. 论文笔记:GCN for Web-Scale Recommender Systems
  5. 菜鸟笔记之《Graph Convolutional Neural Networks for Web-Scale Recommender Systems》

你可能感兴趣的:(深度学习,paper研读,NRL)