【PinSage】Graph convolutional neural networks for web-scale recommender systems【论文精读】

1. 引言

论文的原文在:https://arxiv.org/pdf/1806.01973.pdf

1.1 前置知识

这里主要了解下GCN的产生,以及GCN的问题,其实GCN中主要存在两个问题:

①融合边的权重是固定的,所以提出了GAT

②全图计算,当图较大时,计算量大,甚至不能计算,所以提出了GraphSAGE

1.2 背景与意义

1.2.1 工程背景

论文Graph Convolutional Neural Networks for Web-Scale Recommender System的摘要中,提出一个在Pinterest开发和部署的大规模深度推荐引擎。这里提到的Pinterest是一家公司,它开发的网站像这样:

在这里插入图片描述

在这里插入图片描述

在该网站上,pin代表一个图片(在线内容的视觉标签,例如想烹饪的食谱,或者想买的衣服)。Pinterest是一个图片素材网站,pins是指图片,而boards则是图片收藏夹的意思。

它是第一次将GCN应用于工业级推荐系统的图算法。这个系统是斯坦福大学Pinterest公司合作的成果,其理论基础是斯坦福前一年的一篇GCN论文《Inductive Representation Learning on Large Graphs》。

主要的挑战是将基于GCN的节点嵌入的训练和推理扩展到具有数十亿节点和数百亿条边的图。扩展GCNs是很困难的,因为在大数据环境中工作时,它们设计的许多核心假设都被违背了。例如,所有现有的基于GCN的推荐系统都需要在训练过程中对完整的图普拉斯算子进行操作——当底层图有数十亿个节点并且其结构不断发展时,这个假设是不可行的。

在这里,论文提出了一个高度可扩展的GCN框架,已经在Pinterest的生产中开发和部署。论文的框架是一个名为PinSage的基于随机游动的GCN,它运行在一个拥有30亿个节点和180亿个边的大规模图上——这个图比典型的GCN应用大10000倍。PinSage利用几个关键的思想来大幅提高GCNs的可扩展性,在之后再提起。

1.2.2 理论背景(GraphSAGE图采样)

GCN采用全图计算,当图较大时,计算量大,甚至不能计算。

  • 一个重要的问题是:如果图数据量过大,则是否可以仿照传统深度学习的小批量训练方式呢?

  • 答案是:不可以,因为普通深度学习中训练样本之间并无依赖,但在图结构的数据中,节点与节点之间有依赖关系,如下图所示。

在这里插入图片描述

在这里插入图片描述

  • 普通深度学习的训练样本在空间中是一些散点,可以随意小批次采样,无论如何采样得到的训练样本并不会丢失什么信息,因为这些样本数据之间并不存在依赖。
  • 图神经网络训练样本之间存在边的依赖,如果随意采样,则会破坏样本之间关系信息。

传统的GCN算法通常通过将特征矩阵与完整图拉普拉斯矩阵的幂相乘来执行图卷积操作。这种方法需要处理完整的图数据,因此在大规模图上的计算和存储开销很大。所以有了图采样算法

图采样算法:GraphSAGE

2017年,斯坦福大学提出GraphSAGE图采样算法,该算法的核心思想是:小批次采样大图的子图

GraphSAGE提出的初衷是改变图学习中的惯有模式:直推式(transductive)学习,即在固定的图上直接学习每个节点的Embedding,每次学习只考虑当前数据。之前的图上的学习算法基本都是这一模式,如DeepWalk,LINE,GCN等都是如此。

这种模式的局限性非常明显,工业界的大多数业务场景中,图中的结构和节点都不可能是固定的,是会变化的,比如,用户集合会不断出现新用户,用户的关注关系集合也是不断增长的,内容平台上的文章更是每天都会大量新增。在这样的场景中,直推式学习需要不停地重新训练,为新的节点学习Embedding,这给图学习在工业界落地带来了极大的困难。

GraphSAGE提出了图上学习的新模式:归纳(inductive)学习,即学习在图上生成节点Embedding的方法而不是直接学习节点的Embedding。GraphSAGE正是以学习聚合节点邻居生成节点Embedding的函数的方式,将GCN扩展成归纳学习任务。

