经典论文阅读(一)--NCF: Neural Collaborative Filtering

NCF是神经网络版本的协同过滤,推荐算法的经典的方法之一。本文回顾一下NCF论文的要点。

摘要(What)

NCF是一种通用的框架,它可以表达和推广矩阵分解。
为了提升NFC的非线性建模能力,我们提出了使用多层感知机去学习用户-项目之间交互函数(interaction function)。

引言(Why)

矩阵分解(MF):
将用户和项目映射到共享潜在空间(shared latent space),使用潜在特征向量(latent features),用以表示用户或项目。这样一来,用户在项目上的交互就被建模为它们潜在向量之间的内积。
已经有大量的工作致力于增强MF,,,还有将其(MF)扩展到因子分解机(factorization machines)

每个用户和物品都被投射到潜在空间中,由隐向量表示。每个用户-物品interaction的预测是通过对应的隐向量的点积计算出来的:
   y ^ u i = f ( u , i p u , q i ) = p u T q i = k = 1 K p u k q i k ,      ( 2 ) \hat{y}_{u,i}=f(u,i|\bf{p}_{u},\bf{q}_{i})=\bf{p}_{u}^{T}\bf{q}_{i}=\sum\limits_{k=1}^{K}p_{uk}q_{ik},\ \ \ \ (2)
示例如图:
在这里插入图片描述

MF的局限性:

其性能可以被简单选择交互函数(内积)所阻碍。简单地将潜在特征的乘积线性组合的内积可能不足以捕捉用户交互数据的复杂结构。

(2.2矩阵分解)MF模型是用户和项目的潜在因素的双向互动,它假设潜在空间的每一维都是相互独立的并且用相同的权重将它们线性结合。因此,MF可视为潜在因素(latent factor)的线性模型。
解决该问题的方法之一是使用大量的潜在因子 K (就是潜在空间向量的维度)。然而这可能对模型的泛化能力产生不利的影响(e.g. 数据的过拟合问题),特别是在稀疏的集合上。在本文的工作中,我们通过使用DNNs从数据中学习交互函数,突破了这个限制。

主要贡献

  1. 我们提出了一种神经网络结构来模拟用户和项目的潜在特征,并设计了基于神经网络的协同过滤的通用框架NCF。

  2. 我们表明MF可以被解释为NCF的特例,并利用多层感知器来赋予NCF高水平的非线性建模能力。

  3. 我们对两个现实世界的数据集进行广泛的实验,以证明我们的NCF方法的有效性和对使用深度学习进行协作过滤的承诺。

3. 神经协同过滤(How)

我们首先提出的总体框架NCF,阐述NCF如何学习强调了隐式数据的二进制属性的概率模型。然后,我们展示了,MF能够表达为NCF 的推广(MF矩阵分解模型是NCF的一个特例)。我们探索DNNs在协同过滤上的应用,提出了NCF的一个实例,它采用了多层感知器(MLP)来学习用户-项目交互函数。最后,我们在NCF框架下结合了MF和MLP,提出了一种新的神经矩阵分解模型(neural matrix factorization model);它统一了在建模用户项目潜在结构方面,MF的线性建模优势和MLP的非线性优势。

3.1 通用框架

在这里插入图片描述

用损失函数来学习:

均方误差不适合处理隐性数据(implicit data)。这是因为对于隐含数据来说,目标值 yui 是二进制值1或0,表示 u 是否与 i 进行了互动。
为了赋予NCF这样的概率解释,我们需要将网络输出限制到[0,1]的范围内,通过使用概率函数(e.g. 逻辑函数sigmoid或者probit函数)作为激活函数作用在输出层 ϕout,这样一来预测分数 yˆui 就代表了项目 i 和用户 u 相关的可能性大小。
定义似然函数:
     p ( y , y P , Q , Θ f ) = ( u , i ) y y ^ u i ( u , i ) y ( 1 y ^ u i ) p(\bf{y},\bf{y^{-}}|{\bf P},{\bf Q},\Theta_f)=\prod_{(u,i)\in\bf{y}}\widehat{y}_{ui}\prod_{(u,i)\in\bf{y}^{-}}(1-\widehat{y}_{ui})

