非机器学习方法和机器学习方法推荐性能的比较

(基本矩阵分解)Basic MF

Basic MF是最基础的分解方式,将评分矩阵RR分解为用户矩阵UU和项目矩阵SS, 通过不断的迭代训练使得UUSS的乘积越来越接近真实矩阵,矩阵分解过程如图:
非机器学习方法和机器学习方法推荐性能的比较
预测值接近真实值就是使其差最小,这是我们的目标函数,然后采用梯度下降的方式迭代计算UUSS,它们收敛时就是分解出来,的矩阵。我们用损失函数来表示误差(等价于目标函数):i=1nj=1m(RijUiTSj)2\sum_{i=1}^n\sum_{j=1}^{m}(R_{ij}-U_i^TS_j)^2
R_ij是评分矩阵中已打分的值,U_i和S_j相当于未知变量。为求得公式1的最小值,相当于求关于U和S二元函数的最小值(极小值或许更贴切)。通常采用梯度下降的方法:UiUiη£Ui,SiSiη£SiU_i\leftarrow U_i-\eta \frac{\partial \pounds}{\partial U_i}, S_i\leftarrow S_i-\eta \frac{\partial \pounds}{\partial S_i}
η\eta是学习速率,表示迭代的步长。其值为1.5时,通常以震荡形式接近极值点;若<1迭代单调趋向极值点;若>2围绕极值逐渐发散,不会收敛到极值点。具体取什么值要根据实验经验,另外还需要在每一步对学习速率进行衰减,目的是使算法尽快收敛。该方法也叫LFM(latent factor model)。

Slope One

Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个Item-Based 的协同过滤推荐算法。和其它类似算法相比, 它的最大优点在于算法很简单, 易于实现, 执行效率高, 同时推荐的准确性相对较高。
Slope One算法是基于不同物品之间的评分差的线性算法,预测用户对物品评分的个性化算法。主要两步:
Step1:计算物品之间的评分差的均值,记为物品间的平均偏差(两物品同时被评分);Rij=uN(i)N(j)ruirujN(i)N(j)R_{ij}=\frac{\sum_{u\in N(i)\cap N(j)}r_{ui}-r_{uj} }{|N(i)\cap N(j)|}
其中,ruir_{ui}是用户uu对物品ii的评分,rujr_{uj}是用户uu对物品jj的评分。N(i)N(i)是物品ii评过分的用户,N(j)N(j)是物品jj评过分的用户,N(i)N(j)|N(i)\cap N(j)|是对物品iijj都评过分的用户数。
Step2:根据物品间的评分偏差和用户的历史评分,预测用户对未评分的物品的评分。 Puj=iN(u)N(i)N(j)(ruiR(ij))iN(u)N(i)N(j)P_{uj}=\frac{\sum_{i\in N(u) }|N(i)\cap N(j)|(r_{ui}-R(ij))}{\sum_{i\in N(u) }|N(i)\cap N(j)|}其中,N(u)N(u)是用户uu评过分的物品。
举例:
顾客用餐过后,会有相关的星级评分。假设评分如下:

评分 可乐鸡翅 红烧肉
小明 4 5
小红 4 3
小伟 2 3
小芳 3

问题:请猜测一下小芳可能会给“红烧肉”打多少分?
思路:把两道菜的平均差值求出来,可乐鸡翅减去红烧肉的平均偏差:[45+43+23]/3=0.333[(4-5)+(4-3)+(2-3)]/3=-0.333。一个新客户比如小芳,只吃了可乐鸡翅评分为33分,那么可以猜测她对红烧肉的评分为:30.333=3.3333-(-0.333)=3.333

AutoRec:Autoencoders Meet Collaborative Filtering

非机器学习方法和机器学习方法推荐性能的比较
在基于评分的协同过滤中,有m个用户,n个项目,和一个能看到部分user-item评分的矩阵URm×nU\in \mathbb{R}^{m \times n}。能部分看到的向量r(u)=(Ru1,,Run)Rn\textbf{r}^{(u)}=(R_{u1},……,R_{un})\in \mathbb{R^n}代表每一个useruU={1,,m}u \in U=\{1,……,m\}。同样地,能部分看到的向量r(i)=(R1i,,Rmi)\textbf{r}^{(i)}=(R_{1i},……,R_{mi})代表每一个itemiI={1,n}i \in I=\{1,……,n\}。为了达到推荐的目的,设计出了一个基于item(user)的自动编码器,这个编码器可以把部分观察到的r(i)(r(u))\textbf{r}^{(i)}(\textbf{r}^{(u)})作为输入,把它投射到一个低维度的潜在(隐藏)空间,然后在输出空间中重构r(i)(r(u))\textbf{r}^{(i)}(\textbf{r}^{(u)}),从而预测出丢失的评分。
形式上,给定一组Rd\mathbb{R}^d中的向量S\textbf{S}和一些kN+k \in \mathbb{N_+},那自动编码器就是θminrSrh(r;θ)22\underset{min}{\theta}\sum _{\textbf{r} \in \textbf{S}}\left \| \textbf{r}-h(\textbf{r};\theta) \right \|_2^2
其中,h(r;θ)h(\textbf{r};\theta)rRd\textbf{r}\in \mathbb{R}^d的重构h(r;θ)=f(Wg(Vr+μ)+b)h(\textbf{r};\theta)=f(\textbf{W}\cdot g(\textbf{Vr}+\mathbf{\mu})+\textbf{b})
f()g()f(\cdot)g(\cdot)是**函数。在这里,θ={W,V,μ,b}\theta = \{\mathbf{W,V, \mu,b}\},其中WRd×k\textbf{W} \in \mathbb{R}^{d \times k}VRk×d\textbf{V} \in \mathbb{R}^{k \times d}是变换(Transformations),μRk\mu \in \mathbb{R}^kbRd\mathbf{b} \in \mathbb{R}^d是偏移量(biases)。这个目标对应于一个单独的、K维隐藏向量的自联想神经网络(Auto-Associative Neural Network )。参数θ\theta使用反向传播来进行学习。
我们对学习的参数进行正则化,以防止对观察到的评分过度拟合。形式上,基于item的自动编码模型的目标函数是,其中,正则化强度( regularisation strength)λ&gt;0\lambda&gt;0:minθi=1nrih(ri;θ)O2+λ2(WF2+VF2)\underset{\theta}{min}\sum_{i=1}^{n}\left \| \textbf{r}^i-h(\textbf{r}^i;\theta) \right \|^2_{\mathcal{O}}+\frac{\lambda}{2}\cdot (\left \|\textbf{W} \right\|^2_F+\left \|\textbf{V} \right\|^2_F)
其中O2\left \|\cdot \right \|^2_{\mathcal{O}}意味着我们只考虑观察到的评级的贡献。(AF=(i=nni=nnaij2)12||A||_F = \big(\sum_{i=n}^n\sum_{i=n}^n|a_{ij}|^2\big)^{\frac{1}{2}})基于user的自动编码模型是由向量{r(u)}u=1m\{ \textbf{r}^{(u)}\}_{u=1}^m得到的。

