(17条消息) 推荐系统详解(六)MAB问题_ziqiiii的博客-CSDN博客_上下文多臂强盗(mab)问题

(18条消息) UCB——上界置信算法_电通一枝花的博客-CSDN博客_ucb算法

图例↑结合一起看好理解
0.场景引入

在推荐系统中,选择很困难,因为一旦选择呈现给用户,如果不能得到用户的青睐,就失去了一个展示机会。如果跳出来看这个问题,选择时不再聚焦到具体每个选项,而是去选择类别,这样压力是不是就小了很多?比如说,把推荐选择具体物品,上升到选择策略。如果后台算法中有三种策略:按照内容相似推荐,按照相似好友推荐,按照热门推荐。每次选择一种策略,确定了策略后,再选择策略中的物品,这样两个步骤。

1.随机调度问题可分为三大类:一批随机作业的调度问题, 多臂老虎机问题,排队系统的调度问题

2.多臂老虎机基本问题:

1. 有K台machine,每次选取其中一台pull the lever,该machine提供一个random的reward,每一台machine的reward服从特定的概率分布。

2. 一个gambler有N次lever pulls的机会,他的目标是使得回报reward最大化,那么他要确定这N次pull 的arm的顺序。显然,作为一个聪明的赌徒,他会记录下每一次得到的reward,试图找出能给出最大reward的那台machine,尽量多次数的去pull这台machine 的arm。

3.多臂老虎机下衍生出的问题

对于每一轮选择,主要面对的问题是Exploitation-Exploration.(以及冷启动问题)

①EE问题:上面提到过的exploit-explore问题;比如已知某用户对A产品感兴趣,那么在大多数时间要给他推送A的链接才能赚钱,这就是exploit;但是为了赚更多的钱,就需要知道他还对哪些产品感兴趣,那么在有些时候就可以尝试一下给他推送B,C,D,E等选择看用户的反应,这就是explore

②用户冷启动问题:面对新用户时如何用尽量少的次数,猜出用户的大致兴趣

3.1 针对EE问题,Bandit 算法可以入药

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

简单描述一下这个公式。公式有两部分构成:一个是遗憾,一个是累积。求和符号内部就表示每次选择的遗憾多少。

Wopt 就表示,每次都运气好,选择了最好的选择,该得到多少收益,

WBi 就表示每一次实际选择得到的收益,两者之差就是“遗憾”的量化,在 T 次选择后,就有了累积遗憾

在这个公式中:为了简化 MAB 问题,每个臂的收益不是 0,就是 1,也就是伯努利收益,对同样的多臂问题,用不同的 Bandit 算法模拟试验相同次数,比比看哪个 Bandit 算法的累积遗憾增长得慢,那就是效果较好的算法。

Bandit 算法中有几个关键元素:臂,回报,环境

1. 臂:每次推荐要选择候选池,可能是具体物品,也可能是推荐策略,也可能是物品类别;

2. 回报:用户是否对推荐结果喜欢,喜欢了就是正面的回报,没有买账就是负面回报或者零回报;

3. 环境:推荐系统面临的这个用户就是不可捉摸的环境。

Bandit算法分类介绍

①汤普森采样算法

算法原理:假设每个臂是否产生收益,起决定作用的是背后有一个概率分布,产生收益的概率为 p。每个臂背后绑定了一个概率分布(贝塔分布);每次做选择时,让每个臂的概率分布各自独立产生一个随机数,按照这个随机数排序,输出产生最大随机数那个臂对应的物品。

贝塔分布有 a 和 b 两个参数。这两个参数决定了分布的形状和位置:

1. 当 a+b 值越大,分布曲线就越窄,分布就越集中,这样的结果就是产生的随机数会容易靠近中心位置;

2. 当 a/(a+b) 的值越大,分布的中心位置越靠近 1,反之就越靠近 0,这样产生的随机数也相应第更容易靠近 1 或者 0。

在推荐系统的设计中,贝塔分布的 a 参数看成是推荐后得到用户点击的次数,把分布的 b 参数看成是没有得到用户点击的次数

②UCB算法

  • 普通UCB

第二个常用的 Bandit 算法就是 UCB 算法,UCB 算法全称是 Upper Confidence Bound,即置信区间上界。置信区间可以简单直观地理解为不确定性的程度,区间越宽,越不确定,反之就很确定。每个候选的回报均值都有个置信区间随着试验次数增加,置信区间会变窄,相当于逐渐确定了到底回报丰厚还是可怜。每次选择前,都根据已经试验的结果重新估计每个候选的均值及置信区间。选择置信区间上界最大的那个候选