对似然函数取负对数(负对数可以用来表示Loss函数,而且还能消除小数乘法的下溢出问题),我们得到:

L = ( u , i ) y log y ^ u i ( u , i ) y log ( 1 y ^ u i ) = ( u , i ) y y y u i log y ^ u i + ( 1 y u i ) log ( 1 y ^ u i ) L=-\sum\limits_{(u,i)\in\bf{y}}\log\widehat{y}_{ui}-\sum\limits_{(u,i)\in\bf{y}^{-}}\log(1-\widehat{y}_{ui}) = - \sum\limits_{(u,i)\in\bf{y}\cup\bf{y}^{-}}y_{ui}\log\widehat{y}_{ui}+(1-y_{ui})\log(1-\widehat{y}_{ui})

这是NCF方法需要去最小化的目标函数,并且可以通过使用随机梯度下降(SGD)来进行训练优化。可以看出,这个函数和二元交叉熵损失函数(binary cross-entropy loss,又被成为log loss)是一样的。通过在NCF上使用这样一个概率处理(probabilistic treatment),我们把隐性反馈的推荐问题当做一个二分类问题来解决。

对于消极实例 y− ,我们在每次迭代均匀地从未观察到的相互作用中采样(作为消极实例)并且对照可观察到交互的数量,控制采样比率。虽然非均匀采样策略(例如,基于项目流行度进行采样)可能会进一步提高模型性能,我们将这方面的探索作为今后的工作。

3.2 广义矩阵分解

现在来证明MF是如何被解释为我们的NCF框架的一个特例。

由于输入层是用户(项目)ID中的一个one-hot encoding编码,所获得的嵌入向量可以被看作是用户(项目)的潜在向量。我们用 P T v u U {\bf{P}}^{T}{\bf{v}}_u^U 表示用户的潜在向量 p u {\bf{p}}_{u} Q T v i I {\bf{Q}}^{T}{\bf{v}}_i^I 表示项目的潜在向量 q i {\bf{q}}_{i}

我们定义第一层神经CF层的映射函数为:
       ϕ 1 ( p u , q i ) = p u q i , ( 8 ) \phi_{1}\left({\bf{p}}_{u},{\bf{q}}_{i}\right)={\bf{p}}_{u}\odot{\bf{q}}_{i}, \qquad\quad\quad (8)

其中 \odot 表示向量的逐元素乘积。然后,我们将向量映射到输出层:
     y ^ u i = a o u t ( h T ( p u q i ) ) ,      ( 9 ) \widehat{y}_{ui}=a_{out}\left({\bf h}^{T}\left({\bf{p}}_{u}\odot{\bf{q}}_{i} \right)\right),\ \ \ \ (9)

其中 a o u t a_{out} h {\bf h} 分别表示输出层的激活函数和连接权。直观地讲,如果我们将 a o u t a_{out} 看做一个恒等函数, h {\bf h} 权重全为1,显然这就是我们的MF模型

(就是说,首先用乘法层替换神经 CF 层,乘法层对两个输入执行元素级的乘法。然后利用线性激活函数,将乘法层到输出层的权值设为 K×1 维的固定单位矩阵。)这里 有同学补充了原文没有的这个图:
在这里插入图片描述
上图来自:
https://towardsdatascience.com/paper-review-neural-collaborative-filtering-explanation-implementation-ea3e031b7f96

在NCF的框架下,MF可以很容易地被泛化和推广。
如果我们用一个非线性函数 a o u t a_{out} ,将进一步推广MF到非线性集合,使得模型比线性MF模型更具有表现力。在本文的工作中,我们在NCF下实现一个更一般化的MF,它使用Sigmoid函数作为激活函数,通过log loss(第3.1.1节)学习 h {\bf h} 。我们称它为GMF(Generalized Matrix Factorization,广义矩阵分解)

