对负采样(negative sampling)的一些理解

news2024/11/30 8:49:49

负采样(negative sampling)通常用于解决在训练神经网络模型时计算softmax的分母过大、难以计算的问题。但在LightGCN模型论文的BPR LOSS中,负采样的概念可能与传统的softmax分母问题不完全一样。

在LightGCN模型中,不同于传统的协同过滤方法或基于矩阵分解的模型,它采用了一种轻量级的方式来学习用户和物品的嵌入表示。LightGCN的损失函数中包含了BPR损失(Bayesian Personalized Ranking),该损失函数用于推动模型更好地区分用户对已观察到的物品和未观察到的物品的兴趣。这是通过负采样来实现的。

具体来说,负采样在这里用于生成未观察到的物品(负样本),以便在BPR损失中比较已观察到的物品和未观察到的物品之间的差异。通过随机或其他采样策略,从未观察到的物品中选择一些物品作为负样本,然后计算它们与已观察到的物品之间的兴趣差异,如公式(15)所示。这有助于模型学习更好地排名观察到的物品高于未观察到的物品。
在这里插入图片描述
公式(15)代表了LightGCN模型中的损失函数,这是基于贝叶斯个性化排名(Bayesian Personalized Ranking,BPR)的损失函数。

首先,让我们看一下公式中的符号和变量:

LBPR 是BPR损失函数。
M 是用户的数量。
u=1 到 M 是用户索引的范围。
i ∈ Nu 表示用户 u 观察到的物品 i 的集合。
j ∈ N/ u 表示用户 u 没有观察到的物品 j 的集合,,“j ∈ N/ u” 这一步的目的是选择未与用户 u 直接交互的物品 j。换句话说,它表示从所有可能的物品中选择那些不在用户 u 的交互历史中的物品作为负样本。这是负采样的一部分,目的是与已观察到的物品 i 进行比较,以计算 BPR 损失,以便推动模型更好地区分用户对已观察到的物品和未观察到的物品的兴趣。在协同过滤和推荐系统中,通常存在大量未被用户交互过的物品(item),而用户的历史交互数据只包含了少量物品。如果要考虑所有可能的未交互物品来计算 BPR 损失,这将导致计算成本非常高,因为负样本的数量可能远远大于正样本(用户已交互的物品)的数量。因此,为了降低计算成本,推荐系统通常采用负采样策略,从未交互的物品中随机选择一部分作为负样本,然后使用这些负样本来计算 BPR 损失。这样可以在保持模型训练有效性的同时降低计算复杂性。就有一种我觉得是以部分代替整体的感觉。
ui 是模型预测用户 u 对物品 i 的兴趣。
uj 是模型预测用户 u 对物品 j 的兴趣。
σ(x) 是Sigmoid函数,它将实数映射到 (0, 1) 的范围内。
λ||E(0)||2 是正则化项,用于控制模型的复杂度。
BPR损失函数的目标是鼓励模型使观察到的物品的预测兴趣高于未观察到的物品的预测兴趣。这可以通过计算差异的负对数概率来实现。具体来说,对于每个用户 u,我们计算了观察到的物品 i 和未观察到的物品 j 之间的差异,然后通过负对数概率来量化这种差异。

式子中的第一项 -ln σ(ŷui - ŷuj) 是计算差异的部分。这里,σ(x) 是Sigmoid函数,它将模型预测的兴趣值映射到 (0, 1) 的范围内。ŷui - ŷuj 表示用户 u 对物品 i 和物品 j 的预测兴趣之差,通过Sigmoid函数将其映射到概率空间。因此,-ln σ(ŷui - ŷuj) 表示观察到的物品 i 的预测兴趣高于未观察到的物品 j 的负对数概率。

第二项 λ||E(0)||2 是正则化项,用于防止过拟合。这里,E(0) 是模型的第0层的嵌入矩阵,正则化项通过惩罚嵌入矩阵的大小来控制模型的复杂度。

