返回介绍

数学基础

统计学习

深度学习

工具

Scala

十六、NCF [2017]

发布于 2023-07-17 23:38:24 字数 34882 浏览 0 评论 0 收藏 0

  1. 在信息爆炸的时代,推荐系统在缓解信息过载information overload 方面发挥着举足轻重的作用,并且已经被许多在线服务广泛采用,包括电商、在线新闻、社交媒体网站。个性化推荐系统的关键在于根据用户历史交互(例如评分、点击)对user-item 的偏好进行建模,这就是所谓的协同过滤collaborative filtering

    在各种协同过滤技术中,矩阵分解matrix factorization: MF 是最流行的一种,它将用户和 item 投影到共享的潜在空间latent space 中,使用潜在特征向量来表示用户和 item。此后,用户对 item 的交互被建模为它们潜在向量latent vector 的内积。通过Netflix Prize 的推广,MF 已经成为基于潜在因子模型latent factor model-based 的推荐的事实上的方法。

    许多研究工作致力于增强 MF,例如将其与基于邻域的模型neighbor-based model 相结合、将其与item 内容的主题模型topic model 相结合、将其扩展到分解机factorization machine 从而进行特征的通用建模。

    尽管 MF 对于协同过滤很有效,但是众所周知,它的性能可能会受到简单选择“内积” 作为交互函数的阻碍。例如,对于基于显式反馈的评分预测任务,众所周知,可以通过将 user bias 项和 item bias 项添加到交互函数中从而提高 MF 模型的性能。虽然这对于内积算子而言似乎只是一个微不足道的调整,但是它指出了设计一个更好的、专用的交互函数来建模用户和 item 之间潜在特征交互的积极效果。内积算子,它仅仅简单地线性组合多个潜在特征latent feature 的乘法,可能不足以捕获用户交互数据的复杂结构。

    在论文 《Neural Collaborative Filtering》 中,作者探讨了使用深度神经网络从数据中学习交互函数,而不是像以前许多工作那样人工设计交互函数。神经网络已经被证明能够逼近任何连续函数,而且最近发现神经网络deep neural networks: DNNs 在多个领域都有效 ,从计算机视觉、语音识别到文本处理。然而,与大量关于 MF 方法的文献相比,使用 DNN 进行推荐的工作相对较少。尽管最近的一些进展已经将 DNN 应用于推荐任务并显示出有希望的结果,但是它们主要使用 DNN 来建模辅助信息auxiliary information,例如item 的文本描述、音乐的音频特征、图像的视觉特征。在建模关键的协同过滤效果方面,他们仍然采用 MF,使用内积来结合用户潜在特征和 item 潜在特征。论文通过形式化formalize 用于协同过滤的神经网络建模方法来解决上述研究问题(利用神经网络来建模交互函数)。通过采用可以从数据中学习任意函数的神经网络架构代替内积,论文提出了一个名为 Neural Network-based Collaborative Filtering: NCF 的通用框架。

    论文聚焦于隐式反馈implicit feedback,隐式反馈通过视频观看、商品购买、item 点击等行为间接反映了用户的偏好。和显式反馈explicit feedback (即显式评分rating和评论review)相比,隐式反馈可以自动跟踪,因此更容易被内容提供商content provider 所收集。然而,隐式反馈的使用更具有挑战性,因为无法观察到用户满意度user satisfaction,并且负反馈negative feedback 天然的稀疏性。在本文中,作者探讨了如何利用DNN 对包含噪音的隐式反馈信号进行建模。

    论文的主要贡献:

    • 论文提出了一个神经网络架构来对用户和 item 的潜在特征进行建模,并设计了一个基于神经网络的协同过滤通用框架 NCF
    • 论文表明: MF 可以被解释为 NCF 的特殊情况,并利用多层感知机赋予 NCF 模型高度的非线性。
    • 论文在两个真实数据集上进行了大量的实验,从而证明 NCF 方法的有效性,以及深度学习在协同过滤方面的前景。
  2. 相关工作:

    • 隐式反馈:虽然关于推荐的早期文献主要集中在显式反馈,但最近人们越来越关注隐式数据。具有隐式反馈的协同过滤 collaborative filtering: CF 任务通常被形式化为 item 推荐问题,其目的是向用户推荐一个简短的 item 列表。和显式反馈工作广泛解决的评分预测相比,解决 item 推荐问题更实用但更具有挑战性。一个关键的洞察 insight 是对缺失数据进行建模,而这些缺失数据总是被显式反馈的工作所忽略。

      为了使用隐式反馈为 item 推荐定制tailor 潜在因子模型,早期工作应用了两种均匀加权策略:将所有缺失数据视为负样本,或者从缺失数据中均匀采样负样本。最近,《Fast matrix factorization for online recommendation with implicit feedback》《Modeling user exposure in recommendation》 提出了专门的模型来对缺失数据进行加权。 《A generic coordinate descent framework for learning from implicit feedback》 为基于特征的分解模型开发了一种隐式坐标下降implicit coordinate descent: iCD 解决方案,实现了 state-of-the-artitem 推荐性能。

    • 基于神经网络的推荐:早期先驱工作 《Restricted boltzmann machines for collaborative filtering》 提出了一种两层受限玻尔兹曼机 Restricted Boltzmann Machine: RBM 来建模用户对 item 的显式评分。《Ordinal boltzmann machines for collaborative filtering》 扩展了该工作从而对评分的保序性质ordinal nature 进行建模。

      最近,自编码器已经成为构建推荐系统的流行选择。《Autorec: Autoencoders meet collaborative filtering》 提出了基于用户的 AutoRec,其思想是学习隐藏的结构 hidden structure,这些结构可以根据用户的历史评分作为输入从而重构用户的评分。在用户个性化方面,该方法与 item-item 模型(将用户表示为他/她的历史评分 item )具有相似的精神。

      为了避免自编码器学习恒等函数 identity function 从而无法泛化到未见unseen 的数据,降噪自编码器 denoising autoencoder: DAE 应用于从故意损坏的输入中学习。

      最近 《A neural autoregressive approach to collaborative fi ltering》 提出了一种用于 CF 的神经自回归方法。

      虽然这些工作为神经网络解决 CF 的有效性提供了支持,但是其中大多数都专注于显式评分,并仅对观察到的数据进行建模。结果,对于从只有正样本的隐式数据中学习的任务,它们很容易失败。

    • 神经网络用于隐式反馈的推荐:最近的一些工作探索了基于隐式反馈的深度学习模型来进行推荐,但是他们主要使用 DNN 对辅助信息进行建模,例如item 的文本描述、音乐的声学特征、用户的跨域行为、以及知识库中的丰富信息。然后,将 DNN 学到的特征与用于协同过滤的 MF 集成。

      与我们的工作最相关的工作是 《Collaborative denoising auto-encoders for top-n recommender systems》 ,它为 CF 提供了一个带有隐式反馈的协同降噪自编码器 collaborative denoising autoencoder: CDAE。 和 DAE-based CF 相比,CDAE 额外地将一个用户节点插入到自编码器的输入中从而重建用户的评分。如作者所示,当应用恒等映射作为 CDAE 的隐层激活函数时,CDAE 等效于 SVD++ 模型。这意味着虽然 CDAE 是一种用于 CF 的神经网络建模方法,但是它仍然应用线性核linear kernel (即内积)来对 user-item 交互进行建模。这可以部分解释为什么 CDAE 使用更深的层不会提高性能。

      CDAE 不同,我们的 NCF 采用双路架构,使用多层前馈神经网络对 user-item 交互进行建模。这允许 NCF 从数据中学习任意函数,比固定的内积函数更强大、更具表达能力。

    • 其它工作:沿着类似的路线,在知识图谱文献中已经深入研究了学习两个实体之间的关系。已有很多关系型机器学习relational machine learning method 方法被提出。与我们的方法最相似的一个是神经张量网络 Neural Tensor Network: NTN ,它使用神经网络来学习两个实体的交互并展示层强大的性能。在这里,我们关注协同过滤的不同 problem setting 。虽然将 MFMLP 相结合的 NeuMF 的思想部分受到 NTN 的启发,但是在允许 MFMLP 学习不同的 embedding 集合方面,我们的 NeuMFNTN 更灵活、更通用。

      最近,谷歌公布了他们用于 App 推荐的 Wide & Deep 方法。Deep 组件同样在特征 embedding 之上使用 MLP,据报道它具有很强的泛化能力。虽然他们的工作重点是结合用户和 item 的各种特征,但是我们的目标是探索纯协同过滤系统的 DNN 。我们表明,DNN 是对 user-item 交互建模的一个很有前景的选择。据我们所知,以前从未有工作对此进行研究过。