3.3 多层感知机

简单地对向量的连接不足以说明用户和项目之间的潜在特征,这对协同过滤建模来说是不够的。为了解决这个问题,我们提出在向量连接上增加隐藏层,使用标准的MLP(多层感知机)学习用户和项目潜在特征之间的相互作用。在这个意义上,我们可以赋予模型高水平的灵活性和非线性建模能力,而不是GMF(广义矩阵分解)那样的简单使用逐元素相乘的内积来描述用户和项目之间的潜在交互特征。

激活函数选择ReLU,它更具生物合理性(biologically plausible),并且已经被证明不会导致过饱和;此外,它支持稀疏的激活(sparse activations),非常适合稀疏的数据,使模型不至于过拟合。我们的实验结果表明,ReLU的表现略好于双曲正切函数tanh和sigmoid。

至于网络结构的设计,一种常见的解决方案是设计一个塔式模型,其中,底层是最宽的,并且每个相继的层具有更少的神经元数量。通过在更高层使用少量的隐藏单元,它们可以从数据中学习到更多的抽象特征(K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In CVPR, 2016.)。

3.4 结合GMF和MLP

GMF,它应用了一个线性内核来模拟潜在的特征交互;MLP,使用非线性内核从数据中学习交互函数。
如何能够在NCF框架下融合GMF和MLP,使他们能够相互强化,以更好地对复杂的用户-项目交互建模?
一个直接的解决方法是让GMF和MLP共享相同的嵌入层(Embedding Layer),然后再结合它们分别对相互作用的函数输出。
     y ^ u i = σ ( h T a ( p u q i ) + W [ p u q i ] + b ) .      ( 11 ) \widehat{y}_{ui}=\sigma({\bf h}^{T}a({\bf p}_u\odot{\bf q}_i)+{\bf W}\begin{bmatrix}{{\bf p}_u}\\{{\bf q}_i}\end{bmatrix}+{\bf b}).\ \ \ \ (11)

这意味着,GMF和MLP必须使用的大小相同的embedding。对于数据集,两个模型的最佳嵌入尺寸差异很大,使得这种解决方案可能无法获得最佳的组合。

为了使得融合模型具有更大的灵活性,我们允许GMF和MLP学习独立的嵌入,并结合两种模型通过连接他们最后的隐层输出。

在这里插入图片描述

对于从头开始训练的 GMF 和 MLP ,我们采用自适应矩估计(Adam,Adaptive Moment Estimation)[20],它通过对不频繁的参数进行频繁和更大幅度的更新来适应每个参数的学习速率。Adam方法在两种模型上的收敛速度都比普通SGD快,并缓解了调整学习率的痛苦。在将预先训练的参数输入NeuMF之后,我们用普通SGD而不是Adam进行优化。 这是因为Adam需要保存更新参数的动量信息(momentum information)。因为我们用预先训练的模型参数初始化NeuMF,并且放弃保存动量信息,不适合用基于动量的方法进一步优化NeuMF。

评估方案。

为了评价项目推荐的性能,我们采用了leave-one-out方法评估,该方法已被广泛地应用于文献[1,14,27]。即:对于每个用户,我们将其最近的一次交互作为测试集(数据集一般都有时间戳),并利用余下的培训作为训练集。由于在评估过程中为每个用户排列所有项目花费的时间太多,所以遵循一般的策略[6,21],随机抽取100个不与用户进行交互的项目,将测试项目排列在这100个项目中。排名列表的性能由命中率(HR)和归一化折扣累积增益(NDCG)[11]来衡量。 没有特别说明的话,我们将这两个指标的排名列表截断为10。如此一来,HR直观地衡量测试项目是否存在于前10名列表中,而NDCG通过将较高分数指定为顶级排名来计算命中的位置。我们计算了每个测试用户的这两个指标,并求取了平均分。

实验和性能

这部分略。

猜你喜欢

转载自blog.csdn.net/rover2002/article/details/106414416