Neural Collaborative Filtering - 学习笔记

介绍

深度学习未兴起时,传统矩阵分解(Matrix Factorization)是推荐领域中的一种经典方法,基本做法是:

  1. 把用户和商品映射到隐向量空间,用向量表示。
  2. 通过内积,来表示向量之间的相似性。

作者认为,通过内积来表示向量相似性的做法过于简单,有时候会出现错误,限制了模型的泛化能力。文中的一个例子:
在这里插入图片描述
对于(a)中的交互矩阵,用 s s s表示用户之间的相似度,可以明显得看出
s 23 ( 0.66 ) > s 12 ( 0.5 ) > s 13 ( 0.4 ) s_{23}(0.66) > s_{12}(0.5) > s_{13}(0.4) s23(0.66)>s12(0.5)>s13(0.4)

这也体现在(b)中 p 1 、 p 2 、 p 3 p_1、p_2、p_3 p1p2p3的夹角大小。当你在 ( a ) (a) (a)中把 u 4 u_4 u4考虑进去时,会得到:
s 41 ( 0.6 ) > s 43 ( 0.4 ) > s 42 ( 0.2 ) s_{41}(0.6) > s_{43}(0.4) > s_{42}(0.2) s41(0.6)>s43(0.4)>s42(0.2)

这时候你会发现, u 4 u_4 u4 u 1 u_1 u1的距离最近, u 4 u_4 u4 u 3 u_3 u3次之, u 4 u_4 u4 u 2 u_2 u2的距离最远,但是反映在 ( b ) (b) (b)中,不管怎么画 p 4 p_4 p4(虚线), p 4 p_4 p4总是与 p 2 p_2 p2更接近。这就导致在模型学习的过程中,造成较大的loss,增加学习难度。

本质原因呢?就是Matrix Factorization的setting过于简单,无法处理稍微复杂的场景。NCF的出发点就是引入深层神经网络(DNNs),以解决上述问题。

在当时的时代背景下,Deep Learning正在兴起,DNNs已经在CV、NLP等领域取得飞跃性进展。所以作者指出,应该把DNNs引入推荐领域,让DNNs来自动完成特征交叉,代替传统的矩阵分解(MF)方法。

所以,本篇文章的主要贡献是用DNNs搭建了超越传统MF的模型——Neural Collaborative Filtering(NCF)。并且作者证明,传统矩阵分解可以看作NCF的一种特例。

补充知识
  • 隐式反馈:购买商品,点击商品,观看视频等,没有显性地表达用户的喜好,存在噪声。
  • 显式反馈:对商品的评分、评论等。

可以看出,隐式反馈的建模难度更大,因为用户的行为存在一定的随机性,导致隐式反馈注定会存在噪声。NCF专注于解决推荐领域中的隐式反馈建模。

解决方案

作者提出了两个模型,分别是:

  • 用DNNs实现的通用协同过滤模型(Neural collaborative filtering framework)

  • 用DNNs实现的广义矩阵分解模型(Neural matrix factorization model)

Neural collaborative filtering framework

这个模型和传统协同过滤模型的唯一区别就是使用DNNs来做特征交叉,以替代传统的内积操作。
在这里插入图片描述
为了模型阐述的简便,Input Layer中输入的是User和Item的ID生成的One-Hot向量。在实际业务场景中,还可以根据其他信息来生成特征向量,比如文章中列举的三种特征:

  • context-aware
  • content-based
  • neighbor-based

在初始化时加入上述向量,还可以有效缓解冷启动问题。

Embedding Layer的主要作用是把稀疏向量稠密化,以输入后续的Neural CF Layers。

Neural CF Layers实际就是多个网络映射层,作用是把多维向量映射到分数(score)。最后一层Layer X的维度决定了模型的表达能力。每一层网络都可以学到用户-商品交互矩阵的一个特定语义。