“选择置信区间上界最大的那个候选”,这句话反映了几个意思:如果候选的收益置信区间很宽,相当于被选次数很少,还不确定,那么它会倾向于被多次选择,这个是算法冒风险的部分;如果候选的置信区间很窄,相当于被选次数很多,比较确定其好坏了,那么均值大的倾向于被多次选择,这个是算法保守稳妥的部分;UCB 是一种乐观冒险的算法,它每次选择前根据置信区间上界排序,反之如果是悲观保守的做法,可以选择置信区间下界排序。

它为每个臂评分,每次选择评分最高的候选臂输出,每次输出后观察用户反馈,回来更新候选臂的参数。每个臂的评分公式为:

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

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

反之如果平均收益很大,就是说加号左边很大,也会在被选择时有优势。

这个评分公式也和汤普森采样是一样的思想:

1. 以每个候选的平均收益为基准线进行选择;

2. 对于被选择次数不足的给予照顾;

3. 选择倾向的是那些确定收益较好的候选。

  • 进阶版-LinUCB

“Yahoo!”的科学家们在 2010 年基于 UCB 提出了 LinUCB 算法,它和传统的 UCB 算法相比,最大的改进就是加入了特征信息,每次估算每个候选的置信区间,不再仅仅是根据实验,而是根据特征信息来估算,这一点就非常的“机器学习”了。

LinUCB 算法做了一个假设:一个物品被选择后推送给一个用户,其收益和特征之间呈线性关系。在具体原理上,LinUCB 有一个简单版本以及一个高级版本。简单版本其实就是让每一个候选臂之间完全互相无关,参数不共享。高级版本就是候选臂之间共享一部分参数。

具体内容见参考文章1,或者下次我再整理一下单独发一篇

总结:LinUCB 不再是上下文无关地,像盲人摸象一样从候选臂中去选择了,而是要考虑上下文因素,比如是用户特征、物品特征和场景特征一起考虑。每一个候选臂针对这些特征各自维护一个参数向量,各自更新,互不干扰每次选择时用各自的参数去计算期望收益和置信区间,然后按照置信区间上边界最大的输出结果观察用户的反馈,简单说就是“是否点击”,将观察的结果返回,结合对应的特征,按照刚才公式,去重新计算这个候选臂的参数

当 LinUCB 的特征向量始终取 1,每个候选臂的参数是收益均值的时候,LinUCB 就是 UCB。说完简单版的 LinUCB,再看看高级版的 LinUCB。与简单版的相比,就是认为有一部分特征对应的参数是在所有候选臂之间共享的,所谓共享,也就是无论是哪个候选臂被选中,都会去更新这部分参数。

③Epsilon 贪婪算法

这是一个朴素的算法,也很简单有效,思想有点类似模拟退火,做法如下。

1. 先选一个 (0,1) 之间较小的数,叫做 Epsilon,也是这个算法名字来历。

2. 每次以概率 Epsilon 做一件事:所有候选臂中随机选一个,以 1-Epsilon 的概率去选择平均收益最大的那个臂。

是不是简单粗暴?Epsilon 的值可以控制对探索和利用的权衡程度。这个值越接近 0,在探索上就越保守。

3.2 处理冷启动问题

推荐系统冷启动问题可以用 Bandit 算法来解决一部分。大致思路如下:

1. 用分类或者 Topic 来表示每个用户兴趣,我们可以通过几次试验,来刻画出新用户心目中对每个 Topic 的感兴趣概率。

2. 这里,如果用户对某个 Topic 感兴趣,就表示我们得到了收益,如果推给了它不感兴趣的 Topic,推荐系统就表示很遗憾 (regret) 了。

3. 当一个新用户来了,针对这个用户,我们用汤普森采样为每一个 Topic 采样一个随机数,排序后,输出采样值 Top N 的推荐 Item。注意,这里一次选择了 Top N 个候选臂。

4. 等着获取用户的反馈,没有反馈则更新对应 Topic 的 b 值,点击了则更新对应 Topic 的 a 值

参考文章:

(17条消息) 推荐系统详解(六)MAB问题_ziqiiii的博客-CSDN博客_上下文多臂强盗(mab)问题(17条消息) 推荐系统详解(六)MAB问题_ziqiiii的博客-CSDN博客_上下文多臂强盗(mab)问题(17条消息) 推荐系统详解(六)MAB问题_ziqiiii的博客-CSDN博客_上下文多臂强盗(mab)问题

关于Multi-Armed Bandit(MAB)问题及算法 - 简书 (jianshu.com)