归纳学习的优势在于可以从特殊泛化到一般,对未知节点上的未知数据也有区分性。这个优势使得它能完美应对工业界的各种图动态变化的场景。

除了学习模式外,GraphSage相比GCN还有效率上的大幅提升,原有的GCN训练算法是针对全图的拉普拉斯矩阵计算,其计算复杂度之高也是GCN在工业界落地的一大阻碍,而GraphSage同样解决了这一问题。

  • GraphSAGE与传统GCN对比

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

GCN等transductive的方法,学到的是每个节点的一个唯一确定的embedding; 而GraphSAGE方法(inductive)学到的node embedding,是根据node的邻居关系的变化而变化的,也就是说,即使是旧的node,如果建立了一些新的link,那么其对应的embedding也会变化,而且也很方便地学到。

在这里插入图片描述

在了解图采样算法前,我们至少应该保证采样后的子图是连通的。例如上图图中,左边采样的子图就是连通的,右边的子图不是连通的。

GraphSAGE的核心:GraphSAGE不是试图学习一个图上所有node的embedding,而是学习一个为每个node产生embedding的映射。 GraphSage框架中包含两个很重要的操作:Sample采样和Aggregate聚合。这也是其名字GraphSage(Graph SAmple and aggreGatE)的由来。GraphSAGE 主要分两步:采样、聚合。GraphSAGE的采样方式是邻居采样,邻居采样的意思是在某个节点的邻居节点中选择几个节点作为原节点的一阶邻居,之后对在新采样的节点的邻居中继续选择节点作为原节点的二阶节点,以此类推。

不是对每个顶点都训练一个单独的embeddding向量,而是训练了一组aggregator functions,这些函数学习如何从一个顶点的局部邻居聚合特征信息(见下图)。每个聚合函数从一个顶点的不同的hops或者说不同的搜索深度聚合信息。测试或是推断的时候,使用训练好的系统,通过学习到的聚合函数来对完全未见过的顶点生成embedding。

采样的阶段首先选取一个点,然后随机选取这个点的一阶邻居,再以这些邻居为起点随机选择它们的一阶邻居。例如下图中,我们要预测 0 号节点,因此首先随机选择 0 号节点的一阶邻居 2、4、5,然后随机选择 2 号节点的一阶邻居 8、9;4 号节点的一阶邻居 11、12;5 号节点的一阶邻居 13、15

聚合具体来说就是直接将子图从全图中抽离出来,从最边缘的节点开始,一层一层向里更新节点

在这里插入图片描述

邻居采样的优点

  • 极大减少计算量
  • 允许泛化到新连接关系,个人理解类似dropout的思想,能增强模型的泛化能力

在这里插入图片描述

上图展示了邻居采样的优点,极大减少训练计算量这个是毋庸置疑的,泛化能力增强这个可能不太好理解,因为原本要更新一个节点需要它周围的所有邻居,而通过邻居采样之后,每个节点就不是由所有的邻居来更新它,而是部分邻居节点,所以具有比较强的泛化能力。

GraphSAGE 是Graph SAmple and aggreGatE的缩写,其运行流程可以分为三个步骤

  • 对图中每个顶点邻居顶点进行采样,因为每个节点的度是不一致的,为了计算高效, 为每个节点采样固定数量的邻居
  • 根据聚合函数聚合邻居顶点蕴含的信息
  • 得到图中各顶点的向量表示供下游任务使用

在这里插入图片描述

有了GCN为啥还要GraphSAGE?

  1. GCN灵活性差、为新节点产生embedding要求 额外的操作 ,比如“对齐”:

GCN是 直推式(transductive) 学习,无法直接泛化到新加入(未见过)的节点;
GraphSAGE是 归纳式(inductive) 学习,可以为新节点输出节点特征。

  1. GCN输出固定:

GCN输出的是节点 唯一确定 的embedding;

GraphSAGE学习的是节点和邻接节点之间的关系,学习到的是一种 映射关系 ,节点的embedding可以随着其邻接节点的变化而变化。

  1. GCN很难应用在超大图上:

无论是拉普拉斯计算还是图卷积过程,因为GCN其需要对 整张图 进行计算,所以计算量会随着节点数的增加而递增。
GraphSAGE通过采样,能够形成 minibatch 来进行批训练,能用在超大图上

GraphSAGE有什么优点?

采用 归纳学习 的方式,学习邻居节点特征关系,得到泛化性更强的embedding;

采样技术,降低空间复杂度,便于构建minibatch用于 批训练 ,还让模型具有更好的泛化性;

多样的聚合函数 ,对于不同的数据集/场景可以选用不同的聚合方式,使得模型更加灵活。

训练好的GraphSAGE如何得到节点Embedding?

假设GraphSAGE已经训练好,我们可以通过以下步骤来获得节点embedding,具体算法请看下图的算法1。

训练过程则只需要将其产生的embedding扔进损失函数计算并反向梯度传播即可。

对图中每个节点的邻接节点进行 采样 ,输入节点及其n阶邻接节点的特征向量
根据K层的 聚合函数 聚合邻接节点的信息
就产生了各节点的embedding

在这里插入图片描述

minibatch的子图是怎么得到的?

在这里插入图片描述

**在这里插入图片描述
**

和DeepWalk、Node2vec这些有什么不一样?

DeepWalk、Node2Vec这些embedding算法直接训练每个节点的embedding,本质上依然是直推式学习,而且需要大量的额外训练才能使他们能预测新的节点。同时,对于embedding的正交变换(orthogonal transformations),这些方法的目标函数是不变的,这意味着生成的向量空间在不同的图之间不是天然泛化的,在再次训练(re-training)时会产生漂移(drift)。 与DeepWalk不同的是,GraphSAGE是通过聚合节点的邻接节点特征产生embedding的,而不是简单的进行一个embedding lookup操作得到。

图采样算法:PinSAGE

在2018年,斯坦福大学发表PinSAGE,它对GraphSAGE做了一些改进,并应用在Pinterest上。

论文中这样表述:

In terms of algorithm design, our work is most closely related to Hamilton et al. (2017a)’s GraphSAGE algorithm and the closely related follow-up work of Chen et al. (2018). GraphSAGE is an inductive variant of GCNs that we modify to avoid operating on the entire graph Laplacian. We fundamentally improve upon GraphSAGE by removing the limitation that the whole graph be stored in GPU memory, using low-latency random walks to sample graph neighborhoods in a producer-consumer architecture. We also introduce a number of new training techniques to improve performance and a MapReduce inference pipeline to scale up to graphs with billions of nodes.

在算法设计方面,我们的工作与Hamilton et al. (2017a)的GraphSAGE算法以及Chen et al.(2018)密切相关的后续工作关系最为密切。GraphSAGE是GCNs的一个归纳变体,我们修改它以避免在整个图拉普拉斯算子上操作。我们从根本上改进了GraphSAGE,消除了整个图存储在GPU内存中的限制,在生产者-消费者架构中使用低延迟随机游走来采样图邻域。我们还引入了许多新的训练技术来提高性能,并引入了MapReduce推理管道来扩展到具有数十亿节点的图。

2. 论文主要内容

2.1 PinSAGE算法思想

2.1.1 CONVOLVE算法

在这里插入图片描述

在这里插入图片描述

Convolve算法相当于GraphSage算法的聚合阶段过程,是PinSage中的单层图卷积算法,实际执行中,对K层邻居的每一层都执行一遍图卷积以得到不同阶邻居的信息。主要操作包括:

1) 聚合邻居: 所有的邻居节点都经过一层dense层,再由聚合器或池化函数γ(如元素平均,加权和等)将所有邻居节点的信息聚合成一个vector nu(伪码第一行)

2)更新当前节点的embedding:将目标节点的当前embedding与聚合后的邻居向量nu拼接后再经过一层dense层(伪码第二行)

3)归一化:对目标节点embedding归一化(伪码第三行)使训练更加稳定

2.1.2 minibatch算法

在这里插入图片描述