16.1 模型

16.1.1 基本概念

  1. 我们首先将问题形式化并讨论现有的带隐式反馈的协同过滤解决方案。然后我们简短地概括了广泛使用的 MF 模型,并强调其内积造成的局限性。

  2. 从隐式数据中学习Learning from Implicit Data :令 $ M $ 表示用户数量、 $ N $ 表示item 数量。定义从用户隐式反馈implicit feedback 得到的 user-item 交互矩阵 $ \mathbf Y\in \mathbb R^{M\times N} $ 为:

    $ y_{u,i} = \begin{cases} 1,& \text{if } (u,i) \text{ interaction is observed }\\ 0,&\text{else} \end{cases} $

    注意:

    • $ y_{u,i} = 1 $ 表示用户 $ u $ 和 item $ i $ 之间存在交互,然而这并不意味着用户 $ u $ 真的喜欢 item $ i $ 。
    • $ y_{u,i} = 0 $ 表示用户 $ u $ 和 item $ i $ 之间不存在交互,这也并不意味着用户 $ u $ 真的不喜欢 item $ i $ ,可能是因为用户 $ u $ 没注意到 item $ i $ 。

    这给从隐式数据中学习带来了挑战,因为隐式数据仅提供了关于用户偏好users' preference 的带噪音的信号noisy signals 。虽然观察到的 item 至少反映了用户对item 的兴趣,但是未观察到的 item 可能只是缺失的数据missing data,并且天然natural 缺乏负反馈negative feedback

    带隐式反馈的推荐问题被表述为估计 $ \mathbf Y $ 中未观察到的 item 的得分score 的问题,其中这些score 用于对 item 进行排序。model-based 方法假设数据可以由底层模型生成(或描述)。形式上, 模型可以抽象为学习:

    $ \hat y_{u,i} = f(u,i\mid \Theta) $

    其中:

    • $ \hat y_{u,i} $ 表示对交互 $ y_{u,i} $ 的预估分predicted score
    • $ \Theta $ 表示模型参数; $ f(\cdot) $ 表示将模型参数映射到预估分的函数,我们称之为交互函数interaction function

    为了估计参数 $ \Theta $ ,现有方法通常遵循优化目标函数的机器学习范式。文献中最常用的目标函数有两种:point-wise losspair-wise loss

    • 作为显式反馈explicit feedback 大量工作的自然延伸,point-wise loss 通常定义为最小化 $ \hat y_{u,i} $ 和目标值 $ y_{u,i} $ 之间的平方损失。为了处理negative data 的缺失,他们要么将所有未观察到的item 视为负样本、要么从未观察到的 item 中采样负样本。
    • pair-wise loss 的思想是:观察到的 item 应该比未观察到的 item 的排名更高。因此,它不是最小化 $ \hat y_{u,i} $ 和目标值 $ y_{u,i} $ 之间的损失,而是pair-wise learning 最大化观察到的 item $ \hat y_{u,i} $ 和未观察到的 item $ \hat y_{u,j} $ 之间的边距 margin

    更进一步地,我们的 NCF 框架使用神经网络参数化交互函数 $ f(\cdot) $ 从而估计 $ \hat y_{u,i} $ 。因此,NCF 自然支持 point-wise learningpair-wise learning

  3. 矩阵分解Matrix Factorization: MFMF 将每个用户、每个 item 都和潜在特征向量latent feature vector相关联。令 $ \mathbf{\vec p}_u $ 表示用户 $ u $ 的潜在特征向量, $ \mathbf{\vec q}_i $ 表示用户 $ i $ 的潜在特征向量。MF 估计estimate 交互 $ y_{u,i} $ 为 $ \mathbf{\vec p}_u $ 和 $ \mathbf{\vec q}_i $ 的内积:

    $ \hat y_{u,i} = f\left(u,i\mid \mathbf{\vec p}_u,\mathbf{\vec q}_i\right) = \mathbf{\vec p}_u^\top \mathbf{\vec q}_i = \sum_{k=1}^K p_{u,k}\times q_{i,k} $

    其中 $ K $ 为潜在空间latent space 的维度。

    正如我们所看到的,MF 对用户潜在因子latent factoritem 潜在因子的双向交互two-way interaction 进行建模,假设潜在空间的每个维度彼此独立,并以相同的权重线性组合它们。因此,MF 可以视为潜在因子的线性模型。

    下图说明了内积函数如何限制 MF 的表达能力。为了更好地理解示例,有两个设置settings 需要事先说明。

    • 首先,因为 MF 将用户和 item 都映射到相同的潜在空间,所以两个用户之间的相似性也可以用内积来衡量(或者它们潜在向量之间的余弦相似度来衡量)。
    • 其次,不失一般性,我们使用 Jaccard 系数(用户A 观察到的item 集合与用户B 观察到的 item 集合之间的 Jaccard 系数)作为 MF 需要恢复的、两个用户之间的真实相似度ground-truth similarity

    我们首先关注图 (a) 中的前三行(用户)。很容易有 $ s_{2,3}(0.66) \gt s_{1,2}(0.5)\gt s_{1,3}(0.4) $ 。因此, $ \mathbf{\vec p}_1,\mathbf{\vec p}_2,\mathbf{\vec p}_3 $ 在潜在空间中的几何关系可以如图 (b) 所示绘制。

    现在,让我们考虑一个新的用户 $ u_4 $ ,其输入如图 (a) 中的虚线所示。所以我们有 $ s_{4,1}(0.6)\gt s_{4,3}(0.4)\gt s_{4,2}(0.2) $ ,这意味着 $ u_4 $ 最类似于 $ u_1 $ 、其次是 $ u_3 $ 、最后是 $ u_2 $ 。但是,如果 MF 模型将 $ \mathbf{\vec p}_4 $ 放置在最接近 $ \mathbf{\vec p}_1 $ 的位置(图 (b) 中用虚线显示的两个选择),则会导致 $ \mathbf{\vec p}_4 $ 更靠近 $ \mathbf{\vec p}_2 $ 而不是更靠近 $ \mathbf{\vec p}_3 $ ,而这会导致更大的排序损失ranking loss

    这个例子显示了MF 使用简单的、且固定的内积来估计低维潜在空间中复杂的 user-item 交互的限制。在这个例子中,我们注意到解决该问题的一种方法是使用更大的潜在因子数量 $ K $ (即更高维的潜在空间)。 然而,这种方法可能会对模型的泛化能力产生不利影响(如,过拟合),尤其是在数据稀疏的环境中。

  4. 在本文中,我们通过从数据中使用 DNN 学习交互函数来解决MF 的这个限制。

    • 我们首先介绍了通用的 NCF 框架,详细说明了如何学习 NCF 的概率模型,该模型强调了隐式数据的二元属性binary property
    • 然后我们证明了 MF 可以在 NCF 下表达和推广。
    • 为了探索用于协同过滤的 DNN,我们接着提出 NCF 的实例化,使用多层感知机multi-layer perceptron: MLP 来学习 user-item 交互函数。
    • 最后,我们提出了一个新的神经矩阵分解模型,它在 NCF 框架下集成了 MFMLP,从而统一了 MF 的线性和 MLP 的优势来建模 user-item 潜在结构latent structures