Multi-Armed Bandit(MAB)多臂老虎机问题学习笔记相关推荐

  1. 从多臂老虎机开始学习强化学习中的探索与利用

    从多臂老虎机开始学习强化学习中的探索与利用 \quad 目录 从多臂老虎机开始学习强化学习中的探索与利用 多臂老虎机问题 形式化描述 估计期望奖励 代码实现 策略中的探索与利用 ϵ\epsilonϵ- ...

  2. 机械臂抓取学习笔记二

    论文: Antipodal Robotic Grasping using Generative Residual Convolutional Neural Network 摘要: 本文提出了一个模块化 ...

  3. 机械臂抓取学习笔记三

    论文:Real-Time Deep Learning Approach to Visual Servo Control and Grasp Detection for Autonomous Robot ...

  4. 基于基于模型设计(MBD)(我没打错)的机械臂开发课程学习笔记(1)——基本知识和环境配置

    目录 ▶ MBD的一些基本知识 ● 什么是MBD ● MBD开发流程 ● MIL模型在环测试: ● SIL软件在环测试: ● PIL处理器在环测试: ● HIL处理器在环测试: ▶ 安装支持包及相关软 ...

  5. 机械臂抓取学习笔记四

    论文: Lightweight Convolutional Neural Network with Gaussian-based Grasping Representation for Robotic ...

  6. 强化学习笔记:多臂老虎机问题(7)--Gradient Bandit Algorithm

    目录 0. 前言 1. 算法原理 2. Python仿真 2.1 函数改造 2.2 softmax() 2.3 改造后的k_armed_bandit_one_run() 2.4 对比仿真 2.5 一点 ...

  7. Multi-Armed Bandit--基于时变多臂老虎机的在线上下文感知推荐

    Online Context-Aware Recommendation with Time Varying Multi-Armed Bandit 基于时变多臂老虎机的在线上下文感知推荐 摘要 为了预测 ...

  8. 多臂老虎机(Multi-armed bandit problem)

    我们会遇到很多选择的场景,如:上哪所大学,学什么专业,去哪家公司,等等.这些选择问题都会让选择困难症患者头大.那么,有什么科学的办法来解决这些问题呢?答案是:有!而且是非常科学的办法,那就是多臂老虎机 ...

  9. 强化学习——day12 多臂老虎机问题MAB

    在多臂老虎机(multi-armed bandit,MAB)问题(见图 2-1)中,有一个拥有 根拉杆的老虎机,拉动每一根拉杆都对应一个关于奖励的概率分布 .我们每次拉动其中一根拉杆,就可以从该拉杆对 ...

最新文章

  1. 超级详细的 Python 数据分析指南
  2. 测试 ClownFish、CYQ、Entity Framework、Moon、MySoft、NHibernate、PDF、XCode数据访问组件性能...
  3. 内核ioread,iowrite volatie 的正确使用
  4. Java 洛谷 P1425 小鱼的游泳时间
  5. JBPM中 使用JobExecutor执行timer定义的job
  6. linux搭建测试环境常见问题,在Linux环境下搭建CCID测试环境
  7. Python爬虫中文乱码问题(爬虫乱码)
  8. 零基础学python看什么书好?
  9. Django中的Object Relational Mapping(ORM)
  10. 接收list参数_Python 犄角旮旯--List
  11. 官网为啥这么喜欢IE和Flash?
  12. qt学习之旅--MinGW编译FFmpeg(32bit)
  13. 霹雳吧啦Wz语义分割学习笔记P2
  14. 【01:转自知乎:关于 openSUSE 】
  15. wire tox_Tox-rs的漫长旅程。 第1部分
  16. 传奇服务器固态硬盘和陈列,租用服务器选择固态硬盘的优点和缺点
  17. 单词记忆分类系统化--000
  18. 2018互联网月饼哪家强?阿里有情怀、腾讯最实在、咪咕最暖萌、联想最简单粗暴......
  19. matlab fsolve 解的范围,【求助】用fsolve解四元非线性方程组,求解参数的范围问题...
  20. Manjaor连接wifi失败,wifi设备状态为unclaimed

热门文章

  1. Ubuntu的build-essential有什么作用
  2. 王权富贵软件:安装Python的方法
  3. 基于STM32的数控精密恒流源设计
  4. 解开Vista谜团 你真的需要Vista吗?
  5. java socket工具类
  6. python爬女神_没有忍住,还是用Python爬了N多个女神
  7. 菜鸟程序员内功心法--C++(核心编程)
  8. Java实现 蓝桥杯 算法提高 概率计算
  9. 通用实时日志分类统计实践
  10. class ATwhere T:new()是什么意思