Introduction to Multi-Armed Bandits——01 Scope and Motivation

news2024/11/17 23:32:06

Introduction to Multi-Armed Bandits——01 Scope and Motivation

参考资料

  1. Slivkins A. Introduction to multi-armed bandits[J]. Foundations and Trends® in Machine Learning, 2019, 12(1-2): 1-286.
  2. 项目地址 https://github.com/yijunquan-afk/bandit-learning

Bandit算法学习[网站优化]偏实战,而本专栏偏理论学习。

Multi-armed bandits是一个非常简单强大的算法框架,我们接下来从三个具体的例子进行学习:

  • 新闻网站

    当一个新用户到达时,网站选取一个文章标题来显示,观察用户是否点击这个标题。该网站的目标是最大限度地提高总点击量

  • 动态定价

    一家商店正在销售一种数字商品,例如,一个应用程序或一首歌。当一个新顾客到来时,商店选择一个提供给这个顾客的价格。顾客购买(或不购买),然后离开。商店的目标是使总利润最大化

  • 投资

    每天早上,你选择一只股票,然后投资1美元。在这一天结束的时候,你观察每只股票的价值变化。目标是使总财富最大化

Multi-armed bandits结合了这些例子(以及许多其他例子)。在基本版本中,一个算法有 K K K 种可能的动作(action)可供选择,也就是臂(arm) 和T轮。在每一轮中,算法选择一只臂,并为这只臂收集奖励(reward)。奖励是独立地从某种分布中提取的,这种分布是固定的(即只取决于所选择的臂),但不为算法所知。

image-20230113225801860

在基本模型中,算法在每一轮之后都会观察所选臂的奖励,但不会观察其他可能被选中的臂。因此,算法通常需要探索(explore):尝试不同的臂以获得新的信息。需要有一个探索和利用(exploration and exploitation)之间的权衡:根据现有信息做出最佳的近期决定。这种权衡在许多应用场景中都会出现,在Multi-armed bandits中至关重要。从本质上讲,该算法努力学习哪些臂是最好的,同时不花太多的时间去探索。

一、多维问题空间

Multi-armed bandits是一个巨大的问题空间,有许多的维度。接下来我们将讨论其中的一些建模维度。

1.1 辅助反馈(Auxiliary feedback)

在每一轮之后,除了所选臂的奖励之外,算法还能得到什么反馈?算法是否观察到其他臂的奖励?下面是一些例子:

image-20230113233624401

我们将反馈类型分为三类:

  • bandit 反馈

    算法只能观察到所选臂的奖励,无法看到其他臂的。

  • 完全反馈

    算法可以观察到所有可能被选中的臂的奖励。

  • 部分反馈

    算法除了能观察到所选臂的奖励,还能观察到其他信息,但是不总是等同于完全反馈。

我们主要关注bandit反馈的问题,还涵盖了一些关于完全反馈的基本结果。部分反馈有时出现在扩展和特殊情况下,可用于提高性能。

1.2 奖励模型

奖励如何产生,有以下几种方式:

  • 独立同分布奖励

    每只臂的奖励是独立于固定分布的,这取决于臂,而不是轮次 t t t

  • 对抗性奖励

    奖励可以是任意的,就好像它们是由试图愚弄算法的“对手(adversary)”选择的。对手可能无视算法的选择(oblivious),或者对算法的选择是自适应的(adaptive)。

  • 被限制的对手

    奖励是由对手选择的,该对手受到一些限制,例如,每只臂的奖励从一轮到另一轮不能有太大变化,或者每只臂的奖励最多只能变化几次,或者奖励的总变化是有上限的。

  • 随机过程奖励

    决定奖励的臂的状态,随着时间的推移,演变为一个随机过程(random process),例如马尔可夫链。在特定回合中的状态转换可能取决于算法是否选择了臂。

1.3 上下文

算法在选择行动之前可能会观察一些上下文。这样的上下文通常包含当前用户的已知属性,并允许进行个性化操作。

image-20230114092934553

现在,奖励取决于环境和选择的臂。因此,该算法的目标是找到将上下文映射到臂的最佳策略(policy)。

二、应用领域

MAB应用在各种领域,举例如下:

image-20230114094637869

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

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

相关文章

LeetCode622.设计循环队列

设计循环队列1.题目描述2.思路3.代码实现以及分析3.1 创建结构体3.2创建一个具体的循环队列3.3判断是否为空 和 判断是否为满4. 进队列 和 出队列5.取队首和队尾元素6.释放空间7.总结1.题目描述 设计循环队列 2.思路 环形队列的抽象图 我们这里使用数组模拟实现循环队列&…

TransactionTemplate自动注入,只看这一篇文章就够了

标准的springboot接入mybatis步骤 1.引入了对应的依赖包 2.应用的properties下增加相应配置 3.根据配置进行自动装配 一般我们会配置这些信息,主要包括三类 1.数据库的连接信息 2.指定的数据源类型 3.mybatis的配置信息 配完以后,当你启动SpringBoot的主…

你是真的“C”——详解C语言数组模块知识

详解C语言数组模块知识😎前言🙌一维数组的创建和初始化🙌1.1 数组的创建💞1.2 数组的初始化💞1.3 一维数组的使用💞1.4 一维数组在内存中的存储💞二维数组的创建和初始化🙌1.1 二维数…

【Python百日进阶-数据分析】Day225 - plotly的Ohlc图go.Ohlc()