16.1.2 NCF 通用框架

  1. 为了允许全full 神经网络来处理协同过滤, 我们采用 multi-layer representation 来建模 user-item 交互 $ y_{u,i} $ ,如下图所示。其中前一层的输出作为后一层的输入。

    • 底部输入层由两个特征向量 $ \mathbf{\vec v}_u^U $ 和 $ \mathbf{\vec v}_i^I $ 组成,分别表示用户 $ u $ 输入特征和item $ i $ 输入特征。

      输入特征向量可以自定义customized 从而支持广泛的用户建模和 item 建模,例如上下文感知context-aware 建模、content-based 建模、neighbor-based 建模。由于这项工作聚焦于纯粹pure 的协同过滤设置setting,我们仅采用user iditem id 作为输入特征,并将其转换为稀疏的 one-hot 向量。

      基于输入的这种通用特征表示generic feature representation ,我们的方法可以通过使用内容特征来表示用户和 item,从而轻松地解决冷启动问题cold-start problem

    • 输入层之上是 embedding 层,它是一个全连接层,将稀疏表示sparse representation 投影到稠密向量dense vector 。得到的 user embeddingitem embedding )可以视为潜在因子模型背景下的用户潜在向量(item 潜在向量)。

    • 然后,用户 embeddingitem embedding 被馈入多层神经架构,我们称之为神经协同过滤层neural collaborative filtering layers ,从而将潜在向量映射为预估分。

      神经CF 层的每一层都可以自定义,从而发现 user-item 交互的某些潜在结构。最后一个隐层 X 的维度决定了模型的能力。

    • 最终的输出层是预估分 $ \hat y_{u,i} $ ,并通过最小化 $ \hat y_{u,i} $ 和目标值 $ y_{u,i} $ 之间的 point-wise loss 来进行训练。

      我们注意到训练模型的另一种方法是执行 pair-wise learning,例如使用 Bayesian Personalized Rankingmargin-based loss 。由于本文的重点是神经网络建模部分,我们将扩展 NCFpair-wise learning 作为未来的工作。

  2. 我们形式化 NCF 预测模型为:

    $ \hat y_{u,i} = f\left(\mathbf P^\top \mathbf{\vec v}_u^U, \mathbf Q^\top \mathbf{\vec v}_i^I\mid \mathbf P,\mathbf Q,\Theta_f\right) $

    其中:

    • $ \mathbf P\in \mathbb R^{M\times K},\mathbf Q\in \mathbb R^{N\times K} $ 分别表示用户和item 的潜在因子矩阵latent factor matrix
    • $ \Theta_f $ 表示交互函数 $ f(\cdot) $ 的模型参数。

    由于交互函数 $ f(\cdot) $ 定义为一个多层神经网络,因此它可以被形式化为:

    $ \hat y_{u,i} = f\left(\mathbf P^\top \mathbf{\vec v}_u^U, \mathbf Q^\top \mathbf{\vec v}_i^I \right) = \phi_{\text{out}}\left(\phi_{X}\left(\cdots\phi_2\left(\phi_1\left(\mathbf P^\top \mathbf{\vec v}_u^U, \mathbf Q^\top \mathbf{\vec v}_i^I\right)\right)\cdots\right)\right) $

    其中 $ \phi_{\text{out}}(\cdot) $ 为输出层的映射函数, $ \phi_x(\cdot) $ 为第 $ x $ 层神经协同过滤层的映射函数,并且一共有 $ X $ 层神经协同过滤层。

  3. 为了学习模型参数,现有的 point-wise 方法主要使用平方损失进行回归:

    $ \mathcal L_{\text{sqr}} = \sum_{(u,i)\in \mathcal Y\cup \mathcal Y^-} w_{u,i} \left(y_{u,i} - \hat y_{u,i}\right)^2 $

    其中:

    • $ \mathcal Y $ 表示 $ \mathbf Y $ 中观测交互的集合。

    • $ \mathcal Y^- $ 表示负样本的集合,它们是所有未观测交互,或者从未观测交互中采样而来。

    • $ w_{u,i} $ 表示训练样本 $ (u,i) $ 的权重超参数。通常选择 $ w_{u,i} = 1+\alpha\times y_{u,i} $ ,即观察到交互的 user-item 权重高于未观察到交互的 user-item

      这里 $ y_{u,i} =0 $ 表示未观察到交互的样本。

    虽然平方损失可以通过假设观测值observations 由高斯分布产生来解释,但是我们指出这可能与隐式数据不符。这是因为对于隐式数据,目标值 $ y_{u,i} $ 是二元的 1 或者 0,表示用户 $ u $ 是否和item $ i $ 进行了交互。这里我们提出了一种用于学习 point-wise NCF 的概率方法,该方法特别关注隐式数据的二元属性binary property

    考虑到隐式反馈的one-class 特性,我们可以将 $ y_{u,i} $ 的值视为一个label1 表示item $ i $ 和用户 $ u $ 相关,0 表示item $ i $ 和用户 $ u $ 不相关。预估分 $ \hat y_{u,i} $ 表示item $ i $ 和用户 $ u $ 的相关程度。为了赋予 NCF 这样的概率解释,我们需要将输出 $ \hat y_{u,i} $ 限制在 [0.0, 1.0] 之间。这可以通过使用概率函数(例如 LogisticProbit 函数)作为输出层 $ \phi_{\text{out}}( \cdot) $ 的激活函数轻松实现。通过这种setting,我们将似然函数定义为:

    $ p(\mathcal Y,\mathcal Y^-\mid \mathbf P,\mathbf Q,\Theta_f) = \prod_{(u,i)\in \mathcal Y} \hat y_{u,i} \prod_{(u,j)\in \mathcal Y^-}(1-\hat y_{u,j}) $

    使用负的对数似然,我们得到:

    $ \mathcal L = -\sum_{(u,i)\in \mathcal Y} \log \hat y_{u,i} - \sum_{(u,j)\in \mathcal Y^-}\log\left(1-\hat y_{u,j}\right)\\ = -\sum_{(u,i)\in \mathcal Y\cup \mathcal Y^-} \left[y_{u,i}\log \hat y_{u,i} + (1-y_{u,i})\log (1-\hat y_{u,i}) \right] $

    这是 NCF 方法需要最小化的目标函数,其优化可以通过执行随机梯度下降stochastic gradient descent: SGD 来完成。细心的读者可能已经意识到它与二元交叉熵损失binary cross-entropy loss (也称作对数损失log loss )相同。

    通过对NCF 进行概率处理,我们将带有隐式反馈的推荐作为二元分类问题来解决。由于分类感知classification-awarelog loss 在推荐文献中很少被研究,我们在这项工作中对其进行了探索,并在实验中证明了其有效性。

    对于负样本集合 $ \mathcal Y^- $ ,我们在每次迭代中从未观察的交互中均匀随机采样,并控制采样比例sampling ratio (这个比例是相对于观察到的交互数量)。虽然非均匀采样策略(例如,item popularity-biased )可能会进一步提高性能,但是我们将这个探索留作未来的工作。

