菜鸟笔记之《Graph Convolutional Neural Networks for Web-Scale Recommender Systems》

       本文作者来自斯坦福,都是大牛呀。这是一篇难得的GCN大型网络应用类的文章。再提一句,斯坦福在网络计算,社交网络,graph embedding领域很厉害,有自己的主页,公开了很多数据集合。不过很遗憾,这篇文章既没有公开数据,也没有公开代码。猜想可能是由于和Pinterest公司合作,涉及商业数据以及数据量高达十几T的原因。说实话,这篇文章的实验部分没有看懂,涉及到MapReduce并行计算多GPU单机训练,本人没有接触过这些技术,所以这部分自觉略过了,不过,也给自己提了个醒,图挖掘领域,工业界免不了的大图,分布式是逃不了的,未来要找时间学习这部分知识。如果有读者对这篇文章的实验部分有一些理解和见地,欢迎联系完善本文。
       言归正传,这篇文章的应用背景是推荐系统,用户提交需求,例如如何做一道菜,系统反馈推荐的菜单结果类似这样的场景。构建用户-商品二分图,千亿用户,十亿商品,借鉴GCN,提出PinSage算法。文章说的是pin and board,我就把它权且理解成商品和用户了。模型训练时在3亿节点,18亿边的网络上进行的,这个网络还是挺稠密的。本文将主要介绍该论文的模型算法部分。
       论文中模型设计的目的是为了得到节点的embedding表示,优化目标是正例内积最大化和负例内积小于给定阈值。这里说明一下,正例指的是查询项(query item)和推荐相关项(related item)embedding之间的距离;负例则指的是正例指的是查询项(query item)和推荐不相关项(unrelated item)embedding之间的距离。因此,关键是如何求得embedding。
       常见的graph embedding的方法,有node2vec,embedding等。这两种都是无监督方法,且仅根据网络结构,不考虑节点特征,因此,也正是这两种方式的普适性就导致对于特定的分类预测问题,效果表现并不好。还有就是最近很火的GCN,作为一种端到端的半监督学习方式,GCN在分类问题中,不仅考虑了节点特征,并且将特征和网络结构整合,通过将每个节点的邻居节点信息作用到自身,相当于一个消息传播的过程,同时也存在着难以调参、很难收敛的问题,而且传统的GCN在全图上做操作,对于大图而言,有很大的计算限制。门控图序列神经网络也具有计算限制,一般在节点数小于1万的网络中起作用,图递归神经网络笔者目前不是很了解,学习后会另写一篇分享。因此,本文提出了局部图卷积模型。


局部图卷积示意图

       如图所示,下半部分的结构分别是以A,B,C,D,E,F为根节点的分支,每个分支包含各根节点的两度邻居节点。我们可以卡出 ,对于不同的节点,其邻居节点个数不同,这就遇到在上一篇文章我们提到的问题,节点的邻居节点个数不同以及邻居节点的无序性。这篇文章是这样解决的:

  1. 邻居数目不一致:通过将每个邻居节点的特征在对应维度上求平均或者做最大池化,最终带节点的特征表示还是原来的n维;
  2. 邻居无序问题转化为邻居节点重要性问题:我们可以看到在根节点的子树中,有些节点多次出现,因此根据当前节点(根节点)的子节点访问次数来确定邻居节点的重要程度。
           论文提出的PinSage算法的核心是局部卷积操作(如下图)。
    算法

    该算法中要解决的问题是:
           该网络是考虑邻居节点重要性,所以有一个邻居权重向量在算法一第一行,是通过卷积过程中对邻居节点访问次数来决定的(上文第2点)。通过一个全连接网络以及Relu激活函数提取邻居特征,然后通过函数将邻居特征与权值矩阵作用得到,作者说具体是通过聚合池化起作用,但是没有详述。这一步可以理解成对u节点的邻居节点进行采样,通过全连接操作按照邻居重要性得到一个聚合的邻居向量表示;算法第二行将该向量和节点当前表示拼接,通过另一个全连接层得到;第三行做了一个规范化操作,因为随着不断将邻居节点信息聚合到自身节点上,注意在这个迭代过程中,每个自身节点也是其他节点的邻居节点,因此为了保证训练过程中节点向量中每一维量级的稳定,加入了基于范式的规范化的操作。
           最后总结一下,这篇论文的主要工作是提出一种随机游走加局部图卷积的用于生成节点embedding表示的模型。

作者原创,欢迎交流,如需转载请先联系作者。

你可能感兴趣的:(菜鸟笔记之《Graph Convolutional Neural Networks for Web-Scale Recommender Systems》)