综上所述,公式(15)是基于BPR思想的损失函数,用于训练LightGCN模型。它的目标是通过最小化差异的负对数概率来鼓励模型提高对观察到的物品的预测兴趣,同时使用正则化项来防止过拟合。这有助于LightGCN模型学习用户和物品之间的嵌入表示以进行推荐任务。

虽然负采样主要用于处理类似于传统softmax分母问题的难以计算的问题,但在这里它的目的是与BPR损失结合使用,以提高推荐质量,而不仅仅是减少计算复杂性。因此,在这个上下文中,负采样是一种用于训练推荐模型的技术,用于优化BPR损失。

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

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

相关文章

Spring结合自定义注解实现 AOP 切面功能【详解】

Spring结合自定义注解实现 AOP 切面功能 Spring AOP 注解概述Aspect 快速入门execution 切点表达式 拦截指定类的方法Pointcut("annotation(xx)") 拦截拥有指定注解的方法常用注解1.Before:在切点方法前执行2.After:在切点方法后执行3.Around&…

Python爬虫获取百度图片+重命名+帧差法获取关键帧

(清库存) 获取图片 重命名 帧差法 爬虫获取图片文件重命名帧差法获取关键帧 爬虫获取图片 # 图片在当前目录下生成import requests import renum 0 numPicture 0 file List []def dowmloadPicture(html, keyword):global num# t 0pic_url re.fin…

【JVM】运行时数据区之 堆——自问自答

Q:堆和栈,在设计上有何用义? 此处我们不说数据结构的概念。 堆本身是一种存储结构,在代码的内存层面来看,无论是c 操作的原生内存,还是Java 背后的JVM,堆的作用都是进行持久存储的。 这个持久存储并不是…

集合-Collection

系列文章目录 1.集合-Collection-CSDN博客 文章目录 目录 系列文章目录 文章目录 前言 一 . 集合的继承体系 二 . 什么是Collection? 三 . 常用方法 1.add(Object element): 将指定的元素添加到集合中。 2. remove(Object element): 从集合中移除指定的元素。 3. bo…

国庆day1---消息队列实现进程之间通信方式代码,现象