16.1.3 广义矩阵分解 GMF

  1. 我们现在展示如何把 MF 解释为我们 NCF 框架的一个特例。由于 MF 是最流行的推荐模型,并在文献中进行了广泛的研究,因此能够复原 MF 使得 NCF 可以模拟一大族因子分解模型。

  2. 由于NCF 输入层的 user ID (或者 item ID)是 one-hot 编码,因此得到的 embedding 向量可以视为 user (或者 item)的隐向量。令用户 $ u $ 的潜在向量 $ \mathbf{\vec p}_u $ 为 $ \mathbf P^\top \mathbf{\vec v}_u^U $ ,item $ i $ 的潜在向量 $ \mathbf{\vec q}_i $ 为 $ \mathbf Q^\top \mathbf{\vec v}_i^I $ 。我们将第一层神经协同过滤层的映射函数定义为:

    $ \phi_1\left(\mathbf{\vec p}_u,\mathbf{\vec q}_i\right) = \mathbf{\vec p}_u\odot \mathbf{\vec q}_i $

    其中 $ \odot $ 为向量之间的逐元素乘积。

    然后我们将结果向量投影到输出层:

    $ \hat y_{u,i} = a_{\text{out}}\left(\mathbf{\vec h}^\top \left(\mathbf{\vec p}_u\odot \mathbf{\vec q}_i\right)\right) $

    其中 $ a_{\text{out}}(\cdot) $ 为激活函数, $ \mathbf{\vec h} $ 为输出层的权重向量。

    直观地讲,如果我们选择 $ a_{\text{out}}(\cdot) $ 为恒等映射、并且令 $ \mathbf{\vec h} $ 为全1 的向量,那么我们就可以准确地复原 MF 模型。

  3. NCF 框架下,MF 可以很容易地推广和扩展。例如:

    • 如果我们允许 $ \mathbf{\vec h} $ 可以从数据中学习(而不是固定的常量),那么它将导致MF 的一个变体,这个变体允许MF 模型学习各潜在维度的不同重要性。

    • 如果我们对 $ a_{\text{out}}(\cdot) $ 使用非线性函数,那么它将导致 MF 的一个变体,这个变体是一个非线性模型,并且可能比线性 MF 模型更具有表达能力。

    • 在这项工作中,我们在 NCF 框架下实现了一个广义版本的 MF,它使用 sigmoid 函数作为 $ a_{\text{out}}(\cdot) $ ,并且以对数损失为目标从数据中学习 $ \mathbf{\vec h} $ 。其中:

      $ a_{\text{out}}(\cdot) = \frac{1}{1+\exp(-x)} $

      我们称这个模型为广义矩阵分解 Generalized Matrix Factorization: GMF