首先,与GraphSage一样的是,伪码2~7行是邻居采样阶段,PinSage这里创新的一点是将GraphSage的随机采样改为重要性采样,从目标节点开始random-walk,计算各邻居节点的L1-normalized访问数作为邻居节点的重要性权重,最终选取top-t的邻居,这里每个节点的权重在后面聚合阶段也有用到。这个做法的好处一个是邻居节点个数可控(T=50),内存占用及计算耗时可预估,这一点其实GraphSage中的随机采样也能做到;另一个好处是聚合邻居节点的过程中可以根据邻居节点的重要性聚合,这一点是GraphSage所没有的。至于K层的采样顺序与每层的节点集合与GraphSage中都是一致的。

然后,仍然与GraphSage一样,伪码9~14行是邻居聚合阶段,只是这里都包含在局部图卷积Convolve操作里了。除了聚合邻居前经过一层dense层,其他过程如K层卷积的顺序,卷积操作节点范围等也都与GraphSage一致。

最后,伪码15~16行是与GraphSage不同的,目标节点与各自邻居聚合之后的embedding并不是直接替换目前节点的当前embedding,而是经过一层dense层后再替换。

2.2 PinSAGE训练

训练损失使用的是max-margin ranking loss,即最大化正例之间的相似性,同时保证与负例之间相似性小于正例间的相似性。如下:Pn(q) 为q对应的负例分布。

在这里插入图片描述

其中,Zq表示用户点击的pin(query)的Embedding,Znk表示负例的Embedding,Zi表示正例的Embedding,△表示一个超参数(正例与负例之间的阈值)。

训练过程中,尽量让query与负例的向量乘积减去query与正例的向量乘积小于一个阈值。

2.3 PinSAGE中工程技巧

以上就是PinSAGE算法中的思想,PinSAGE论文中还提出了大量的工程技巧。

2.3.1 负样本生成

PinSAGE采样了一个包含500个负例项的集合,这些负例项将在每个小批次中被所有训练示例共享。与独立为每个节点运行负采样相比,这大大减少了在每个训练步骤中需要计算的Embedding数量,且这两种采样方案之间几乎没有性能差异。

正常来说,我们对于每一个用户请求q都需要给一个正例i,同时我们也需要给很多个(500个)负例nk去进行训练。

对于每个nk都需要去计算它的Embedding Znk

假设有5个用户请求,我们给出了5个正例i,那我们需要再给出5*500=2500个负例nk,并需要计算2500个Znk

论文中给出的方法可以让我们找出500个所有q的公共负例(这500个pin对于其他所有pin来说都是负例),那么我们在计算Znk的时候就只需要计算500次了。

2.3.2 渐进式训练(Curriculum training)

通过上面的方式生成负样本固然可以减少很多计算量,但是也有一定的问题:太简单!?

为什么呢?

在论文中提到的Pinterest网站中的推荐系统,本应该能在超过20亿个物品的目录中找到与q最相关的1000物品进行推荐。

也就是需要200万个物品中区分/识别出1个物品。

但是使用500个随机负例物品,模型的分别率只有1/500。

因此,如果我们从20亿个物品中随机采样500个负例物品,这些物品任何一个与查询项q稍微相关的概率都很小,有很大概率在学习时不会产生良好的参数更新。

导致无法区分与查询项q稍微相关的物品,和与查询项q高度相关的物品。

为了解决上述问题,添加了“困难”的负例示例,即那些与查询项 q 有一定相关性,但与正例物品 i 相比相关性较低的物品。我们将这些称为“困难负例物品”。它们是通过根据与查询项 q 相关的个性化 PageRank 分数对物品在图中进行排名生成的。**排名在2000到5000之间的物品被随机采样作为困难负例物品。**这些困难负例示例与查询更相似,因此对于模型来说更具挑战性,迫使模型学会在更细粒度上区分物品。

在这里插入图片描述

如上图中,左边第一幅图是我们查询的物品,就是一个有着花和花瓶图案的刺绣,第二幅图使我们的正例也可以看出刺绣中有花的图案,第三幅图就是我们的随机负例,它是一个绿色的帽子,可以看出来与我们的查询物品毫不相关了,第四幅图是我们的困难负例,它也是刺绣,上面也有花,但是刺绣上的主要图案是一只鸟。

