【推荐系统笔记】BPR损失函数公式

    • 一、BPR损失函数公式

      BPR 损失函数的核心公式如下:

      L BPR = − ∑ ( u , i , j ) ∈ D ln ⁡ σ ( x ^ u i j ) + λ ∣ ∣ Θ ∣ ∣ 2 L_{\text{BPR}} = - \sum_{(u, i, j) \in D} \ln \sigma(\hat{x}_{uij}) + \lambda ||\Theta||^2 LBPR=(u,i,j)Dlnσ(x^uij)+λ∣∣Θ∣2

      其中:

      • ( u , i , j ) (u, i, j) (u,i,j) 表示一个训练三元组,含义是“用户 u u u 更偏好物品 i i i(正样本)而非 j j j(负样本)”。
      • x ^ u i j = x ^ u i − x ^ u j \hat{x}_{uij} = \hat{x}_{ui} - \hat{x}_{uj} x^uij=x^uix^uj:预测评分差值,表示用户 u u u 对物品 i i i j j j 的兴趣差。
      • x ^ u i \hat{x}_{ui} x^ui:模型预测的用户 u u u 对物品 i i i 的偏好分数,常用点积 p u T q i \mathbf{p}_u^T \mathbf{q}_i puTqi表示。
      • σ ( ⋅ ) \sigma(\cdot) σ():sigmoid 函数, σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1
      • ln ⁡ σ ( x ^ u i j ) \ln \sigma(\hat{x}_{uij}) lnσ(x^uij):表示偏好差越大(即 i i i j j j 更受欢迎)的可能性越大。
      • λ ∣ ∣ Θ ∣ ∣ 2 \lambda ||\Theta||^2 λ∣∣Θ∣2:正则项,防止过拟合,( \Theta ) 表示所有模型参数,如用户/物品向量。

      二、核心思想和直觉解释

      BPR 的目标是学习一个排序模型,让用户 u u u 对正样本 i i i的评分高于负样本 j j j,即:

      x ^ u i > x ^ u j ⇒ x ^ u i j = x ^ u i − x ^ u j > 0 \hat{x}_{ui} > \hat{x}_{uj} \Rightarrow \hat{x}_{uij} = \hat{x}_{ui} - \hat{x}_{uj} > 0 x^ui>x^ujx^uij=x^uix^uj>0

      我们希望最大化这个事件的概率,也就是最大化:

      P ( x ^ u i > x ^ u j ) = σ ( x ^ u i − x ^ u j ) P(\hat{x}_{ui} > \hat{x}_{uj}) = \sigma(\hat{x}_{ui} - \hat{x}_{uj}) P(x^ui>x^uj)=σ(x^uix^uj)

      这就变成了最大化一个排序概率的对数似然函数,也就是前面提到的 BPR 损失函数。


      三、训练样本构造

      由于是隐式反馈(如点击/未点击),我们无法获得负样本,只能从“未交互”中随机采样负样本:

      • 对每个用户 u u u,正样本 i i i 是其交互过的物品。
      • 随机采样一个用户 u u u 未交互的物品 j j j,作为负样本。
      • 构造训练三元组 ( u , i , j ) (u, i, j) (u,i,j)

      四、梯度优化

      对模型参数如 p u , q i , q j \mathbf{p}_u, \mathbf{q}_i, \mathbf{q}_j pu,qi,qj 进行 SGD 梯度更新时,关键是:

      ∂ L BPR ∂ x ^ u i j = − ( 1 − σ ( x ^ u i j ) ) \frac{\partial L_{\text{BPR}}}{\partial \hat{x}_{uij}} = - (1 - \sigma(\hat{x}_{uij})) x^uijLBPR=(1σ(x^uij))

      这表达了“偏好差越大,梯度越小,更新越小”,符合排序目标。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 核心--泛型枚举

作者:IvanCodes 发布时间:2025年4月30日🤓 专栏:Java教程 各位 CSDN伙伴们,大家好!👋 写了那么多代码,有没有遇到过这样的“惊喜”:满心欢喜地从 ArrayList 里取出数据…

新能源行业供应链规划及集成计划报告(95页PPT)(文末有下载方式)

资料解读:《数字化供应链规划及集成计划现状评估报告》 详细资料请看本解读文章的最后内容。 该报告围绕新能源行业 XX 企业供应链展开,全面评估其现状,剖析存在的问题,并提出改进方向和关键举措,旨在提升供应链竞争力…

Centos 7 yum配置出现一下报错:

One of the configured repositories failed (CentOS-$releaserver-Base), and yum doesnt have enough cached data to continue. At this point the only safe thing yum can do is fail. There are a few ways to work "fix" this: 1.解决CentOS Yum Repositor…

Redis 常见问题深度剖析与全方位解决方案指南

Redis 是一款广泛使用的开源内存数据库,在实际应用中常会遇到以下一些常见问题: 1.内存占用问题 问题描述:随着数据量的不断增加,Redis 占用的内存可能会超出预期,导致服务器内存不足,影响系统的稳定性和…

HOOK上瘾思维模型——AI与思维模型【88】