16.1.4 多层感知机

  1. 由于 NCF 使用两路分别对用户和 item 进行建模,因此通过将这两路特征拼接起来从而组合它们的特征是很直观的。这种设计已经在多模态multimodal 深度学习工作中广泛采用。 然而,简单的向量拼接并没有考虑用户潜在特征和 item 潜在特征之间的任何交互,这不足以建模协同过滤效果。为了解决这个问题,我们提出在拼接向量上添加隐层,使用标准 MLP 来学习用户潜在特征和 item 潜在特征之间的交互。从这个意义上讲,我们可以赋予模型很大程度的灵活性和非线性从而学习 $ \mathbf{\vec p}_u $ 和 $ \mathbf{\vec q}_i $ 之间的交互,而不是像 GMF 那样只使用一个固定的逐元素乘积。

    具体而言,我们的 NCF 框架下的 MLP 模型定义为:

    $ \mathbf{\vec z}_1 = \phi_1\left(\mathbf{\vec p}_u,\mathbf{\vec q}_i\right) = \begin{bmatrix} \mathbf{\vec p}_u\\ \mathbf{\vec q}_i \end{bmatrix}\\ \mathbf{\vec z}_2=\phi_2\left(\mathbf{\vec z}_1\right) = a_2 \left(\mathbf W_2^\top\mathbf{\vec z}_1+\mathbf{\vec b}_2\right)\\ \cdots\\ \mathbf{\vec z}_L=\phi_L\left(\mathbf{\vec z}_{L-1}\right) = a_L \left(\mathbf W_L^\top\mathbf{\vec z}_{L-1}+\mathbf{\vec b}_L\right)\\ \hat y_{u,i} = \sigma\left(\mathbf{\vec h}^\top \mathbf{\vec z}_L\right) $

    其中 $ \mathbf W_l,\mathbf{\vec b}_l,a_l(\cdot) $ 分别为第 $ l $ 层感知机的权重矩阵、偏置向量、激活函数。

  2. 对于 MLP 层的激活函数,可以自由选择 sigmoidtanhReLU 等。

    • sigmoid 函数将每个神经元限制在 (0.0,1.0) 之间,这可能会限制模型的性能。众所周知,sigmoid 受到饱和saturation 的影响:当神经元的输出接近 01 时,神经元就会停止学习。

    • 尽管 tanh 是更好的选择并且已经被广泛采用,但是它只能一定程度上缓解 sigmoid 的问题。因为tanh 可以视作 sigmoidrescale 版本:

      $ \tanh(x/2) = 2\sigma(x) - 1 $
    • 最终我们选择 ReLU,它在生物学上更合理,并且被证明是非饱和non-saturated 的。此外,它鼓励稀疏激活sparse activations (即大多数神经元是非激活的) ,非常适合稀疏数据并使得模型不太可能过拟合。我们的实验结果表明:ReLU 的性能略优于 tanh,而 tanh 又明显优于 sigmoid

  3. 对于网络结构的设计,最常见的解决方案是采用塔式模式tower pattern ,其中底层最宽、接下来每一层的神经元数量依次减少。基本假设是:对更高层使用更少的隐单元,使得更高层能够学习数据的更抽象的特征。

    我们根据经验实现了塔式结果,将每个连续层的神经元数量减半。