但是,如果训练过程全程都使用困难负例,会导致模型收敛速度减半,训练时长翻倍。

因此PinSage采用了一种Curriculum训练的方式,即第一轮训练只使用简单负样本,帮助模型参数快速收敛到一个loss比较低的范围;后续训练中逐步加入hard负样本,让模型学会将很相似的物品与些微相似的区分开,方式是第n轮训练时给每个物品的负样本集合中增加n-1个hard负样本。(hard sample number grows with epoch number.)

论文中提到,使用Curriculum训练可以获得12%的性能提升

2.3.3 样本的特征信息

Pinterest的业务场景中每个pin通常有一张图片和一系列的文字标注(标题,描述等),因此原始图中每个节点的特征表示由图片Embedding(4096维),文字标注Embedding(256维),以及节点在图中的度的log值拼接而成。其中图片Embedding由6层全连接的VGG-16生成,文字标注Embedding由Word2Vec训练得到。

2.3.4 on-the-fly convolutions

对于传统的GCN而言,它的计算需要通过将特征矩阵乘以全图拉普拉斯的幂来完成图卷积,这就会产生两个问题

  • 需要存储整个图并进行计算,对于工业级数据是不合理的。
  • 新增节点需要重新计算整个图。

那么论文中就提出on-the-fly convolutions,PinSAGE算法通过对节点周围的邻域进行采样并从采样邻域动态构建计算图来执行高效的局部卷积。这些动态构建的计算图指定了如何在特定节点周围执行局部卷积,并减轻了在训练过程中对整个图进行操作的需要。

2.3.5 基于random-walk的重要性采样

要了解PinSAGE中基于random-walk的重要性采样就得先回顾GraphSAGE中的采样:

在这里插入图片描述

在GraphSAEG中的采样:

  • 步骤1:随机选取一个或者若干个节点作为0号节点。
  • 步骤2:在0号节点的一阶邻居随机选取若干节点作为1号节点。
  • 步骤3:在刚刚选取的1号节点的一阶邻居中,不回头地随机选取若干个节点作为2号节点。该步骤也可以认为是随机选取0号节点通过1号节点连接的二阶邻居。
  • 步骤4:以此类推,在上图中的k是GraphSAGE的超参数,可以认为是0号节点的邻居阶数,若将k设定为5,则代表总共可以取0号节点的第5阶邻居。
  • 步骤5:将采样获得的所有节点保留边的信息后组成子图,并作为一次小批量样本输入神经网络中进行下游任务。

而在PinSAEG中的采样:

在这里插入图片描述

  • 步骤1:随机选取一个或者若干个节点作为0号节点。

  • 步骤2:以0号节点作为起始节点开始随机游走生成序列,游走方式可以采取DeepWalk或者Node2Vec。

  • 步骤3:统计随机游走中高频出现的节点作为0号节点的邻居,以便生成一个新的子图。出现的频率可作为超参设置。

  • 步骤4:将新子图中的边界节点(如上图中的1、9、13)作为新的起始节点,重复步骤2开始随机游走。

  • 步骤5:统计新一轮随机游走的高频节点,作为新节点在原来子图中接上。注意每个新高频节点仅接在他们原有的起始节点中(如节点1作为起始节点随机游走,所以生成节点序列中的高频节点仅作为节点1的邻居接在新子图中)。

  • 步骤6:重复上述过程k次,k为超参。将生成的新子图作为一次小批量样本输入神经网络中进行下游任务。或者进行自外而内的消息传递后,输出聚合了子图的所有信息的0号节点向量。

每个节点现在都有一个重要性分数,我们在池化/聚合步骤中使用它。

比如,节点1、9、13重要性分数都是2分。

这种基于重要性的邻域优点是双重的:

  • 选择固定数量的节点进行聚合,使我们能够在训练期间控制算法的内存占用。
  • 允许算法1在聚合邻居的向量时考虑邻居的重要性

2.3.6 基于重要性的池化操作

在这里插入图片描述

