《Neural Collaborative Filtering》笔记

对于user-item矩阵Y

y_{ui}=\begin{Bmatrix} 1,if\;interaction\;(user\;u\;item\;i)is\;observed \\0,\qquad otherwise \end{Bmatrix}

但是y_{ui}=0并不意味着用户u不喜欢物品i,也可能是用户并不知道它,或者是数据缺失

对于一般的user-item矩阵

用Jaccard系数s_{ij}=\frac{\left | R_i\right |\cap \left | R_j\right |}{\left | R_i\right |\cup \left | R_j\right |}来表示用户之间的相似度

显然s23(0.66) > s12(0.5) > s13(0.4)

对于u4,s41(0.6) > s43(0.4) > s42(0.2),所以u4与u1最相似其次是u3,u2

根据结果在向量空间中作图

发现无论p4在哪,都是比p3更靠近p2

这就是只使用内积信息降维导致信息损失

NCF(Neural collaborative filtering framework)框架

\hat{y}_{ui} =f(\textbf{P}^T\textbf{v}^U_u,\textbf{Q}^T\textbf{v}^I_i|\textbf{P},\textbf{Q},\Theta _f)

f(\textbf{P}^T\textbf{v}^U_u,\textbf{Q}^T\textbf{v}^I_i)=\phi _{out}(\phi _X(...\phi _1(\textbf{P}^T\textbf{v}^U_u,\textbf{Q}^T\textbf{v}^I_i)))

基于NCF的框架,作者提出NeuMF

对于输入层,将user和item转换为二进制稀疏向量和独热编码,再分别计算MLP、GMF的item和user的embedding层

GMF_user: user_num->factor_num

GMF_item: item_num->factor_num

MLP_user: user_num->factor_num*2^{factor\_num-1}

GMF_user: user_num->factor_num*2^{factor\_num-1}

这样在MLP_Layer 1里尺寸就是2^{factor\_num},在MLP_Layer X输出尺寸为factor_num,和GMF的输出尺寸一样

1.GMF(Generalized Matrix Factorization)广义矩阵分解

\phi _1(\textbf{p}_u,\textbf{q}_i)=\textbf{p}_u\bigodot \textbf{q}_i     #即向量内积

\hat{y}_{ui}=a_{out}(\textbf{h}^T(\textbf{p}_u\bigodot \textbf{q}_i))

a_{out }\textbf{h} 分别表示输出层的激活函数和连接权重

a_{out}=\alpha (x)=\frac{1}{1+e^{-x}}

2.MLP(Multi-Layer Perceptron)多层感知机

在向量连接上增加隐藏层,使用标准的MLP(多层感知机)学习用户和项目潜在特征之间的相互作用。可以赋予模型高水平的灵活性和非线性建模能力,而不是GMF(广义矩阵分解)那样的简单使用逐元素相乘的内积来描述用户和项目之间的潜在交互特征。

\textbf{z}_1=\phi _1(\textbf{p}_u,\textbf{q}_i)=\begin{bmatrix} \textbf{p}_u\\\textbf{q}_i \end{bmatrix}\\\phi _2(\textbf{z}_1)=a_2(\textbf{W}_2^T\textbf{z}_1+\textbf{b}_2)\\......\\\phi _L(\textbf{z}_{L-1})=a_L(\textbf{W}_L^T\textbf{z}_{L-1}+\textbf{b}_L)\\\hat{y}_{ui}=\sigma (\textbf{h}^T\phi _L(\textbf{z}_{L-1}))

使用ReLU作为激活函数

3.NeuMF Layer

如何在NCF框架下融合GMF和MLP?

一个简单的解决方案是让GMF和MLP共享同一个嵌入层,然后组合它们的函数的输出如下公式(单层MLP)

\hat{y}_{ui}=\sigma(\textbf{h}^Ta(\textbf{p}_u\bigodot \textbf{q}_i+\textbf{W}\begin{bmatrix} \textbf{p}_u \\ \textbf{q}_i \end{bmatrix}+\textbf{b}))

然而,共享GMF和MLP的嵌入可能限制融合模型的性能。例如,它意味着GMF和MLP必须使用相同大小的嵌入;对于其中两个模型的最佳嵌入大小变化很大的数据集,该解决方案可能无法获得最佳解。

为了给融合模型提供更多的灵活性,允许GMF和MLP使用单独的嵌入,并通过连接它们的最后一个隐藏层来组合这两个模型

所以最终的公式如下

\phi^{GMF}=\textbf{p}^G_u\bigodot \textbf{q}^G_i\\\phi^{MLP}=a_L(\textbf{W}^T_L(a_{L-1}(...a_2(\textbf{W}^T_2\begin{bmatrix} \textbf{p}^M_u\\\textbf{q}_i^M \end{bmatrix}+\textbf{b}_2)....))\textbf{b}_L)\\\hat{y}_{ui}=\sigma (\textbf{h}^T\begin{bmatrix} \phi^{GMF}\\ \phi^{MLP} \end{bmatrix})

预训练

使用GMF和MLP的预训练模型来初始化NeuMF,首先用随机初始化训练GMF和MLP,直到收敛。然后,我们使用它们的模型参数作为NeuMF参数的相应部分的初始化。

 在输出层上,将两个模型的权重连接起来

\textbf{h}\leftarrow \begin{bmatrix} \alpha\textbf{h}^{GMF}\\(1-\alpha)\textbf{h}^{MLP} \end{bmatrix}

使用Adam优化GMF和MLP,使用SGD优化NeuMF

数据集

MovieLens

每个用户至少有20条评分,每个条目标记为0或1,表示用户是否对该项目进行了评级。

Pinterest

每个用户至少有20条交互

训练参数

对每个正实例采样四个负实例,其他参数略

实验结果

NeuMF的HR和NDCG在各项参数上都优于Baselines

对于预训练

有预训练的结果优于没有预训练的

负采样的对数损失

为了处理隐式反馈的单类性质,将推荐作为一个二元分类任务,将NCF视为概率模型,使用对数损失对其进行了优化

y_{ui}的值视为标签1意味着项目i与u相关,否则为0。预测得分则表示i与u相关的可能性。为了赋予NCF这样的概率解释,我们需要将输出\hat{y}_{ui}约束在[0,1]的范围内,这可以通过使用概率函数(例如,Logistic或Probit函数)作为输出层Φout的激活函数。

在上述介绍的环境下,定义概率函数如下所示:

p(\mathcal Y,\mathcal Y^- | \textbf{P},\textbf{Q},\Theta _f)=\prod_{(u,i)\in\mathcal Y }\hat{y}_{ui}\prod_{(u,i)\in\mathcal Y^- }(1-\hat{y}_{ui})

取负对数得

L=-logp=-\sum_{(u,i) \in \mathcal Y}log\hat{y}_{ui}-\sum_{(u,j) \in \mathcal Y^-}log(1-\hat{y}_{uj})\\=-\sum_{(u,i) \in \mathcal Y\cup \mathcal Y^-}y_{ui}log\hat{y}_{ui}+(1-y_{ui})log(1-\hat{y}_{ui})

这是NCF方法最小化的目标函数,其优化可以通过使用随机梯度下降(SGD)来实现。通过对NCF的概率处理,将隐式反馈的推荐作为一个二分类问题来解决。

对于负样本采样率

设置采样率过于激进可能会对性能产生不利影响

对于MLP隐藏层的层数

堆叠更多的非线性层也有利于性能。表明使用深度模型进行协作推荐的有效性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值