snd&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)typedef struct{ long msgtype; //消息类型char data[1024]; //消息正文 }Msg;#define SIZE sizeof(Msg)-sizeof(long)int main…

HP E1740A 模拟量输入模块

HP&#xff08;惠普&#xff09;E1740A 模拟量输入模块是一种用于数据采集和测量的工控模块&#xff0c;通常用于各种自动化和监测应用中。以下是该模拟量输入模块的一些可能特点和功能&#xff1a; 多通道输入&#xff1a; E1740A 模块通常具有多个模拟量输入通道&#xff0c;…

windows的arp响应

1.原理‘ 2.场景 3.步骤

YOLOv8+swin_transfomerv2

测试环境&#xff1a;cuda11.3 pytorch1.11 rtx3090 wsl2 ubuntu20.04 踩了很多坑&#xff0c;网上很多博主的代码根本跑不通&#xff0c;自己去github仓库复现修改的 网上博主的代码日常出现cpu,gpu混合&#xff0c;或许是人家分布式训练了&#xff0c;哈哈哈 下面上干货…

Android回收视图

本文所有代码均存放于https://github.com/MADMAX110/BitsandPizzas 回收视图是列表视图的一个更高级也更灵活的版本。 回收视图比列表视图更加灵活&#xff0c;所以需要更多设置&#xff0c;回收视图使用一个适配器访问它的数据&#xff0c;不过与列表视图不同&#xff0c;回收…

[RCTF2015]EasySQL 二次注入 regexp指定字段 reverse逆序输出

第一眼没看出来 我以为是伪造管理员 就先去测试管理员账号 去register.php 注册 首先先注册一个自己的账号 我喜欢用admin123 发现里面存在修改密码的内容 那么肯定链接到数据库了 题目又提示是sql 那我们看看能不能修改管理员密码 首先我们猜测闭合 通过用户名 admin…

HTML,CSS,JavaScript知识点

HTML&#xff0c;CSS&#xff0c;JavaScript知识点 HTML篇 HTML是超文本标记语言。文件以.html结尾。 Hello,HTML。常用的工具: 标题: <h1>一级标题</h1><h2>二级标题</h2><h3>三级标题</h3><h4>四级标题</h4>无序列表和有…

YOLOv8+swin_transfomer

测试环境&#xff1a;cuda11.3 pytorch1.11 rtx3090 wsl2 ubuntu20.04 本科在读&#xff0c;中九以上老师或者课题组捞捞我&#xff0c;孩子想读书&#xff0c;求课题组师兄内推qaq 踩了很多坑&#xff0c;网上很多博主的代码根本跑不通&#xff0c;自己去github仓库复现修…

PHP免登录积分商城系统/动力商城/积分商城兑换系统源码Tinkphp

介绍&#xff1a; PHP免登录积分商城系统/动力商城/积分商城兑换系统源码Tinkphp&#xff0c;这个免登录积分商城系统是一种新型的电子商务模式&#xff0c;它通过省去麻烦的注册步骤&#xff0c;让用户能够很快又方便去积分兑换。这种商城系统具有UI干净整洁大方、运行顺畅的…

正点原子嵌入式linux驱动开发——STM32MP1启动详解

STM32单片机是直接将程序下载到内部 Flash中&#xff0c;上电以后直接运行内部 Flash中的程序。 STM32MP157内部没有供用户使用的 Flash&#xff0c;系统都是存放在外部 Flash里面的&#xff0c;比如 EMMC、NAND等&#xff0c;因此 STM32MP157上电以后需要从外部 Flash加载程序…

Mendix中的依赖管理:npm和Maven的应用

序言 在传统java开发项目中&#xff0c;我们可以利用maven来管理jar包依赖&#xff0c;但在mendix项目开发Custom Java Action时&#xff0c;由于目录结构有一些差异&#xff0c;我们需要自行配置。同样的&#xff0c;在mendix项目开发Custom JavaScript Action时&#xff0c;…

调度算法2-适用于交互式系统

一、时间片轮转调度算法(RR) 1.算法思想 Round-Robin 公平、轮流地为各个进程服务&#xff0c;让每个进程在一定时间间隔内都可得到响应 2.算法规则 按照各进程到达就绪队列的顺序&#xff0c;轮流让各个进程执行一个时间片 响应比(等待时间要求服务时间)/要求服务时间 3…

http请求报错:406 Not Acceptable的解决办法

目录 应用场景 基本概念 解决方法 方法一&#xff1a; 方法二&#xff1a; 方法三&#xff1a; 应用场景 接口在返回结果集的时候出现了406的报错&#xff0c;但是返回String类型不会报错&#xff0c;正常返回。 基本概念 406 Not Acceptable是一个HTTP响应状态码&…

Vue+ElementUI实现动态树和表格数据的分页模糊查询

目录 前言 一、动态树的实现 1.数据表 2.编写后端controller层 3.定义前端发送请求路径 4.前端左侧动态树的编写 4.1.发送请求获取数据 4.2.遍历左侧菜单 5.实现左侧菜单点击展示右边内容 5.1.定义组件 5.2.定义组件与路由的对应关系 5.3.渲染组件内容 5.4.通过动态…

Spring整合第三方框架

目录 Spring整合第三方框架 加载外部properties文件 自定义命名空间解析原理 自定义命名空间总结和案例需求 总结 案例 Spring整合第三方框架 加载外部properties文件 Spring整合第三方框架不像MyBatis那么简单了&#xff0c;例如Dubbo框架在与Spring框架整合时&#xf…

苹果CMS插件-苹果CMS全套插件免费

网站内容的生成和管理对于网站所有者和内容创作者来说是一个挑战。有一些强大的工具可以帮助您轻松地解决这些问题。苹果CMS插件自动采集插件、采集发布插件以及采集伪原创发布插件&#xff0c;是这些工具之一。它们不仅可以极大地节省您的时间和精力&#xff0c;还可以提高您网…