重要性池化体现在γ上,这一技巧用于上一节Convolve算法中的γ函数中,聚合经过一层dense层之后的邻居节点Embedding时,基于random walk计算出的节点权重做聚合操作。据论文描述,这一技巧在离线评估指标中提升了46%。

2.3.7 生产者消费者模式构建minibatch

在这里插入图片描述

在训练过程中,由于数十亿个节点的邻接列表和特征矩阵非常大,它们被存储在CPU内存中。然而,在PinSage的CONVOLVE步骤期间,每个GPU进程都需要访问邻居节点及其邻居的特征信息。从GPU访问CPU内存 中的数据效率较低。为了解决这个问题,论文使用re-index创建了一个子图 G’ =(V’,E’),其中包含节点及其邻居,这些节点将参与当前小批量的计算。还提取了一个小型特征矩阵,其中仅包含与当前小批量计算相关的节点特征,并且其顺序与G’中的节点索引一致。G‘的邻接列表和小特征矩阵在每个小批量迭代的开始时被传输到GPU中,因此在CONVOLVE步骤期间无需GPU和CPU之间的通信,极大地提高了GPU的利用率(几乎减半了训练时间)。

2.3.8 多GPU训练超大batch

前向传播过程中,各个GPU等分minibatch,共享一套参数,反向传播时,将每个GPU中的参数梯度都聚合到一起,执行同步SGD。为了适应海量训练数据的需要,增大batchsize从512到4096。为了在超大batchsize下快速收敛保证泛化精度,采用warmup过程:在第一个epoch中将学习率线性提升到最高,后面的epoch中再逐步指数下降

在论文发布会中作者PPT中写道:Compute graph have same structure == efficient GPU batching

2.3.9 使用MapReduce高效推断

在这里插入图片描述

当为不同的目标节点生成嵌入时,许多节点在多个层次上被重复计算。比如图上A节点就计算了三次。

邻居节点的重合,这就导致了计算embedding时必然会有重复的计算。而且随着邻居的阶数越高,这种重复的概率就越大,则会浪费更多的算力在重复计算上。

为了确保高效的推断,论文作者开发了一种MapReduce方法,可以在没有重复计算的情况下运行模型推断。

下面是一个MapReduce的简单例子:

在这里插入图片描述

数据流:

在这里插入图片描述

针对pin-to-board的二部图构建了两个MapReduce任务:

(1)执行聚合操作计算所有pins的Embedding(把所有的pins映射到一个低维度空间)。

(2)board的embedding是通过pooling其邻居节点(已采样的pins)的特征来获得。

两个任务执行完后第一层的卷积操作就算执行完了,如果有K层卷积操作,类似地再重复执行K-1遍这两个MapReduce任务,得到全图节点的Embedding后,导入到数据库中供下游应用查询。

3. 实验结果

3.1 Baselines

论文中给出这几个比较基准进行对比:

(1)Visual embeddings(Visual):仅包含图像特征。

(2)Annotation embeddings(Annotation):仅包含文本(注释)特征。

(3)Combined embeddings(Combined):包含图像、文本特征。