文章目录一、语法二、参数三、返回值四、实例4.1 简单的OHLC图4.2 隐藏滑块的OHLC图4.3 添加自定义文本和注释4.4 自定义OHLC颜色4.5 带日期时间对象的简单的OHLC图4.6 自定义悬浮文本4.7 Dash中的应用一、语法 ohlc(Open-High-Low-Close 的缩写)是一种…

【C++逆向】虚表(Virtual table)逆向 | 安卓so虚函数逆向

什么是多态 定义一个虚基类ISpeaker class ISpeaker{ protected:size_t b; public:ISpeaker( size_t _v ): b(_v) {}virtual void speak() 0; };有两个子类,都实现了虚函数speak(): class Dog : public ISpeaker { public:Dog(): ISpeaker(0){}//vir…

1581_AURIX_TC275_SMU故障处理梳理

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 前面为了缓解自己的学习压力,一次学习笔记大概也就是看10页文档整理一下。这一次其实是看了几十页,但是里面过掉了一些信息,而且这部分内容不是很好拆分…

hive在IDEA中debug

一、hive在IDEA中debug 安装hadoop环境(1和2替换顺序也可以) 注:hadoop环境不需要从源码编译 https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html 按照官网教程编译源码 https://cwiki.apach…

软件工程专业课实验报告

一、结构化分析方法1.1需求描述教务管理子系统的需求描述:教务管理是一项需求周密计划、严谨安排的工作,要依据教师、学生信息进行合理安排。开学阶段,需要教师提交开课申请进行开课,学生根据老师的开课信息,选择课程&…

uview 使用遇到的问题。

uviewuniappvue,uView是uni-app生态专用的UI框架。 1. 注意uview版本,uview 2.0与uview1.0 官方提示:uView2.0是继1.0以来的一次重大更新,2.0已全面兼容nvue。 因此在接手项目的时候首先得看清楚,之前开发的是uview…

【自学Python】Python获取字符串长度

Python获取字符串长度 Python获取字符串长度教程 在 Python 中要想获取 字符串 长度可以使用 len() 函数。 Python len()函数详解 定义 我们将要获取的字符串的长度,传进 len() 函数,即可实现获取字符串的长度。 语法 len(string)参数 参数描述s…

【7】K8s_Ingress | Service的统一网关入口

目录 1、Ingress简介 2、安装ingress 【1】制作ingress.yaml文件并执行 【2】测试,创建一个test.yaml文件并执行 【3】设置域名访问,用yaml文件 【4】路径重写 【5】流量限制 1、Ingress简介 Ingress: Service的统一网关入口是k8s中的一个api对象&…

时序数据库TDengine基本概念和建模思路

目录 一 、 时序数据库基本概念 采集量 标签 数据采集点 表 超级表 子表 库 二、 TDengine数据库建模策略 建表模式建表情形 行列数据库存储的区别: 接触的传统业务的数据模式都是行存储,我们会把不同类型的对象创建不同的表进行存储他们各自的属…

机器学习公式推导与代码实现-无监督学习模型

聚类分析与k均值聚类算法 督学习算法。在给定样本的情况下,聚类分析通过度量特征相似度或者距离,将样本自动划分为若干类别。 距离度量和相似度度量方式 距离度量和相似度度量是聚类分析的核心概念,大多数聚类算法建立在距离度量之上。常用的距离度量方式包括闵氏距离和马…

linux系统中使用QT来实现数据库的调用方法

大家好,今天主要和大家分享一下,如何使用QT中数据库的使用方法。 目录 第一:数据库基本简介 第二:数据库表格基本操作 第三:数据库最终效果 第一:数据库基本简介 数据库是按照数据结构来组织,…

视频目标检测与轨迹跟踪代码案例

前言通过阅读相关文献及测试,找到了一种基于多模板匹配的改进方法,可以对遥感视频卫星中的移动目标进行探测,并绘制其轨迹。根据实验结果发现,可以比较有效的对运动目标进行跟踪。一、原理核心思想比较简单。即通过不同旋转角度的…

AQS之ReentrantLock详解

非公平锁加锁过程一般我们在使用ReentrantLock的时候,代码如下:Test public void test(){ReentrantLock lock new ReentrantLock();lock.lock();try{//编写业务逻辑}catch (Exception e){lock.unlock();} }当我们在用ReentrantLock独占锁的时候&#xf…

current并发包

并发包 current并发包、在JDK1.5之前Java并没有提供线程安全的一些工具类去操作多线程,需要开发人员自行编写实现线程安全,但仍然无法完全避免低性能、死锁、资源管理等问题。在JDK1.5时新增了java.util.current并发包,其中提供了许多供我们…

【自学Python】Python截取字符串

Python截取字符串 Python截取字符串教程 在 Python 中,我们需要截取 字符串,不需要使用特定的 函数,只需要使用下标索引加上切片的形式,就可以实现字符串的截取。 Python字符 Python 中没有单个字符的概念,单个字符…

uni-app 微信小程序通过Vue3 Hooks 实现动态填充页面剩余高度

应用场景 在uni-app开发微信小程序等项目时,经常会遇到这样的页面布局需求:上半部分高度固定,下半部分自动占满剩余高度,如下图所示应用场景:上半部分为固定高度或内容填充高度的内容区域下半部分为scroll-view滑动区…

河北稳控科技振弦采集模块配置工具VMTool的常见功能

河北稳控科技振弦采集模块配置工具VMTool的常见功能 一、实时数据读取 当 VMTool 与模块为连接状态时( 4.3.1 模块的连接与断开), 勾选实时数据区的【 自动读取】 复选框, VMTool 开始自动向模块发送实时数据读取指令&#xff0c…