阅读 955

MF系列一:从Matrix Factorization到Probabilistic Matrix Factorization

矩阵分解算法(Matrix Factorization)是最常用于推荐系统的协同过滤算法之一。这一系列的算法曾经是推荐系统中使用的主流算法,即使在现在也在很多地方有用。这里简单地梳理从最基础的matrix factorization(MF)算法到它衍生出来的probabilistic matrix factorization(PMF)的思路,具体解法可以参看 推荐算法——基于矩阵分解的推荐算法 概率矩阵分解 这两个blog。

Matrix Factorization

简单地说,MF 可以认为是 Latent Factor Model 思想指导下的一种解决问题的思路,而 latent factor model 其实属于协同过滤方法的一个分支。笔者在之前的文章中介绍过 协同过滤方法

在协同过滤方法中,我们提到了 user-item-preference 矩阵的存在。Latent factor model 的主要思路就是认为存在某些不可见的、代表用户偏好的隐变量,用户的偏好可以被这些隐变量完全代表,这些隐变量也能决定用户对item的偏好。表现在 user-item-preference 矩阵中,即为我们可以将 user-item-preference 矩阵分解为两个矩阵的乘积。

假设我们有 N 个user,M 个item,D 个隐变量,将 user-item-preference 矩阵用 R^{N*M} 来表示, U^{D*N}表示user对latent factor的矩阵,V^{D*M}表示item对latent factor的矩阵。在latent factor model的假设下,矩阵分解算法可以表示为 R \approx U^T * V = \hat{R}。具体来说,对于 R 中的每个 r_{i,j},都有 r_{i,j} \approx \hat{r_{i,j}} = \sum_{d}^{D}{u_{d,i} * v_{d, j}},即 e_{i,j} = r_{i, j} - \sum_{d}^{D}{u_{d,i} * v_{d, j}}

在我们求解这个问题时,损失函数为

loss = \sum{e_{i,j}^2} = \sum{(r_{i,j} -\sum_{d}^{D}{u_{d,i} * v_{d, j}})^2}

对损失函数求负梯度,则为

\frac{\partial{loss}}{\partial{u_{d,i}}} = -2*e_{i,j}v_{d,j}

\frac{\partial{loss}}{\partial{v_{d,j}}} = -2*e_{i,j}u_{d,i}

使用这两个负梯度公式,我们就可以用梯度下降方法来进行矩阵分解了。

Probabilistic Matrix Factorization

上面是基础的MF算法,PMF是在MF的基础上增加了一个高斯概率函数,增加这个函数的目的是解决评分很少的user比较难获得准确结果的问题,也即解决user cold start问题。它把上面的公式变成了一个在观察矩阵基础上的条件分布:

其中I_{i,j}是一个指示函数,当用户i给物品j评过分时为1,否则为0。直观上看,这意味着观察值相对于用户偏好有一个高斯噪音。

同时,假定user和item feature的先验分布如下:

那么它们的联合后验分布可以表示为:

其中,C是常数,\sigma, \sigma_{U}, \sigma_{V}均是假设的超参,所以最大化这个后验概率就等价于最小化:

其中,\lambda_U = \sigma^2 / \sigma_U^2, \lambda_V = \sigma^2 / \sigma_V^2

原论文最后实际使用的方法要更复杂一些,因为加入了一个sigmoid函数:

超参数估计

如果想要同时估计U,V和超参数,上面的后验就会变成

这个时候的最大后验估计要用EM算法来解。