推荐系统三十六式学习笔记:原理篇.MAB问题|16|简单却有效的Bandit算法

news2024/12/23 4:02:38

目录

  • 推荐就是选择
  • MAB问题
  • Bandit算法
    • 1.汤普森采样算法
    • 2.UCB算法
    • 3.Epsilon贪婪算法
    • 4.效果对比
  • 冷启动
  • 总结

推荐系统的使命就是建立用户和物品之间的连接。建立连接可以理解成;为用户匹配到最佳的物品;但也有另一个理解就是,在某个时间某个位置为用户选择最好的物品。

推荐就是选择

生活中处处有选择,时常面对选择时,会不知所措,并产生害怕心理。究其原因是把每个选项看成独一无二的个体,一旦错过就不再来。推荐系统中一个一个单独的物品也如此,一旦选择呈现给用户,如果不能得到用户的青睐,就失去一个展示机会。如果跳出来看这个问题,选择时不再聚焦到具体每个选项,而是去选择类别,这样压力是不是就小了很多?

比如说,把推荐选择具体物品,上升到选择策略。如果后台算法中有三种策略:按照内容相似推荐,按照相似好友推荐,按照热门推荐。每次选择一张策略,确定了策略后,再选择策略中的物品,这样两个步骤。

那么是不是有办法解决这个问题呢?当然有,那就是Bandit算法。

MAB问题

Bandit算法来源于常见的赌博机问题:一个赌徒,要去摇老虎机,走进赌场一看,一排老虎机,外表一模一样,但是每个老虎机吐钱的概率可不一样。他不知道每个老虎机吐钱的概率分布是什么,那么想最大化收益该怎么做呢?

这就是多臂赌博机问题(Multi-armed bandit problem,k-armed bandit problem),简称MAB问题。有很多问题都属于MAB问题。
1.假设一个用户对不同类别的内容感兴趣程度不同,当推荐系统初次见到这个用户时,怎么快速得知道他对每类内容的感兴趣程度?这也是推荐系统常常面对的冷启动问题。
2.假设系统中有若干广告库存物料,该给每个用户展示哪个广告呢,才能获得最大的点击收益,是不是每次都挑收益最好的那个呢?
3.算法工程师又设计出了新的策略或者模型,如何既能知道它和旧模型相比谁更靠谱又对风险可控呢?

这些问题全都是关于选择的问题。只要是关于选择的问题,都可以简化成一个MAB问题。

推荐系统里面有两个顽疾:一个是冷启动,一个是探索利用问题。后者又称为EE问题:Exploit-Explore问题。针对这两个顽疾,Bandit算法可以入药。

探索利用问题什么意思呢?
探索的意思是:不断探索用户的新兴趣才行,不然很快就出现一模一样的反复推荐。就好比你虽然有了一些继续,但还得继续搬砖,不然花完了就要喝西北风了。

Bandit算法

Bandit算法并不是指一个算法,而是一类算法。现在就要介绍一下Bandit算法家族怎么解决这类选择问题的。
首先,来定义一下,如何衡量选择的好坏?Bandit算法的思想是:看看选择会带来多少遗憾,遗憾越少越好。在MAB问题里,用来量化选择好坏的目标就是累计遗憾,计算公式如下:

在这里插入图片描述
公式有两部分组成:一个是遗憾,一个是累积。求和符号内部表示每次选择的遗憾多少。
Wopt表示“每次都运气好,选择了最好的选择,该得到多少收益,WBi就表示每一次实际选择得到的收益,两者之差就是遗憾的量化,在T次选择后,就有了积累遗憾。

在这个公式中:为了简化MAB问题,每个臂的收益不是0,就是1,也就是伯努利收益。

这个公式可以用来对比不同Bandit算法的效果:对同样的多臂问题,用不同的Bandit算法模拟实验相同次数,比比看哪个Bandit算法累积遗憾增长的慢,那就是效果较好的算法。
Bandit算法处理方法是:小心翼翼的试,越确定某个选择好,就多选择它,越确定某个选择差,就越少选择它。

如果某个选择实验次数较少,导致不确定好坏。那就多给一些被选择机会。简单来说,把选择的机会给“确定好的”和“还不确定的”

Bandit 算法中有几个关键因素:臂,回报,环境。
1.臂:是每次选择的候选项,好比就是老虎机,有几个选项就有几个臂;
2.回报:就是选择一个臂之后得到的奖励,好比选择一个老虎机之后吐出来的金币;
3.环境:就是决定每个臂不同的那些因素,统称为环境。

