本文主要介绍了一种基于神经网络的技术,来解决在含有隐形反馈的基础上进行推荐的关键问题————协同过滤。
2.1 Learning from Implicit Data
$y_{ui} = 1$,if interaction (user u, item i) is observed
$y_{ui} = 0$,otherwise
值为1并不代表用户u对i感兴趣,同样,为0也不代表用户u对i不感兴趣,且作为缺失数据处理。
2.2 Matrix Factorization
https://blog.csdn.net/SGDBS233/article/details/125838049
内积函数的缺陷


两行数据的相似度可以用向量的内积来计算。
我们计算前三行数据,可以得到 $s_{32}>s_{12}>s_{13}$,所以可以绘制出如 $b$ 图的形式。
但是如果我们计算 $s_4$,可得 $s_{41}>s_{43}>s_{42}$,会发现向量 $p_4$ 不管怎么放,都无法同时满足这个要求,从而导致误差排名加大。
3. NEURAL COLLABORATIVE FILTERING
3.1 General Framework通用框架

- 将user和item转化为one-hot编码作为Input Layer的输入。
- Embedding Layer是一个全连接层。
- NCF层被称作为神经协作过滤层,它将预测分数。
总体模型如下:
其中 $P, Q$ 分别表示用户和项目的潜在因素矩阵,$\Theta_f$ 表示模型 $f$ 的参数。
3.1.1 NCF的学习 Learning NCF
为了学习模型参数,现有的pointwise方法大多使用了平方损失的回归。
考虑到隐性反馈的一类性质,我们可以将 $y_{ui}$ 的值作为一个标签,1表示项目 $i$ 和用户u相关,否则为0。这样 $\hat{y}_{ui}$ 就是一个概率,所以我们可以用似然函数来定义误差:
取对数:
这是NCF方法需要去最小化的目标函数,并且可以通过使用随机梯度下降(SGD)来进行训练优化。
3.2 广义矩阵分解 Generalized Matrix Factorization (GMF)
输入层是一个one-hot编码,所以用 $P^Tv_u^U$ 表示用户的潜在向量 $p_u$,$Q^Tv_i^I$ 表示项目潜在向量 $q_i$。
那么第一层CF层映射函数为:
其中 $\odot$ 表示向量逐元素累乘。
然后映射到输出层:
其中 $a_{out}$ 为激活函数,非线性情况下一般为 $\sigma(x) = \frac{1}{1+e^{-x}}$,$h$ 为连接权,通过loss function来学习它。
3.3 多层感知机 Multi-Layer Perceptron (MLP)
简单地对向量的连接不足以说明用户和项目之间的潜在特征,这对协同过滤建模来说是不够的。为了解决这个问题,我们提出在向量连接上增加隐藏层,使用标准的MLP(多层感知机)学习用户和项目潜在特征之间的相互作用。
即假设一共有 $L$ 层:
对于激活函数 $a_x$,文章表示使用ReLU效果最好。
结合GMF和MLP Fusion of GMF and MLP

一个直接的解决方法是让GMF和MLP共享相同的嵌入层(Embedding Layer),然后再结合它们分别对相互作用的函数输出,然而,共享GMF和MLP的嵌入层可能会限制融合模型的性能。例如,GMF和MLP必须使用的大小相同的嵌入;对于数据集,两个模型的最佳嵌入尺寸差异很大,使得这种解决方案可能无法获得最佳的组合。
所以我们让GMF和MLP学习独立的嵌入,并结合两种模型通过连接他们最后的隐层输出。
参考文章
https://blog.csdn.net/qq\_44015059/article/details/107441512