16.1.5 融合 GMF 和 MLP

  1. 到目前为止,我们已经开发了NCF 的两个实例:

    • GMF 应用一个linear kernel 来建模潜在特征交互。
    • MLP 使用一个non-linear kernel 来从数据中学习非线性交互。

    那么接下来的问题是:我们如何在 NCF 框架下融合 GMFMLP,以便它们可以相互加强从而更好地建模复杂的 user-item 交互?

    一个简单的解决方案是:让 GMFMLP 共享相同的 embedding 层,然后组合combine 它们交互函数的输出。这种方式与著名的神经张量网络 Neural Tensor Network: NTN 有着相似的精神。

    具体而言,将 GMFone-layer MLP 相结合的模型可以表述为:

    $ \hat y_{u,i} = \sigma\left(\mathbf{\vec h}^\top a\left(\mathbf{\vec p}_u\odot \mathbf{\vec q}_i+\mathbf W \begin{bmatrix}\mathbf{\vec p}_u\\\mathbf{\vec q}_i\end{bmatrix}+\mathbf{\vec b}\right)\right) $

    然而,共享 GMFMLPembedding 可能会限制模型的性能。这意味着 GMFMLP 使用相同大小的 embedding。对于两个子模型最佳 embedding 大小差异很大的数据集,该解决方案可能无法获得最佳的集成ensemble

    为了给融合模型fused model 提供更大的灵活性,我们允许 GMFMLP 学习单独的 embedding,并通过拼接它们最后一个隐层来组合这两个模型。下图给出了我们的方案,其公式如下:

    $ \phi^{\text{GMF}} = \mathbf{\vec p}_u^G \odot \mathbf{\vec q}_i^G\\ \phi^{\text{MLP}}= a_L \left(\mathbf W_L^\top\left(a_{L-1}\left(...a_2\left(\mathbf W_2^\top \begin{bmatrix}\mathbf{\vec p}_u^M\\ \mathbf{\vec q}_i^M\end{bmatrix} +\mathbf{\vec b}_{2}\right) ...\right)\right )+\mathbf{\vec b}_L\right)\\ \hat y_{u,i} = \sigma\left(\mathbf{\vec h}^\top \begin{bmatrix}\phi^{\text{GMF}}\\ \phi^{\text{MLP}} \end{bmatrix}\right) $

    其中:

    • $ \mathbf{\vec p}_u^G $ 和 $ \mathbf{\vec p}_u^M $ 分别表示 GMFMLP 部分的 user embedding
    • $ \mathbf{\vec q}_i^G $ 和 $ \mathbf{\vec q}_i^M $ 分别表示 GMFMLP 部分的 item embedding
    • 如前所述,我们使用 ReLU 作为 MLP layer 的激活函数。

    该模型结合了 MF 的线性和 DNN 的非线性,从而对 user-item 潜在结构进行建模。我们将该模型称作神经矩阵分解 Neural Matrix Factorization: NeuMF

    模型相对于每个参数的导数可以用标准的反向传播来计算,由于空间限制这里省略了标准反向传播的描述。

    NeuMF 类似于 DeepFM,它们相同点在于:都使用线性部分来直接捕获特征交互;都使用非线性 DNN 来捕获非线性交互;都通过拼接两部分来同时捕获线性和非线性交互。

    区别在于:

    • NeuMF 的线性部分仅捕获 useritem 之间的二阶交互,而 DeepFM 捕获所有特征之间的二阶交互。但是这里 NeuMF 只有 user iditem id 特征,因此它们之间的二阶交互也意味着所有特征的二阶交互。
    • NeuMF 的两个组件独立使用 embedding,而 DeepFM 使用共享的 embedding

  2. 预训练:由于 NeuMF 目标函数的非凸性non-convexity ,基于梯度的优化方法只能找到局部最优解。据报道,初始化对深度学习模型的收敛和性能起着重要作用。由于 NeuMFGMFMLP 的集成ensemble,我们提出使用 GMFMLP 的预训练模型初始化 NeuMF

    • 我们首先使用随机初始化来训练 GMFMLP,直到收敛。

    • 然后我们使用 GMFMLP 模型的参数作为 NeuMF 相应参数部分的初始化。唯一的调整是在输出层,我们将两个模型的权重拼接起来作为初始化:

      $ \mathbf{\vec h} \leftarrow \begin{bmatrix} \alpha \mathbf{\vec h}^{\text{GMF}}\\ (1-\alpha ) \mathbf{\vec h}^{\text{MLP}} \end{bmatrix} $

      其中:

      • $ \mathbf{\vec h}^{\text{GMF}} $ 和 $ \mathbf{\vec h}^{\text{MLP}} $ 分别表示预训练的 GMF 模型和 MLP 模型的 $ \mathbf{\vec h} $ 向量。
      • $ \alpha $ 是决定两个预训练模型之间 tradeoff 的超参数。

    为了从头开始训练 GMFMLP ,我们采用 Adaptive Moment Estimation: Adam 优化器,它通过对频繁参数frequent parameters 执行较小的更新、对不频繁参数infrequent parameters执行较大的更新,从而调整每个参数的学习率。和普通 SGD 相比,Adam 方法为两种模型都产生了更快的收敛速度,并缓解了调整学习率的痛苦。

    在将预训练参数输入 NeuMF 之后,我们使用普通 SGD 而不是 Adam 进行优化。这是因为 Adam 需要保存动量信息momentum information 以正确更新参数。由于我们仅使用预训练模型的参数来初始化 NeuMF 并放弃保存动量信息,因此不适合使用基于动量的方法进一步优化 NeuMF