将这几个关键元素对应到推荐系统中来。
1.臂:每次推荐要选择候选池,可能是具体物品,也可能是推荐策略,也可能是物品类别;
2.回报:用户是否对推荐结果喜欢,喜欢了就是正面的回报,没有买账就是负面回报或者零回报;
3.环境:推荐系统面临的这个用户就是不可捉摸的环境。

下面开始介绍最常用的几个Bandit算法。

1.汤普森采样算法

第一个是汤普森采样算法。简单介绍一下它的原理:假设每个臂是否产生收益,起决定作用的是背后有一个概率分布,产生收益的概率为P.
每个臂背后绑定了一个概率分布,每次做选择时,让每个臂的概率分布各自独立产生一个随机数,按照这个随机数排序,输出产生最大随机数那个臂
对应的物品。为什么随机数这么神奇?

在这里插入图片描述

β分布有α和β两个参数。这两个参数决定了分布的形状和位置。

1.当α+β值越大,分布曲线就越窄,分布就越集中,这样的结果就是产生的随机数会容易靠近中心位置。
2.当α/(α+β)的值越大,分布的中心位置越靠近1,反之就越靠近0,这样产生的随机数也相应的更容易靠近1或者0;

β分布的这两个特点,可以把它分成三种情况:
1.曲线很窄,而且靠近1;
2.曲线很窄,而且靠近0;
3.曲线很宽。

这和前面所讲的选择有什么关系呢?可以把β分布的α参数看成是推荐后得到用户点击的次数,把β参数看成是没有得到用户点击的次数。按照这个对应,再来看一下汤普森采样的过程。
1.取出每一个候选对应的参数α和β;
2.为每个候选用α和β作为参数,用β分布产生一个随机数;
3.按照随机数排序,输出最大
4.观察用户反馈,如果用户点击则对应候选α+1,否则β+1;

注意,实际上在推荐系统中,要为每一个用户都保存一套参数,比如候选有m个,用户有n个,那么就保存2mn个参数;

汤普森采样为什么有效呢?解释一下:
1.如果一个候选被选中的次数很多,也就是α+β很大了,它的分布会变得很窄,换句话说这个候选的收益已经非常确定了,用它产生随机数,基本上就在中心位置附近,接近平均收益。
2.如果一个候选不但α+β很大,即分布很窄,而且α/(α+β)也很大,接近1,那就确定这是一个好的候选项,平均收益很好,每次选择很占优势,就进入利用阶段,反之则几乎再无出头之日。
3.如果一个候选的a+b很小,分布很宽,也就是没有被选择太多次,说明这个候选是好是坏还不太确定,那么用它产生随机数就有可能得到一个较大的随机数,在排序时被优先输出,这就起到了前面说的探索作用。

用python实现汤普森采样:

choice =numpy.argmax(pymc.rbeta(1+self.wins,1+self.trials-self.wins))

2.UCB算法

第二个常用的Bandit算法就是UCB算法。UCB算法全称是Upper Confidence Bound ,即置信区间上界。它也为每个臂评分,每次选择评分最高的候选臂输出,每次输出后观察用户反馈,回来更新候选臂的参数。
每个臂的评分公式为:

在这里插入图片描述
公式有两部分,加号前面是这个候选臂到目前的平均收益,反应了它的效果,后面的叫做Bonus,本质上是均值的标准差,反应了候选臂效果的不确定性,就是置信区间的上边界。t是目前的总选择次数,Tjt是每个臂被选择次数;

如果一个候选的被选择次数很少,即Tjt很小,那么它的Bonus就会较大,在最后排序输出时有优势,这个Bonus反映了一个候选的收益置信区间宽度,即Bonus越大,候选的平均收益置信区间越宽,越不确定,越需要更多的选择机会。反之,如果平均收益很大,就是说加号左边很大,也会在被选择时有优势。

这个评分公式和汤普森采样一样的思想:
1、以每个候选的平均收益为基准进行选择;
2、对于被选择次数不足的给予照顾;
3、选择倾向的是那些确定收益较好的候选;

3.Epsilon贪婪算法

这是一个朴素的算法,思想有点类似模拟退火,做法如下:
1.选择一个(0,1)之间较小的数,叫做Epsilon,也是这个算法名字来历。
2.每次以概率Epsilon做一件事:所有候选臂中随机选择一个,以1-Epsilon的概率去选择平均收益最大的那个臂。
Epsilon的值可以控制对探索和利用的权衡程度,这个值越接近0,在探索上就越保守。
和这个做法相似,还有一个更朴素的做法:先试几次,等每个臂都统计到收益之后,就一直选均值最大那个臂。

