网络规模推荐系统的图卷积神经网络
网络规模推荐系统的图卷积神经网络
1. 摘要
最近的推荐系统中最突出的是称为图卷积网络(GCNs)的深度学习架构,通过使用神经网络循环地提取总体的特征信息(如,图1),而一个“卷积”操作从一个节点的单跳图邻域转换并聚集特征信息,并通过叠加多个这样的卷积操作,信息可以传播到图的远端。另外,与纯粹基于内容的深度模型不同的是,GCNs利用了内容信息和图结构。然而如何将GCN的训练和推理过程扩展到具有数十亿个节点和数百亿条边的图,却成为了一大难题。要知道GCNs的许多核心假设使与大数据工作环境矛盾的。故而该论文提出了一个可扩展的GCN框架PinSage,且提出了一种新的卷积和训练方法,以提高模型的鲁棒性和收敛性。
2. 关键技术介绍
动态卷积:PinSage算法通过对一个节点周围的邻居进行采样,并从采样的邻居中动态地构造一个计算图,从而执行高效的局部化卷积。这些动态构建的计算图(如,图1)指定了如何在特定节点上执行局部卷积,并减少了在训练期间对整个图进行操作的需要。
生产者-消费者的小批量构建:通过构建小批量训练模型,以确保在模型训练期间最大限度地利用GPU。
高效的MapReduce推理:对于给定的一个完全训练好的GCN模型,设计了一个高效的MapReduce管道,它可以分配训练好的模型来生成数十亿节点的嵌入,同时最小化重复计算。
随机游动构造卷积:取节点的全部邻居进行卷积(如,图1),会产生巨大的计算图形,因此该论文开发了一种利用短随机游动对计算图进行抽样的新技术。
重要度池:通过引入了一种基于随机游走相似性度量的方法来衡量节点特征在这个聚合中的重要性,从而在离线评估度量中获得了 46% 的性能提升。
课程训练:该论文设计了一个课程训练方案,在训练过程中给算法输入更复杂的样本,从而使结果获得了12%的性能提升。
3. 方法
3.1 问题解读
Pinterest 是一个内容发现应用,用户可以通过图钉(Pins)来互动。在此,任务是为图钉生成高质量的内嵌表示。为了学习这些内嵌表示,我们将 Pinterest 环境建模为一张由两套不相关的节点组成的二分图,I(图钉)和 C(钉板)。
除了图结构,假设图钉u∈I与实值属性 xu∈Rd相关。这些属性指定了一个条目的元数据或内容信息。
另外,为了说明方便和通用性,并不明确区分图钉和钉板节点,尽可能使用更通用的术语“节点”。
3.2 模型架构
使用局部化的卷积模块为节点生成嵌入,在输入节点的特征后学习神经网络,转换并累积图特征,最后计算节点内嵌表示。
前向传播算法: 在局部卷积中,根据节点的输入特征和周围的局部图结构,为每一节点u生成一个嵌入的Zu。基本的想法是:通过稠密神经网络对u邻域图v的内嵌表示Zv进行转换。然后,将累计得到的邻域向量nu与u的当前表示hu连接起来,并通过另一个稠密神经网络层进行转换。该算法的输出是u的一种同时包含了u自身信息和它的局部图邻域的信息的表示。
基于重要性的邻域N(u):假设u的邻域定义为对u最具有影响力的 T 个节点。通过模拟随机游走,从节点 u 开始,计算随机游走访问节点的L1正则化访问次数。所以,u的邻域定义变为正则化访问次数最高的前 T 个节点。
堆叠卷积:每次应用卷积操作算法得到一个新的节点表示,故而可以彼此间堆叠多个这样的运算,以获得更多的节点周围的局部图结构的信息。
3.3 模型训练
损失函数:为了训练模型的参数,使用了一个基于最大边缘的损失函数。基本思想是最大化正样本的内积的同时保证负样本的内积。对于单对节点嵌入(zq,zi): (q,i)∈L的损失函数为
其中Pn(q)为项目q的反例分布,∆为边缘超参数。
多GPU训练mini-batch数据的方法:对于多个GPU,首先将每个mini-batch划分为大小相等的部分。每个GPU获取mini-batch的一部分并使用相同的参数集执行计算。在反向传播之后,将所有GPU上的每个参数的梯度聚合在一起,并执行同步SGD的单个步骤。
生产者-消费者模型的mini-batch构建:从GPU访问CPU内存中的数据是低效的。为了解决这个问题,使用重索引技术来创建包含节点及其邻域的子图G′ = (V ′, E′),这些节点和邻域将参与当前mini-batch的计算。提取了一个只包含与当前mini-batch计算相关的节点特征的小特征矩阵,使其顺序与G’中节点的索引一致。在每个mini-batch迭代开始时,将G’和小特征矩阵的邻接表送入GPU,这样在卷积步骤中就不需要GPU和CPU之间的通信,大大提高了GPU的利用率。
负抽样:为了提高批量训练的效率,在每个小批量的训练样本中抽取了500个负条目。这大大节省了在每个训练步骤中需要计算的嵌入的数量,而不是对每个节点独立地进行负抽样。因为系统只需要确保正样本对(q, i)的内积比q和500个负样本的内积大即可,该采样方法对系统的要求太过“简单”以至于系统无法学习到足够细粒度的特征表示。
为解决上述问题,对于每个积极的训练实例,添加了“硬”否定的例子:有些与查询项q相关,但没有正向项i相关的项。它们是根据查询项q的PageRank得分对图中的项进行排序生成的。排名在2000-5000的项目被随机抽样作为硬否定项目。
课程培训方案:是为了解决训练过程中使用硬否定项使得训练收敛所需的时间间隔加倍得问题。在训练的第一个epoch中,没有使用硬否定项,使得算法能够快速地在参数空间中找到一个损失相对较小的区域。然后,在随后的epoch中添加硬否定项,使模型学习如何区分高度相关的节点和仅轻微相关的结点。在训练的第n阶段,为每个项目在消极项目集合中增加n - 1个硬否定项。
3.4 节点嵌入之MapReduce
使用算法计算节点的嵌入会因为节点的k邻域重叠而导致重复计算。为了确保有效的推理,该论文开发一种MapReduce方法,它可以在不重复计算的情况下运行模型推理。图3详细描述了二部图(Pinterest)上的数据流。
4.结论
在Pinterest上部署了PinSage,并对其进行了75亿个样本的训练,这些样本位于一个图上,其中有30亿个节点,180亿个边。与其他可扩展的基于内容的推荐算法相比,在离线排名指标中,PinSage方法在最佳表现基准的基础上提高了40%以上,在面对面的人工评估中,PinSage方法的推荐在60%的情况下是首选的,而A/B测试显示,在各种设置下,用户参与度提高了30%到100%。