内容纲要

BPR 介绍

BPR(Bayesian Personalized Ranking)贝叶斯个性化排序是一种用于协同过滤推荐算法的模型,它通过最大化用户项对之间的排名顺序的概率来进行训练。

对于我们之前的矩阵分解MF,直接将用户没有看过的东西与不喜欢的东西直接设定为“0”元素,并将这个0元素与正常的评分做MSE,这样不能很好的体现出用户所喜欢的元素。而贝叶斯个性化排序是预测一个排序的顺序,而不是预测评分,传统的MF算法通常将零元素视为缺失值或无兴趣,无法区分用户对物品的喜好程度。

对比MF,BPR有如下优点:

  1. 排序目标:BPR算法的目标是直接进行物品的相对排序,而不是预测具体的评分。这使得BPR算法更加适合于隐式反馈数据的推荐任务。相比之下,传统的MF算法主要用于预测用户对物品的评分,对于隐式反馈数据的处理相对不足。

  2. 采样策略:BPR算法采用了负采样的策略,通过构建用户对未观察到物品的偏好对来训练模型。这种采样策略避免了直接使用零元素的问题,能够更好地利用隐式反馈数据中的正样本。而传统的MF算法通常将零元素视为缺失值或无兴趣,无法区分用户对物品的喜好程度。

  3. 损失函数:BPR算法使用了基于排名的损失函数,即采用了Pairwise Ranking Loss,目标是最大化正确的偏好对的相对排序概率,从而使得正确的物品在排序中排在负样本之前。这样的损失函数更加符合推荐系统中的排序目标,能够更好地学习到用户的偏好和排序规则。

BPR MF
实现方式 通过最大化Pairwise Ranking Loss训练模型 通过最小化评分预测与真实评分之间的差距来训练模型
目标 物品的相对排序 用户对物品的评分预测
优化目标 最大化正确的偏好对的相对排序概率 预测用户对物品的评分
数据处理 物品的相对排序 将零元素视为缺失值或无兴趣
采样策略 负采样 无采样
损失函数 Pairwise Ranking Loss 均方差损失或交叉熵损失等
模型参数初始化 随机初始化 随机初始化
预测评分 不预测具体评分 预测用户对物品的评分
推荐结果 相对排序的物品列表 预测评分高的物品列表

向前传播

假设有一个用户集合U、物品集合I和一个二进制的用户-物品交互矩阵R,其中R(u, i)表示用户u是否与物品i有过交互。BPR算法的目标是学习一个用户向量和一个物品向量的表示,以便在未观察到的用户-物品对上进行预测。

  1. 初始化参数:
    • 学习率(learning rate):\alpha
    • 正则化参数(regularization parameter):\lambda
    • 用户向量集合:U = {u_1, u_2, ..., u_m}
    • 物品向量集合:V = {v_1, v_2, ..., v_n}
  2. 对于每个训练样本(u, i, j),其中u是用户特征向量,i是用户u交互过的物品(正样本)特征向量,j是用户u未交互过的物品(负样本)特征向量:
    • 计算用户u和物品i之间的内积:x_{ui} = \langle u, i \rangle
    • 计算用户u和物品j之间的内积:x_{uj} = \langle u, j \rangle
    • 计算用户u对物品i和物品j的差值:x_{uij} = x_{ui} - x_{uj}
    • 计算用户u对物品i和物品j的sigmoid函数值:\sigma(x_{uij}) = \frac{1}{1 + e^{-x_{uij}}}
  3. 计算BPR损失函数:
    • 对于每个训练样本(u, i, j),计算交叉熵损失:loss = -\log(\sigma(x_{uij}))
    • 加上正则化项:loss = loss + \frac{\lambda}{2} (\lVert u \rVert^2 + \lVert i \rVert^2 + \lVert j \rVert^2)
  4. 更新用户和物品向量:
    • 计算损失函数对用户向量u的梯度:\frac{\partial loss}{\partial u} = -\frac{\partial \log(\sigma(x_{uij}))}{\partial u} + \lambda u
    • 计算损失函数对物品向量i的梯度:\frac{\partial loss}{\partial i} = -\frac{\partial \log(\sigma(x_{uij}))}{\partial i} + \lambda i
    • 计算损失函数对物品向量j的梯度:\frac{\partial loss}{\partial j} = -\frac{\partial \log(\sigma(x_{uij}))}{\partial j} + \lambda j
    • 使用梯度下降法更新用户和物品向量: u \leftarrow u - \alpha \frac{\partial loss}{\partial u} i \leftarrow i - \alpha \frac{\partial loss}{\partial i} j \leftarrow j - \alpha \frac{\partial loss}{\partial j}
  5. 重复步骤2到4,直到收敛或达到预定的迭代次数。

公式推导

贝叶斯公式

概率轮里,若A已经发生,执果索因,有


P(A_j|B)=\frac{P(A_jB)}{P(B)}=\frac{P(A)P(B|A)}{P(B)}

由此,我们定义\theta是模型的参数,>_u 是用户已经有的偏好,i>_uj 表示用户u对i的喜欢程度大过于j

BPR公式

P(\theta|>_u) 为在用户现在已有的偏好下,参数为\theta 的概率是多少,我们通过上面贝叶斯公式可得:


P(\theta|>_u)=\frac{P(\theta)P(>_u|\theta)}{P(>_u)}

由于一个用户对于已经有的偏好的概率是常数,有


P(\theta|>_u)\propto P(\theta)P(>_u|\theta)

\propto表示正相关,我们需要改变\theta来让P(\theta|>_u) 最大,也就是说我们需要优化 P(\theta)P(>_u|\theta) 来达到最大

首先是最大化P(\theta) ,这里的\theta 是我们训练出来的,我们训练模型的时候需要正则化,也就是\lambda||\theta||^2 ,所以我们令


ln\ P(\theta) =\lambda||\theta||^2

这样我们后面做损失函数的时候就非常之方便

接着我们最大化P(>_u|\theta) ,我们定义


\overline{x}_{ui}=<u,i>=\sum_{j=1}^k u_ji_j=u_1·i_1+···+u_k·i_k

这里<u,i>表示内积u,i 是用户特征矩阵与图片矩阵中U、I的向量


\overline{x}_{uij}=\overline{x}_{ui}-\overline{x}_{uj}

\overline{x}_{uij} 来表示用户的i、j物品的关系距离,然后接着我们通过\sigma(x) = sigmoid(x)将他的关系转化到0-1之间,也就是如下


P(i>_u j|\theta)=\sigma(\overline{x}_{uij}(\theta))

由于用户之间相互独立(BPR不考虑用户之间的相互影响),我们有


\prod P(i>_uj|\theta)=\prod\sigma(\overline{x}_{uij}(\theta))

综上,我们有如下优化目标


BPR-Opt:=lnP(\theta|>_u) \\
=lnP(>_u|\theta)P(\theta) \\
=ln \prod \sigma(\overline{x}_{uij})+lnP(\theta)\\
=\sum ln \sigma(\overline{x}_{uij})+\lambda||\theta||^2
最后修改日期: 2023年 6月 10日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。