NCF

Generalized Matrix Factorization (GMF)

由于输入层是用户(项目)ID中的一个one-hot encoding编码,所获得的嵌入向量可以被看作是用户(项目)的潜在向量。我们用 PvTUuP^T_vU_u 表示用户的潜在向量pup_uQvTIiQ^T_vI_i 表示项目的潜在向量 qiq_i ,我们定义第一层神经CF层的映射函数为:ϕ1(pu,qi)=puqi\phi_1(p_u,q_i)=p_u\odot q_i
其中\odot表示向量的逐元素乘积。然后,我们将向量映射到输出层:y^ui=aout(hT(puqi))\hat y_{ui}=a_{out}(h^T(p_u\odot q_i))其中 aouta_{out}hh 分别表示输出层的**函数和连接权。

Multi-Layer Perceptron (MLP)

非机器学习方法和机器学习方法推荐性能的比较
简单地对向量的连接不足以说明用户和项目之间的潜在特征,这对协同过滤建模来说是不够的。为了解决这个问题,我们提出在向量连接上增加隐藏层,使用标准的MLP(多层感知机)学习用户和项目潜在特征之间的相互作用。在这个意义上,我们可以赋予模型高水平的灵活性和非线性建模能力,而不是GMF(广义矩阵分解)那样的简单使用逐元素相乘的内积来描述用户和项目之间的潜在交互特征。更确切地说,我们的NCF框架下的MLP模型定义为:
z1=ϕ1(pu,qi)=[puqi]{\bf{z}}_{1}=\phi_{1}\left({{\bf{p}}_{u}},{{\bf{q}}_{i}}\right)=\begin{bmatrix}{{{\bf{p}}_{u}}}\\{{{\bf{q}}_{i}}}\end{bmatrix}ϕ2(z1)=a2(W2Tz1+b2)\phi_{2}({\bf{z}}_{1})=a_{2}\left({\bf{W}}_2^T{\bf{z}}_{1}+{\bf b}_{2}\right)……ϕL(zL1)=aL(WLTzL1+bL)\phi_{L}({\bf{z}}_{L-1})=a_{L}\left({\bf{W}}_L^T{\bf{z}}_{L-1}+{\bf b}_{L}\right)y^ui=σ(hTϕL(zL1))\widehat{y}_{ui}=\sigma\left({\bf{h}}^{T}\phi_{L}\left({\bf{z}}_{L-1}\right)\right)
这里的 Wx\textbf{W}_\textbf{x},bx\textbf{b}_\textbf{x}ax\textbf{a}_\textbf{x} 分别表示xx 层的感知机中的的权重矩阵,偏置向量(神经网络的神经元阈值)和**函数。

Fusion of GMF and MLP

为了使得融合模型具有更大的灵活性,我们允许GMF和MLP学习独立的嵌入,并结合两种模型通过连接他们最后的隐层输出。上图展示了这个方案,公式如下:
ϕGMF=puGqiG\phi^{GMF}={\bf p}_u^G\odot{\bf q}_i^GphiMLP=aL(WLT(aL1(...a2(W2T[puMqiM]+b2)...))+bL)phi^{MLP}=a_{L}(W_L^T(a_{L-1}(...a_{2}(W_2^T\begin{bmatrix}{{\bf p}_u^M}\\{{\bf q}_i^M}\end{bmatrix}+{\bf b}_2)...))+{\bf b}_L)widehatyui=σ(hT[ϕGMFϕMLP])widehat{y}_{ui}=\sigma({\bf h}^T\begin{bmatrix}{\phi^{GMF}}\\{\phi^{MLP}}\end{bmatrix})
这里的 puGp^G_upuMp^M_u 分别表示 GMF 部分和 MLP 部分的用户嵌入(user embedding);同样的,qiGq^G_iqiMq^M_i 分别表示项目的嵌入。

Conclusion

Method RMSE
MF 0.84252±0.00218
Slope One 0.90691±0.00211
NCF 0.84619±0.00231
AutoRec 0.84671±0.00308

a) 深度学习方法很难训练
b) 矩阵分解方法依然处于指导地位
c) 可以使用深度学习方法作为特征的预处理