通过Neural CF Layers,得到的是预测的分数 y ^ u i \hat{y}_{ui} y^ui,怎么去和标签 y u i y_{ui} yui进行优化呢?这里选择的是直接优化 y ^ u i \hat{y}_{ui} y^ui y u i y_{ui} yui之间的差值。按文中说法,使用Point-wise loss。考虑到推荐场景中标签通常是0或1,如果看作回归问题,用平方损失优化是不太合理的。所以这里使用交叉熵损失(Cross Entropy):
在这里插入图片描述
对于负样本 γ − γ- γ,我们通过负采样比例(sampling ratio)来控制负样本的个数。

Neural matrix factorization model

作者首先提出了一个通用的矩阵分解框架(GMF),然后他做了三件事:

  • 证明了传统的矩阵分解是GMF的特例
  • 给GMF加入更多非线性操作,可以达到改善传统矩阵分解(MF)的目的
  • 引入MLP,加入更多非线性,得到最终模型。
GMF

GMF表达式如下:
在这里插入图片描述
a o u t a_{out} aout是激活函数, h T h^T hT是映射向量, ⊙ ⊙ 表示点对点乘积(element-wise product)。

作者指出,当 h T h^T hT为全1向量, a o u t a_{out} aout是恒等映射时,上述式子就等价于传统的矩阵分解(MF)。因为,如果 h T h^T hT为全1向量, h T ( p u ⊙ q i ) h^T(p_u⊙q_i) hT(puqi)实质上等于 p u p_u pu q i q_i qi的内积, a o u t a_{out} aout又是恒等映射,向量通过 a o u t a_{out} aout没有发生改变。

接下来,我们可以让 h T h^T hT不再受限于全1向量,而是可以学习的向量; a o u t a_{out} aout不再是恒等映射,而是改成了激活函数。这样,我们就得到了作者提出的GMF,比传统的矩阵分解(MF)模型表达能力更强。

a o u t a_{out} aout的选择,文中使用了 S i g m o i d Sigmoid Sigmoid函数,目的是让分数限制在(0,1)之间。

MLP

上面我们是通过在用户向量 p u p_u pu和商品向量 q i q_i qi的互操作上引入更多的非线性,让网络自动完成特征交叉。其实还有一种通用的做法,在深度学习领域也比较流行,就是不需要定义任何的互操作,而是把特征学习完全交给网络层。

文中也采用了这种框架作为GMF的补充,首先把用户向量 p u p_u pu和商品向量 q i q_i qi拼接在一起,然后通过多个网络层去自动地学习特征交叉。

在这里插入图片描述

激活函数选择了RELU,原因有二:

  • Sigmoid、Tanh都有梯度消失的问题,而ReLU没有
  • ReLU更容易使得参数变得稀疏,符合推荐场景的稀疏性。
最终模型

通过把GMF和MLP进行合并,就得到了我们最终的模型(NCF):
在这里插入图片描述
一个值得商榷的点是:GMF和MLP到底应不应该共享同一套Embedding?

这里作者选择了不共享。两者分别训练自己的用户Embedding和商品Embedding,并且给出了解释:

  • 使用同一套Embedding会对Embedding size的设置更为严格,要同时找到对于GMF和MLP来说最优的Embedding size比较困难,这无疑会削弱网络的学习能力。

这里说一下我的理解,其实GMF和MLP可以看作是特征学习的两条路径,通过这两条路径所更新的Embedding是有区别的,所以,为了保留这两者的差异性,把它们分隔开是符合常理的。如果两者共享一套Embedding,那么无疑会抵消两者的差异性。

预训练

这里作者还提出了预训练的方法,其实从实验上看提升也不是很大。预训练的策略也很简单,让GMF和MLP两者单独训练,唯一的变动就是在输出层上,设置了一个超参数 α α α,来控制最终的输出向量的组成:
在这里插入图片描述

总结

NCF使用DNNs验证并扩展了传统的协同过滤模型,取得了非常好的效果。它的主要思想:

  • 引入更多样化的向量互操作
  • 用网络层来自动完成特征交叉

也成为后续推荐领域模型发展的潮流。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值