16.2 实验

  1. 我们进行实验以回答以下三个问题:

    • RQ1:我们提出的 NCF 方法是否优于 state-of-the-art 的隐式协同过滤方法?
    • RQ2:我们提出的优化框架(带负采样的 log loss)如何用于推荐任务?
    • RQ3:更深层的网络是否有助于从 user-item 交互数据中学习?

    接下来,我们首先介绍实验配置,然后回答上述三个问题。

  2. 数据集:我们在两个公共数据集上进行实验。

    • MovieLens:一个电影评分数据集,该数据集已经被广泛用于评估协同过滤算法。我们使用包含100 万个评分的版本,其中每个用户至少有 20 个评分。

      虽然它是一个显式反馈数据集,但是我们有意选择它来研究从显式反馈的隐式信号中学习的性能。为此,我们将其转换为隐式数据,其中每一项被标记为 01,表明用户是否对该 item 进行了评分。

    • Pinterest:一个基于内容的图像推荐数据集。原始数据非常大,但是非常稀疏。例如超过 20% 的用户只有一个 pin,这使得评估协同过滤算法变得困难。因此,我们以与 MovieLens 数据相同的方式过滤数据集,仅保留至少有 20 次交互的用户。结果我们得到一个包含 55,187 个用户、1,500,809 个互动的子集。每个互动都表示用户是否将图片钉到用户的 board 上。

    这些数据集的统计信息如下表所示。Sparsity 表示未观测到互动的 user-item pair 占比。

  3. 评估方式:为了评估item 推荐的性能,我们采用了广泛使用的 leave-one-out 评估。对于每个用户,我们将 hold-out 其最近的交互作为测试集,并使用剩余的数据进行训练。

    由于在评估过程中,每个用户对所有的 item 进行排序太耗时,因此我们遵循了常见的策略:随机抽取 100 个用户未交互的 item ,然后在 100item 中对测试 item 进行排序。

    ranked list 的性能由 Hit Ratio: HRNormalized Discounted Cumulative Gain: NDCG 来判断。在没有特别说明的情况下,我们将这两个指标的 ranked list 长度截断为 10。因此:

    • HR 直观地衡量测试 item 是否出现在列表的 top-10 中。
    • NDCG 通过为排名靠前的 hit 分配更高的分数来说明 hitposition

    我们为每个测试用户计算这两个指标并报告了平均得分。

  4. baseline 方法:我们将 NCF 方法(GMF/MLP/NeuMF)和以下方法进行比较:

    • ItemPop:根据互动数量来判断item 的流行度popularity 从而对 item 进行排序。这是一种对推荐性能进行基准测试benchmark 的非个性化方法。
    • ItemKNN:这是标准的基于item 的协同过滤方法。我们遵循 《Collaborative fi ltering for implicit feedback datasets》 的设置从而使其适应隐式数据。
    • BRP:该方法使用 pairwise ranking loss 来优化 MF 模型,使得模型适合从隐式反馈中学习。这是一个极具竞争力的item 推荐 baseline。我们使用固定的学习率并报告最佳性能。
    • eALS:这是 item 推荐的 state-of-the-art MF 方法。它优化了平方损失,将所有未观察到的交互视为负样本,并通过item 流行度对它们进行非均匀加权。由于 eALS 显示出优于均匀加权方法 WMF 的性能,因此我们不会进一步报告 WMF 的性能。

    由于我们提出的方法旨在对用户和 item 之间的关系进行建模,因此我们主要与 user-item 模型进行比较。我们省略了与 item-item 模型的比较,如 SLIM, CDAE,因为性能差异可能是由于使用个性化的用户模型引起的(因为 SLIM, CDAE 这些模型是 item-item 模型)。

  5. 实验配置:

    • 我们基于 Keras 实现了我们的方法。

    • 为了确定 NCF 方法的超参数,我们为每个用户随机抽取了一个交互作为验证集,并在其上调优了超参数。

      我们测试了 batch size[128, 256, 512, 1024]learning rate[0.0001, 0.0005, 0.001, 0.005]

    • 所有 NCF 模型都是通过优化 log loss 来学习的,其中我们为每个正样本采样了四个负样本。

    • 对于从头开始训练的 NCF 模型,我们使用高斯分布(均值为0、标准差为 0.01)来随机初始化模型参数,并使用 mini-batchAdam 优化器来优化模型。

    • 由于 NCF 的最后一个隐层决定了模型的能力(因为 NCF 的隐层维度采用逐层减半的策略),我们将其称为预测因子predictive factors ,并评估了维度为 [8, 16, 32, 64]

      值得注意的是,维度较高的预测因子可能会导致过拟合并降低性能。

    • 如果没有特别说明,那么我们为 MLP 使用三层的隐层。例如,如果预测因子维度为 8,那么神经 CF 层的架构为 32 -> 16 -> 8embedding size16

    • 对于预训练的 NeuMF, $ \alpha = 0.5 $ ,从而允许预训练的 GMFMLPNeuMF 的初始化做出同等的贡献。