4.效果对比

以上几个算法,可以简单用模拟试验的方式对比其效果,如图所示:

在这里插入图片描述
横坐标是模拟次数,可以看成随着时间推移,纵坐标就是累积遗憾,越高说明搞砸的次数越多。在模拟后期,几把呢上各种算法优劣一目了然。从上到下分别是下面几种:
1.完全随机:就是不顾用户反馈的做法;
2.朴素选择:就是认准一个效果好的,一直推。
3.Epsilon贪婪算法:每次以小概率尝试新的,大概率选择效果好的。
4.UCB算法:每次都会给予机会较少的候选一些倾向。
5.汤普森采样:用β分布管理每一个候选的效果。

UCB算法和汤普森采样与其他算法相比,要显著优秀很多。

冷启动

推荐系统的冷启动问题可以用Bandit算法来解决一部分。
大致思路如下:
1.用分类或者Topic来表示每个用户兴趣,我们可以通过几次试验,来刻画出新用户心中对每个topic的感兴趣概率。
2.如果用户对某个Topic感兴趣,就表示我们得到了收益,如果推给了它不感兴趣的topic,推荐系统就表示很遗憾了。
3.当一个新用户来了,针对这个用户,我们用汤普森采样为每一Topic采用一个随机数,排序后,输出采样值TopN的推荐item。注意这里一次选择了TopN个候选臂。
4.等着获取用户的反馈,没有反馈则更新对应Topic的b值,点击了则更新对应Topic的α值。

总结

今天给你介绍了Bandit算法。Bandit算法把每个用户看成一个多变的环境,待推荐的物品就如同赌场里老虎机的摇臂,如果推荐了符合用户心目中喜欢的,就好比是从一台老虎机中摇出了金币一样。

今天重点介绍的Bandit算法有汤普森采样,UCB算法,Epsilon贪婪算法,并且用模拟的方式对比了它们的效果,汤普森采样以实现简单和效果显著而被人们喜爱,需要时不妨先试一下它。

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

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

相关文章

彩虹PLM系统:电子制造业的高效协同平台

彩虹PLM系统:电子制造业的高效协同平台 在当今竞争激烈的电子制造业中,企业亟需一种能够整合全生命周期数据、促进跨部门协同并提升生产效率的解决方案。彩虹PLM系统,作为产品生命周期管理的佼佼者,凭借其卓越的技术实力和丰富的行…

前端基础--Vue3

Vue3基础 VUE3和VUE2的区别 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece 于 2022 年 2 月 7 日星期一成为新的默认版本! Vue3性能更高,初次渲染快55%, 更新渲染快133% 。体积更小 Vue3.0 打包大小减少41%。 同时Vue3可以更好的支持T…

AI 影评生成

电影作为一种重要的艺术形式,承载着无穷的想象力和情感表达。它不仅是娱乐的载体,更是一面照亮人性、社会和历史的镜子。通过电影,观众可以体验不同的世界、感受各种情感,甚至找到共鸣和启发。在这个充满多样性和创意的电影世界中…

自养号测评:引领跨境电商新纪元的策略与实践

在跨境电商的浩瀚蓝海中,自养号测评如同一股不可忽视的潮流,正悄然重塑着行业的未来。这一策略通过精心培育海外买家账号,不仅有效规避了服务商测评的诸多风险,更成为众多卖家提升产品销量与口碑的黑科技运营武器。 核心科技&…

支付宝服务商支付,如何邀请商户入驻?

支付宝服务商支付:如何邀请商户入驻 一、支付宝服务商支付 支付宝服务商支付模式为商户带来了诸多优势。它能够整合多种支付方式,包括扫码支付、刷脸支付、线上支付等,满足不同消费者的支付习惯。同时,提供了强大的财务管理功能…

【MindSpore学习打卡】应用实践-计算机视觉-ShuffleNet图像分类:从理论到实践

在当今的深度学习领域,卷积神经网络(CNN)已经成为图像分类任务的主流方法。然而,随着网络深度和复杂度的增加,计算资源的消耗也显著增加,特别是在移动设备和嵌入式系统中,这种资源限制尤为突出。…

数据结构(JAVA)—代码题

