在LightGCN提出之前,最优秀的方法就是NGCF(将GCN直接用于推荐系统),由于当时没有做更深入的消融实验,直接将GCN中的:特征变换、非线性变换、邻居聚合都用了过来,虽然获得了不错的效果,但还有待简化。
上图中展示了LightGCN(2020)、NGCF(2019)、NCF(2017)三篇论文的关系图。LightGCN、NCF的一作也是NGCF的二作,所以三篇论文可以说是一组人的一个阶段的成果,有着紧密的联系。
NCF全称:Neural Collaborative Filtering。
当时(2017年),深度神经网络在语音识别、计算机视觉和自然语言处理方面取得了巨大成功。然而,深度神经网络在推荐系统上的探索相对较少。在这项工作中,作者开发基于神经网络的技术来解决推荐中的关键问题——基于隐式反馈的协同过滤。
通过将内积(传统MF)替换为可以从数据中学习任意函数的神经架构,作者提出了一个通用框架NCF,称基于神经网络的协同过滤。
上图中的前三行(用户)。
易得s23 ( 0.66 ) > s12 ( 0.5 ) > s13 ( 0.4 )。
因此,p1,p2和p3在隐空间中的几何关系可以绘制如图b所示。
而一个新用户u4,其输入如图a中虚线所示。可以得到s41 ( 0.6 ) > s43 ( 0.4 ) > s42 ( 0.2 ),即u4与u1最相似,其次是u3,最后是u2。
然而,如果一个MF模型把p4放在最接近p1 (两个选项如图1b虚线所示)的位置,会导致p4比p3更接近p2,不幸的是会导致较大的排名损失。
上面的例子说明了在低维潜在空间中使用简单且固定的内积来估计复杂的用户-项目交互可能导致的MF的局限性。现实数据是高维数据,而矩阵分解只能将高维 (high-dimension) 数据映射到低维 (low-dimension) 的嵌入层 (embedding),编码到嵌入层的信息并不能完全正确反映现实数据,因此会产生如图 (b) 的错误 “利用有限的、错误的信息预测出了错误的用户偏好”
在实际使用MF(矩阵分解)来训练和评估模型的过程中,往往会发现模型容易处于欠拟合的状态,究其原因是因为MF模型结构相对比较简单。这就要求模型有更强的表达能力, 在此动机的启发下,作者提出了NCF模型。
可以看到,NCF用“多层神经网络+输出层”的结构代替了MF模型中简单的内积操作。
这样做的优点是:
在NCF层也可以做混合,比如论文中给出的NCF混合模型整合了原始NCF模型和以元素积为互操作的MF模型:
这让模型具有了更强的组合特征和非线性能力。
在这里插播一下图表示学习是什么,因为之后的NGCF就会加上图信息了。
总体而言,图表示学习分为四个步骤:
NGCF全称:Neural Graph Collaborative Filtering。
用户和项目的学习向量表示(即Embedding)是现代推荐系统的核心。从早期的矩阵分解到最近出现的基于深度学习的方法,现有的工作通常通过从描述用户(或项目)的预先存在的特征(例如ID和属性)映射来获得用户(或项目)的Embedding。
上述方法的一个固有缺点是,隐藏在用户项目交互中的协作信号(collaborative signal)在嵌入过程中没有编码。因此,生成的Embedding可能不足以捕获协同过滤效果。
因此将用户项交互,更具体地说是二部图结构集成到嵌入过程中,开发一种新的推荐框架神经图协同过滤(NGCF)就油然而生。该框架利用用户-项图结构传播Embedding,使得用户-项目图中高阶连通性的表达建模能够实现,有效地将协作信号以显式方式注入到嵌入过程中,提高了推荐系统的性能和准确性。
简单来说,传统的推荐系统在设计嵌入层(Embeddings)时,要么是基于用户 (user) 设计,要么是基于物品 (item) 设计。
而NGCF的动机就是:将用户-物品 (user-item) 的协同信号 (collaborative signal)(或者说 user-item 的交互图信息)引入到嵌入层(Embeddings)的设计中。
它的创新点是:将图卷积层的理念引入到推荐系统中,通过堆叠多层图卷积层找到用户-物品 (user-item) 的高阶连通性(high-order connectivity)
这里,我们来理解一下什么叫:高阶连通性包含了携带协作信号的丰富语义?
上图展示了高阶连接的概念。推荐系统中感兴趣的用户是u1,其在左侧子图中的用户-物品互动图中用双圆圈标记。右侧子图显示了从u1扩展出的树状结构。高阶连接指的是从具有路径长度l大于1的任何节点到达u1的路径。这种高阶连接包含了携带协同信号的丰富语义。具体语义如下:
(1)路径u1 ← i2 ← u2表示u1和u2之间的行为相似性,因为两位用户都与i2互动;
(2)更长的路径u1 ← i2 ← u2 ← i4表明u1很可能会采纳i4,因为u1的相似用户u2在之前已经使用了i4。
(3)从路径长度l = 3的整体视角来看,物品i4对于u1的兴趣可能高于物品i5,因为有两条连接
NGCF模型框架包括三个主要部分:
( 1 )embedding layer:提供并初始化用户嵌入和项目嵌入的嵌入层;
( 2 )multiple embedding propagation layers:多个嵌入传播层,通过注入高阶连接关系来细化嵌入;
( 3 )prediction layer:预测层,聚合来自不同传播层的精化嵌入,并输出用户-项目对的亲和度分数。
其中传播层最为重要,是NGCF的核心,它又分为两个部分:信息构造、信息聚合。
其传播过程如下:
如上图所示,在嵌入传播(embedding propagation)过程中,可以捕获到类似u1←i2←u2←i4的协作信号。此外,来自i4的消息被显式地编码在e(3)u1(用红线表示)中。因此,堆叠多个嵌入传播层将协作信号无缝地注入到表示学习过程中。
传统的协同过滤使用浅层用户/项目embeddings。
NGCF使用GNN来传播浅embeddings。
这里我们介绍一下LightGCN的主要内容。
首先,NGCF从图卷积网络(GCN)中获得灵感,遵循相同的传播规则来改进嵌入:特征变换、邻域聚合和非线性激活。但它的设计相当沉重和繁琐——许多操作直接从GCN继承而来,没有理由。
因此,它们不一定对CF任务有用。其中,GCN最初是针对属性图上的节点分类提出的,每个节点都有丰富的属性作为输入特征;而在CF的用户-项目交互图中,每个节点(用户或项目)仅由一个one-hot ID描述,除了作为标识符之外没有具体的语义。在这种情况下,以ID嵌入为输入,进行多层非线性特征变换(这是现代神经网络成功的关键)不仅没有任何好处,反而增加了模型训练的难度。
LightGCN对NGCF做了简化,仅包含了GCN中最重要的组成部分-邻域聚合-用于协同过滤。
NGCF利用用户-项目交互图来传播embedding:
上面的公式可以看到,NGCF在很大程度上遵循了标准的GCN,包括使用非线性激活函数σ(·)和特征变换矩阵W1和W2。然而,作者认为这两种操作对于协同过滤来说并不那么有用。
在半监督节点分类中,每个节点都有丰富的语义特征作为输入,例如一篇论文的标题和摘要词。因此,进行多层非线性变换有利于特征学习。
然而,在协同过滤中,用户-项目交互图的每个节点只有一个ID作为输入,没有具体的语义。在这种情况下,执行多个非线性变换将无助于学习更好的特征;更糟糕的是,它可能会增加训练的困难。
上图中左侧是NGCF模型框架,在中间的Embedding Propagation Layers中可以看到特征变换W1、W2,可以看到非线性变换 ⨁ \bigoplus ⨁。而在右侧LightGCN模型框架中,只有简单的Normalized Sum。
论文中最重要的两点其实就是2.3小节的LGC与2.4小节的Layer Combination。
先来说一下LGC:
可以看到LightGCN传播embedding时做了很大的简化,从上面两个公式的区别就可以看出来。
在传统的GCN中,其实没有使用层组合,它直接通过卷积几层后得到的embedding作为输出,这样会有过平滑的问题:在卷积一定层数以后,所有节点都趋于统一,没有明显的区别,这显然是不好的。这里使用层组合方法来避免过平滑的问题:
假设我们设置3层的传播层。刚开始输入的embedding称为e(0),经过第一层传播之后得到e(1),经过第二层传播之后得到e(2),经过第三层传播之后得到e(3)。传统的方法就会直接输出e(3)作为结果,而层组合则会给e(0)、e(1)、e(2)、e(3)以一定的权重,比如LightGCN中,直接取权重为1/k+1,即平均。
我们执行层组合(Layer Combination)以获得最终表示的原因有三个:
(1)随着层数的增加,节点embedding会出现过平滑现象(over-smoothed)。因此,仅仅使用最后一层是有问题的。
(2)不同层的嵌入捕获不同的语义。例如,第一层对有交互的用户和项进行平滑处理,第二层对交互项(用户)上有重叠的用户(项)进行平滑处理,更高层捕获更高阶的接近度。因此,将它们结合起来会使表现更加全面。
(3)将不同层的嵌入与加权和结合起来,捕获了具有自连接的图卷积的效果,这是GCNs中的一个重要技巧。
模型预测的话就比较简单,直接使用内积就可以:
模型分析主要用于LightGCN简单设计的合理性。
在APPNP论文中,作者将GCN与个性化PageRank 联系起来,受此启发,他们提出了一种名为APPNP的GCN变体,该变体可以传播很长的范围而不存在过度平滑的风险。受个性化PageRank中teleport设计的启发,APPNP以(即第0层embedding)为起始特征对每个传播层进行补充,平衡了保留局部(即,保持靠近根节点以缓解过度平滑)和利用大邻域信息的需求。APPNP中的传播层定义为:
E ( k + 1 ) = β E ( 0 ) + ( 1 − β ) A ~ E ( k ) E^{(k+1)}=\beta E^{(0)}+(1-\beta)\tilde{A}E^{(k)} E(k+1)=βE(0)+(1−β)A~E(k)
其中β是控制传播中保留起始特征的teleport probability, A ~ \tilde{A} A~表示归一化邻接矩阵。在APPNP中,最后一层用于最终预测,即:
E ( k ) = β E ( 0 ) + ( 1 − β ) A ~ E ( k − 1 ) = β E ( 0 ) + β ( 1 − β ) A ~ E ( 0 ) + β ( 1 − β ) 2 A ~ 2 E ( k − 2 ) = β E ( 0 ) + β ( 1 − β ) A ~ E ( 0 ) + β ( 1 − β ) 2 A ~ 2 E ( 0 ) + … + ( 1 − β ) k A ~ k E ( 0 ) \begin{align} E^{(k)}&=\beta E^{(0)}+(1-\beta)\tilde{A}E^{(k-1)}\\ &= \beta E^{(0)}+\beta(1-\beta)\tilde{A}E^{(0)}+\beta(1-\beta)^2\tilde{A}^2E^{(k-2)}\\ &= \beta E^{(0)}+\beta(1-\beta)\tilde{A}E^{(0)}+\beta(1-\beta)^2\tilde{A}^2E^{(0)}+\ldots+(1-\beta)^k\tilde{A}^kE^{(0)} \end{align} E(k)=βE(0)+(1−β)A~E(k−1)=βE(0)+β(1−β)A~E(0)+β(1−β)2A~2E(k−2)=βE(0)+β(1−β)A~E(0)+β(1−β)2A~2E(0)+…+(1−β)kA~kE(0)
结合式LightGCN中Layer Combination公式可知,通过相应地设置αk,LightGCN可以完全恢复APPNP使用的预测嵌入。因此,LightGCN在对抗过度平滑方面具有APPNP的优势——通过适当设置α,我们允许使用较大的K进行可控过度平滑的远程建模。
LightGCN的可训练参数仅为第0层的嵌入,即 Θ = E ( 0 ) Θ = { E^{(0)} } Θ=E(0);即模型复杂度与标准矩阵分解( MF )相同。我们使用贝叶斯个性化排序( BPR )损失,这是一种成对的损失,它鼓励预测一个观察到的实体高于其未观察到的实体:
L B P R = − ∑ u = 1 M ∑ i ∈ N u ∑ j ∉ N u l n σ ( y ^ u i − y ^ u j ) + λ ∣ ∣ E ( 0 ) ∣ ∣ 2 L_{BPR} = -\sum_{u=1}^{M}\sum_{i \in N_u}\sum_{j \notin N_u}ln\sigma(\hat y_{ui} - \hat y_{uj}) + \lambda||E^{(0)}||^2 LBPR=−u=1∑Mi∈Nu∑j∈/Nu∑lnσ(y^ui−y^uj)+λ∣∣E(0)∣∣2
注意,训练中没有引入GCNs和NGCF中常用的dropout机制。原因在于LightGCN中没有特征变换权重矩阵,因此对嵌入层进行L2正则化足以防止过拟合。这体现了LightGCN的简单优势——比NGCF更容易训练和调优。
这是参考别人的注释,我觉得其中light_out这一步没什么问题,论文中其实也只是对embedding求平均,没有对不同的embedding设置不同的权值。
作者对NGCF进行消融研究,以判断NGCF中每个操作的有用性。新颖贡献在于说明GCN中的两种常见设计——特征变换和非线性激活——对协同过滤没有积极作用。
使用NGCF的作者发布的代码,在相同的数据拆分和评估协议上运行实验,以尽可能保持比较的公平性。(https://github.com/xiangwang1223/neural_graph_collaborative_filtering)
由于GCN的核心是通过传播来细化embedding,因此我们更感兴趣的是相同embedding大小下的嵌入质量。因此,我们将(即e*u=e(0)u||· · ·||e(L)u)的最终嵌入的获得方式改为(即e*u=e(0)u+· · ·+e(L)u)的求和。注意,这一变化对NGCF的性能影响不大,但使消融研究更能说明GCN改进的嵌入质量。
可以看出,去除特征变换(即NGCF-f )导致NGCF在两个数据集上都有一致的提升。相比之下,去除非线性激活对正确率影响不大。但是,如果在去除特征变换的基础上去除非线性激活(即NGCF-fn),性能提升明显。从这些观察中,我们得出结论:
( 1 )加入特征变换对NGCF产生了负面影响,因为在NGCF和NGCF-n模型中去除特征变换都显著提高了性能;
( 2 )加入非线性激活在包含特征变换时影响不大,但在特征变换失效时产生负面影响。
( 3 )总体而言,特征变换和非线性激活对NGCF有较大的负面影响,通过同时去除特征变换和非线性激活,NGCF-fn比NGCF (召回率相对提高9.57 %)有较大的提升。
从这些证据中,我们可以得出结论,NGCF的恶化源于训练困难,而不是过拟合。从理论上讲,NGCF比NGCF-f具有更高的表示能力,因为将权重矩阵W1和W2设置为单位矩阵,可以完全恢复NGCF-f模型。然而,在实践中,NGCF表现出比NGCF-f更高的训练损失和更差的泛化性能。而非线性激活的加入进一步加剧了表示能力和泛化性能之间的差异。