16.2.1 RQ1 性能比较

  1. 下图显示了 HR@10NDCG@10 在不同预测因子维度方面的性能。

    对于 MF 方法 BPReALS,预测因子的维度等于潜在因子的维度。对于 ItemKNN,我们测试了不同邻域大小并报告了最佳性能。由于 ItemPop 性能较弱,因此下图中省略了 ItemPop 从而更好地突出个性化方法的性能差异。

    • 首先,我们可以看到 NeuMF 在两个数据集上都实现了最佳性能,明显优于 state-of-the-arteALSBPR(平均而言,相对于 eALSBPR 的提升为 4.5%4.9%)。

      对于 Pinterest 数据集,NeuMF 使用 8 维预测因子也大大超越了64 维预测因子的 eALSBPR 。这表明 NeuMF 通过融合线性MF 和非线性 MLP 模型从而具有高的表达能力。

    • 其次,另外两种 NCF 方法(GMFMLP)也表现出相当强劲的性能。在它们之间,MLP 的表现略差于 GMF。注意,可以通过添加更多隐层来进一步提升 MLP 的性能(参考下面的实验),这里我们仅展示三层隐层的 MLP 性能。

      对于小的预测因子维度,GMF 在两个数据集上均优于 eALS。尽管 GMF 在大的预测因子为维度上过拟合,但是它的最佳性能优于eALS 或者与 eALS 相当。

      GMF 使用自动学习的加权权重,而 eALS 根据item 流行度来加权。

    • 最后,GMF 显示出对 BPR 的持续改进,表明分类感知classification-awarelog loss 对推荐任务的有效性。因为 GMFBPR 是学习相同的 MF 模型、但是具有不同的目标函数。

  2. 下图显示了 Top-K 推荐列表的性能,其中排序位置 K 的范围从 1 ~ 10 。为了使图更加清晰,我们展示了 NeuMF 的性能,而不是所有三种 NCF 方法。可以看到:

    • 和其它方法相比,NeuMF 在不同位置上表现出一致的提升。我们进一步进行了one-sample pairedt 检验,验证所有提升对于 $ p < 0.01 $ 具有统计显著性。
    • 在所有的 baseline 方法中,eALSMovieLens 上的性能优于 BPR(相对提升约 5.1%),而在 Pinterest 方面的性能低于 BPR 。这与 《Fast matrix factorization for online recommendation with implicit feedback》 的发现一致,即 BPR 由于其 pairwise ranking-aware learner 而可以成为强大的排序器。
    • 基于邻域的 ItemKNN 表现不如基于模型的方法。
    • Item Pop 表现最差,说明有必要对用户的个性化偏好进行建模,而不是仅仅向用户推荐热门item

  3. 预训练的效用 utility :为了证明预训练对 NeuMF 的效用,我们比较了两个版本的 NeuMF 的性能--有预训练、没有预训练。对于没有预训练的 NeuMF,我们使用 Adam 通过随机初始化来学习。结果如下表所示。

    可以看到:

    • 经过预训练的 NeuMF 在大多数情况下取得了更好的性能,仅在预测因子维度为8MovieLens时预训练方法的性能稍差。
    • MovieLensPinterest 数据集上,使用预训练的 NeuMF 的相对提升分别为 2.2%1.1%。这一结果证明了我们预训练方法对初始化 NeuMF 的有效性。

16.2.2 RQ2 负采样的 Log Loss

  1. 为了处理隐式反馈的 one-class 性质,我们将推荐转换为二元分类任务。通过将 NCF 视为概率模型,我们使用 log loss 对其进行了优化。

    下图显示了在 MovieLensNCF 方法每次迭代的训练损失(所有训练样本的均值)和推荐性能,其中预测因子维度为 8Pinterest 上的结果也显示了相同的趋势,由于篇幅所限,这里没有给出 Pinterest 上的结果。

    • 首先,可以看到随着迭代次数的增加,NCF 模型的训练损失逐渐减少,推荐性能得到提升。

      最有效的更新发生在前 10 次迭代中,更多的迭代可能会使模型发生过拟合(例如,尽管 NeuMF 的训练损失在10 次迭代之后不断减少,但是推荐性能实际上会下降)。

    • 其次,在三种 NCF 方法中,NeuMF 的训练损失最低、其次是 MLP、最次是 GMF。推荐性能也呈现同样的趋势,即 NeuMF > MLP > GMF

    上述发现为优化 log loss 以从隐式数据中学习的合理性rationality 和有效性effectiveness 提供了经验证据。

  2. pointwise log loss 相对于 pairwise 目标函数的一个优势是负样本的灵活采样比例。虽然 pairwise 目标函数只能将一个采样的负样本和一个正样本配对,但是在 pointwise log loss 中我们可以灵活控制采样比例。

    为了说明负采样比例对 NCF 方法的影响,我们在下图中展示了 NCF 方法在不同负采样比例下的性能。其中预测因子维度为 16。注意:BPR 对于每个正样本采样一个负样本从而构成 pair 对,因此它的表现是一条直线。

    可以看到:

    • NCF 中,每个正样本仅一个负样本不足以实现最佳性能,采样更多的负样本是有利的。
    • GMFBPR 进行比较,我们可以看到:采样比例为 1GMF 的性能与 BPR 相当,而较大采样比例的 GMF 的性能明显优于 BPR 。这显示了 pointwise log loss 相对于 pairwise BPR loss 的优势。
    • 在这两个数据集上,最佳采样比例约为 3 ~ 6 。在 Pinterest 数据集上,我们发现采样比例大于 7 时,NCF 方法的性能开始下降。这表明:过于激进地设置采样比例可能会对性能产生不利影响。

16.2.3 RQ3 网络深度

  1. 由于用神经网络学习 user-item 交互函数的工作很少,所以很好奇使用深层的网络结构是否有利于推荐任务。为此,我们进一步研究了具有不同隐层数量的 MLP ,结果总结在下表中。MLP-3 表示具有三层隐层(除了embedding 层和输出层)的 MLP 方法,其它符号类似。可以看到:

    • 即使对于具有相同能力的模型,堆叠更多的层也有利于性能。这一结果非常令人振奋,表明使用深层模型进行协同推荐的有效性。

      我们将性能提升归因于堆叠更多非线性层带来的高度非线性。为了验证这一点,我们进一步尝试堆叠线性层,使用恒等映射作为激活函数,结果其性能比使用 ReLU 非线性激活函数差得多。

    • 对于没有隐层的 MLP-0(即 embedding 层直接投影到预测),性能非常弱,并不比非个性化的 Item-Pop 好。这验证了我们前面的论点:即简单地拼接用户潜在向量和 item 潜在向量,不足以对特征交互进行建模,因此需要用隐层来进行转换。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文