一、定义 HOOK上瘾思维模型是一种通过设计一系列的触发(Trigger)、行动(Action)、奖励(Reward)和投入(Investment)环节,来促使用户形成习惯并持续使用产品或服务的思维框…

【playwright】内网离线部署playwright

背景:安装好python3.9后,由于内网无法使用pip安装playwright,多方收集资料,终于部署完成,现汇总如下: 1、playwright需要python3.7以上的版本,如果低于这个版本先要将python解释器升级 2、在可…

Unity动态列表+UniTask异步数据请求

Unity动态列表UniTask异步数据请求 很久没有写东西了。最近有一个需求,在Unity项目里,有几个比较长的列表,经历了一翻优化,趁这几日闲暇,记录下来,给自己留个笔记,也送给有缘之人共同探讨吧。 …

pandas读取Excel数据(.xlsx和.xls)到treeview

对于.xls文件,xlrd可能更合适,但需要注意新版本的xlrd可能不支持xlsx,不过用户可能同时需要处理两种格式,所以可能需要结合openpyxl和xlrd?或者直接用pandas,因为它内部会处理这些依赖。 然后,…

2025年Jetpack Compose集成网络请求库的完整实施方案

Compose中集成网络请求库,网络请求现在Retrofit是最流行的。 首先在Compose中如何进行网络请求,而不仅仅是集成库。因为Compose本身是UI框架,网络请求其实还是通过ViewModel或者Repository来处理,然后通过状态管理来更新UI。所以…

机器视觉开发-摄像头扫描二维码

以下是使用Python和OpenCV实现摄像头扫描二维码的最简单示例: import cv2 from pyzbar import pyzbar# 打开摄像头 cap cv2.VideoCapture(0)print("正在扫描二维码... (按 q 键退出)")while True:# 读取摄像头帧ret, frame cap.read()if not ret:print…

Seata服务端回滚事务核心源码解析

文章目录 前言一、doGlobalRollback3.1、changeGlobalStatus3.2、doGlobalRollback 前言 本篇介绍Seata服务端接收到客户端TM回滚请求,进行处理并且驱动所有的RM进行回滚的源码。 一、doGlobalRollback doGlobalRollback是全局回滚的方法:   首先依旧…

新闻客户端案例的实现,使用axios获取数据并渲染页面,路由传参(查询参数,动态路由),使用keep-alive实现组件缓存

文章目录 0.页面要求1.功能要求2.开始路由配置2.1.嵌套二级路由如何配置?2.2.路由重定向,NotFound页面,去除"#"号 3.实现底部导航栏的高亮效果4.渲染首页:使用axios请求数据5.路由传参5.1.回顾:查询参数传参或者动态路由传参5.2.具体代码 6.渲染详情页7.解决请求过程…

文件操作--文件包含漏洞

本文主要内容 脚本 ASP、PHP、JSP、ASPX、Python、Javaweb --# 各种包含函数 检测 白盒 代码审计 黑盒 漏扫工具、公开漏洞、手工看参数值及功能点 类型 本地包含 有限制、无限制 远程包含 无限制、有限制…

ActiveMQ 性能优化与网络配置实战(二)

五、性能优化实战 5.1 基础配置调整 5.1.1 增加并发消费者 在 ActiveMQ 中,增加并发消费者是提高消息处理效率的重要手段之一。通过配置多个消费者并行处理消息,可以充分利用系统资源,加快消息的消费速度,从而提高系统的整体吞…

C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 17)

🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录 二…

贪心算法精解(Java实现):从理论到实战

一、贪心算法概述 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优决策的算法策略。它通过局部最优选择来达到全局最优解,具有高效、简洁的特点。 核心特点: 局部最优选择:每一步都做出当前看…

深度学习框架:PyTorch使用教程 !!

文章目录 一、PyTorch框架简介 1.1 什么是PyTorch 1.2 PyTorch的优势 二、从入门到精通的PyTorch使用教程 2.1 入门阶段 2.1.1 环境安装与配置 2.1.2 Tensor基础操作 2.1.3 自动求导(Autograd) 2.1.4 构建神经网络(nn模块) 2.1.5 …

系统架构设计师:设计模式——创建型设计模式

一、创建型设计模式 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 随着系统演化得越来越依赖于对象复合而不是类…

Dinero.js - 免费开源的 JavaScript 货币处理工具库,完美解决 JS 浮点数精度丢失问题

今天介绍一个在前后端处理货币的工具库,logo 很可爱,是一只蓝色的招财小猫。 本文封面图底图来自免费 AI 图库 StockCake。 Dinero.js 是一个用于货币计算的 JavaScript 工具库,解决开发者在金融、电商、会计等场景中处理货币时的精度丢失、…

HNUST湖南科技大学-嵌入式考试选择题题库(109道纠正详解版)

HNUST嵌入式选择题题库 1.下面哪点不是嵌入式操作系统的特点。(B) A.内核精简 B.功能强大 C.专用性强 D.高实时性 解析: 嵌入式操作系统特点是内核精简、专用性强、高实时性,而"功能强大"通常指的是通用操作系统&#x…