BPR 介绍
BPR(Bayesian Personalized Ranking)贝叶斯个性化排序是一种用于协同过滤推荐算法的模型,它通过最大化用户项对之间的排名顺序的概率来进行训练。
对于我们之前的矩阵分解MF,直接将用户没有看过的东西与不喜欢的东西直接设定为“0”元素,并将这个0元素与正常的评分做MSE,这样不能很好的体现出用户所喜欢的元素。而贝叶斯个性化排序是预测一个排序的顺序,而不是预测评分,传统的MF算法通常将零元素视为缺失值或无兴趣,无法区分用户对物品的喜好程度。
对比MF,BPR有如下优点:
-
排序目标:BPR算法的目标是直接进行物品的相对排序,而不是预测具体的评分。这使得BPR算法更加适合于隐式反馈数据的推荐任务。相比之下,传统的MF算法主要用于预测用户对物品的评分,对于隐式反馈数据的处理相对不足。
-
采样策略:BPR算法采用了负采样的策略,通过构建用户对未观察到物品的偏好对来训练模型。这种采样策略避免了直接使用零元素的问题,能够更好地利用隐式反馈数据中的正样本。而传统的MF算法通常将零元素视为缺失值或无兴趣,无法区分用户对物品的喜好程度。
-
损失函数:BPR算法使用了基于排名的损失函数,即采用了Pairwise Ranking Loss,目标是最大化正确的偏好对的相对排序概率,从而使得正确的物品在排序中排在负样本之前。这样的损失函数更加符合推荐系统中的排序目标,能够更好地学习到用户的偏好和排序规则。
BPR | MF | |
---|---|---|
实现方式 | 通过最大化Pairwise Ranking Loss训练模型 | 通过最小化评分预测与真实评分之间的差距来训练模型 |
目标 | 物品的相对排序 | 用户对物品的评分预测 |
优化目标 | 最大化正确的偏好对的相对排序概率 | 预测用户对物品的评分 |
数据处理 | 物品的相对排序 | 将零元素视为缺失值或无兴趣 |
采样策略 | 负采样 | 无采样 |
损失函数 | Pairwise Ranking Loss | 均方差损失或交叉熵损失等 |
模型参数初始化 | 随机初始化 | 随机初始化 |
预测评分 | 不预测具体评分 | 预测用户对物品的评分 |
推荐结果 | 相对排序的物品列表 | 预测评分高的物品列表 |
向前传播
假设有一个用户集合U、物品集合I和一个二进制的用户-物品交互矩阵R,其中R(u, i)表示用户u是否与物品i有过交互。BPR算法的目标是学习一个用户向量和一个物品向量的表示,以便在未观察到的用户-物品对上进行预测。
- 初始化参数:
- 学习率(learning rate):
\alpha
- 正则化参数(regularization parameter):
\lambda
- 用户向量集合:
U = {u_1, u_2, ..., u_m}
- 物品向量集合:
V = {v_1, v_2, ..., v_n}
- 学习率(learning rate):
- 对于每个训练样本
(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}}}
- 计算用户u和物品i之间的内积:
- 计算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)
- 对于每个训练样本
- 更新用户和物品向量:
- 计算损失函数对用户向量
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}
- 计算损失函数对用户向量
- 重复步骤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
留言