01-数据结构—判断题 02-数据结构—选择题 03 数据结构—多选填空程序填空 ​ 01-顺序表的建立及遍历 import java.util.Iterator; import java.util.LinkedList; import java.util.ListIterator; import java.util.Scanner;public class Main {public static void main(St…

有哪些好的 Stable Diffusion 提示词(Prompt)可以参考?

Docker 作图咒语生成器 docker-prompt-generator 是一个开源项目,可以利用模型反推出提示词,让你偷偷懒,无需琢磨怎么写prompt,只需要找一个差不多的模型反推一下,直接用就好了,支持支持 MidJourney、Stab…

《Linux开发笔记》C语言编译

C语言编译过程 编译过程主要分为四步:预处理、编译、汇编、链接 预处理:主要用于查找头文件、展开宏 编译:把.i文件编译成.s文件 汇编:把.s文件汇编为.o文件 链接:把多个.o文件链接成一个app 以上四个步骤主要由3个命…

颅内感染性疾病患者就诊指南

颅内感染性疾病,即病原体侵入中枢神经系统,导致脑部或脑膜发生炎症的疾病。这些病原体可能是细菌、病毒、真菌或寄生虫等。颅内感染不仅会对脑组织造成损害,还可能引发一系列严重的并发症,如癫痫发作、意识障碍等 颅内感染性疾病的…

电子邮件OTP验证身份认证接口API服务商比较

电子邮件OTP验证身份认证接口API服务商如何正确选择? 电子邮件OTP验证是一种广泛应用且安全的身份认证方式。AokSend将比较几家主要的电子邮件OTP验证身份认证接口API服务商,帮助企业选择合适的解决方案。 电子邮件OTP:验证优势 可以为用户…

UE4_材质_材质节点_DepthFade

一、DepthFade参数 DepthFade(深度消退)表达式用来隐藏半透明对象与不透明对象相交时出现的不美观接缝。 项目说明属性消退距离(Fade Distance)这是应该发生消退的全局空间距离。未连接 FadeDistance(FadeDistance&a…

数字时代的巨变!互联网思维与按效果付费的超强联合!

数字时代企业转型的重大变革 家人们,今天来聊聊数字时代企业数字化转型那些事儿! 在这个时代,企业数字化转型已经是必然趋势啦。蚓链数字化生态系统在帮助企业在转型过程中采用互联网思维,再加上按效果付费的商业交付模式&#xf…

小程序开发平台版源码系统——万能门店小程序功能 前后端分离 带完整的安装代码包以及搭建教程

系统概述 在移动互联网的浪潮中,小程序以其轻量、便捷、无需下载即可使用的特点,迅速成为连接用户与商家的新桥梁。为了满足广大商家快速搭建个性化、高效运营的小程序需求,我们精心打造了“小程序开发平台版源码系统——万能门店小程序功能…

【经典算法题】两数之和

暴力解法 两层for循环&#xff0c;O(n*n) 优化解法 哈希&#xff0c;O(n) class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> hashtable new HashMap<Integer, Integer>();for (int i 0; i < nums.length; i) {if (ha…

【Hec-Ras】第一期:软件安装

Hec-Ras软件安装 1 HEC-RAS软件介绍2 HEC-RAS软件下载3 HEC-RAS软件安装4 HEC-RAS软件界面介绍参考 1 HEC-RAS软件介绍 HEC-RAS 是美国陆军工程兵团工程水文中心&#xff08; Hydrologic Engineering Centers, HEC&#xff09;开发的河道水力计算程序&#xff08;River Analys…

前后端分离django-restframework——解决跨域请求

为什么会出现跨域问题&#xff1f; 出于浏览器的同源策略限制。同源策略&#xff08;Sameoriginpolicy&#xff09;是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;则浏览器的正常功能可能都会受到影响。可以说Web是构建…

Redis 7.x 系列【16】持久化机制之 AOF

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 1. 概述 默认情况下&#xff0c;Redis 使用RDB持久化&#xff0c;但如果进程出现问题或电源中断…

企业如何在当前形势下实现精益生产?

近年来&#xff0c;企业面临诸多挑战&#xff0c;从成本控制到效率提升&#xff0c;每一项决策都关乎着企业的生死存亡。尤其是在全球经济一体化和市场竞争日益激烈的大背景下&#xff0c;企业如何实现精益生产&#xff0c;成为了摆在众多企业家面前的一道难题。今天&#xff0…

STM32 看门狗 HAL

由时钟图可以看出看门狗采用的是内部低速时钟&#xff0c;频率为40KHz 打开看门狗&#xff0c;采用32分频&#xff0c;计数1250。 结合设置的分频系数和重载计数值&#xff0c;我们可以计算出看门狗的定时时间&#xff1a; 32*1250/40kHz 1s 主函数中喂狗就行 HAL_IWDG_Ref…