(4)Graph-based method(Pixie):Pinterest公司之前使用的模型,这种基于随机游走(random-walk的方法使用偏向性的随机游走通过模拟从查询pin q开始的随机游走生成排名分数。

(5)max-pooling:聚合函数γ=max,没有使用hard negative samples。

(6)mean-pooling:聚合函数γ=mean,没有使用hard negative samples。

(7)mean-pooling-xent:和(6)类似,但使用交叉熵损失函数。

(8)mean-pooling-hard:和(6)类似,但使用hard negative samples。

(9)PinSage:包含本论文中所有优化,使用importance pooling。

3.2 Offline Evaluation

在这里插入图片描述

在离线评估中,PinSage与前面几种方法进行了对比,发现其在Hit-rate以及MRR都明显优于之前的方法。

  • 其中Hit-rate表示点击率,比如我们点击某个pin,表示为q,然后推荐出了500个pin,如果用户点击的pin,记为i,在这500个推荐出来的pin之中,则为命中,否则不命中,那么这个推荐的命中率即为Hit-rate。

  • 而MRR全称为:Mean Reciprocal Rank,是在Hit-rate基础上在分母上做一定变换,如下。

在这里插入图片描述

3.3 User Studies

在用户调研中,会给用户一个查询项q,并给用户两个推荐pin,让用户选择哪一个更加合适,比如:

在这里插入图片描述

对于左侧的图来说,给出的q是很多盆栽,里面有着发芽的种子,而通过Visual方法推荐出来的结果,可能在表面上非常相似,但实际上并不是同样的东西,比如说左侧通过Visual方法推荐出的第一张图,其实是一些饭,同样,通过Annotation,Pixie推荐出来的pin也有一定的问题,效果不如PinSage推荐出来的。

统计出来的结果是这样的:

在这里插入图片描述

在大多数情况下PinSage都会得到比较高的支持率,实验中,如果没有2/3的人数赞成某一个方法则会被认为“平手”

可以看到PinSage方法获胜的比例是比较高的。

3.4 Eembedding

在这里插入图片描述

这幅图是通过随机选择1000个项目来可视化嵌入空间,并从PinSage嵌入中计算二维t-SNE坐标。我们观察到,项目Embedding的接近性与内容的相似性很好地对应,并且同一类别的项目嵌入到空间的同一部分。请注意,视觉上不同的事件但主题相同的项目在Embedding空间中也彼此接近,如图底部描述不同事件的时尚相关项目所示。

在这里插入图片描述

上图绘制了使用Annotation、Visual和PinSage嵌入的项目对之间余弦相似度的分布

如果所有的项目都在相同的距离(即,距离是紧密聚类的),那么嵌入空间没有足够的“分辨率”来区分不同相关性的项目。

随机项目对之间的余弦相似度分布证明了pingsage的有效性,它具有最分散的分布。

特别是,PinSage Embedding的余弦相似度峰度为0.43,而Annotation Embedding的峰度为2.49,Visual Embedding的峰度为1.20。

具有较广泛的分布的另一个重要优点是,它降低了后续LSH算法的碰撞概率,从而提高了在推荐过程中服务最近邻pins的效率。

4. 总结

总的来说,这篇论文是在2017年提出的GraphSAGE基础上的一个延伸,将其采样方式进行改变,并在工业级的数据上进行部署。能完成这样一份工业级数据上进行推荐的任务是不容易的。

在dgl的库中也有这个算法的一个demo,但是与本文的一些方法会有差异,我想大概是因为dgl库中要到的数据集(ml-1m)无法达到Pinterest那样的量级,所以我觉得使用了PinSage也不一定会比传统的GCN效果要好。但通过代码也可以更好的理解这个模型。

这也是我的一次论文分享,如果问题请指正。

参考

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
混合图神经网络用于少样本学习。少样本学习是指在给定的样本数量非常有限的情况下,如何进行有效的学习和分类任务。混合图神经网络是一种结合了图神经网络和其他模型的方法,用于解决少样本学习问题。 首先,混合图神经网络将图神经网络与其他模型结合起来,以充分利用它们在不同任务上的优势。图神经网络可以有效地处理图结构数据,并捕捉节点之间的关系,而其他模型可能在处理其他类型的数据时更加优秀。通过将它们结合起来,混合图神经网络可以在少样本学习中更好地利用有限的数据。 其次,混合图神经网络可以通过在训练过程中使用一些预训练模型来提高学习效果。预训练模型是在大规模数据集上进行训练得到的模型,在特定任务上可能有较好的性能。通过将预训练模型与图神经网络结合,混合图神经网络可以在少样本学习中利用预训练模型的知识,以更好地适应有限的数据。 最后,混合图神经网络还可以通过设计适当的注意力机制来提高学习效果。注意力机制可以使网络更加关注重要的特征和关系,忽略无关的信息。在少样本学习中,选择性地关注有限的样本和特征对于提高学习的效果至关重要。混合图神经网络可以通过引入适当的注意力机制来实现这一点,以提取和利用关键信息。 综上所述,混合图神经网络是一种用于少样本学习的方法,它结合了图神经网络和其他模型的优势,并利用预训练模型和适当的注意力机制来提高学习效果。这种方法对于在有限数据条件下执行有效的学习和分类任务非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值