> 目  录 

 > 笔  记 

k-armed bandit problem:

问题定义:重复地从k个options中选择一个,每次都能得到一个reward(每一个option的reward遵循一个稳定的概率),目标是maximize the total reward。

一个形象的比喻: 医生为若干病人选择治疗方案。

假设我们已经提前知道每个option的expected or mean value,那么每次只需要选择highest value对应的那个action即可;然而一开始我们并不知道该信息or只知道estimated values,那么我们该怎么做呢?我们有两种选择:

choice 1—exploiting--选择greedy action(i.e. 选择具有最大估计值的action);

choice 2—exploring---may produce the greater total reward in the long run。

为了平衡exploiting和exploring,我们可以采用near-greedy action selection rule 的$ \varepsilon $ -greedy 方法,即大部分情况下(概率为 1- $ \varepsilon $)采取choice 1,少部分情况下(概率为$ \varepsilon $)采用choice 2 。其好处是可以让agent通过探索来提升发现最佳action的可能性。

那么如何估计action values?可以采用sample-average method,即取多次reward的均值,公式如下:

书中给出了一个 10-armed bandit的例子,总共进行2000次选择,下图给出了前1000次的对比:

得出结论:(1) greedy method在最开始提升的速度最快,但是后期的表现维持在一个较低的程度;(2) 虽然$ \varepsilon $=0.1比$ \varepsilon $=0.01更早找到optimal action,但最终表现不如$ \varepsilon $=0.01(图中没表现出来,因为还未收敛)。

需要说明的是,$ \varepsilon $-greedy和greedy算法的性能与问题本身密切相关。方差比较大时,前者的优势更明显,但当方差为0时,单纯的greedy算法更好,因为只需要试验一次就可以得到最优action。此外,对于本问题而言,它属于deterministic problem,因为reward和转移函数都是固定的。当问题进一步扩展到nonstationary范畴内,就更需要exploring来适应dynamic。

Incremental Implementation:

如何更有效地计算估计的action values呢?我们一直采用的方法是计算平均值的方式,但弊端是我们需要记录每次的reward (i.e. 下图方法1),导致占用内存空间。为了解决这一问题,我们将公式变形,发现每次value可以通过递推的方式实现 (i.e. 下图方法2,constant memory & constant per-time-step computation),这样就不需要多余的空间来存储历史reward了。

可以写成:

至此,可以给出多臂机的伪代码:

Tracking a Nonstationary Problem:

如果环境变得不再nonstationary (比如多臂机例子中reward probabilities可能会随着时间变化),那么相对很早以前的rewards,我们通常会给recent rewards一个更大的权值来给出value的估计值 (i.e. Q value),为此我们引入一个constant step-size parameter $\alpha$,得到

这种方法叫做exponential recency-weighted average。

Initial Values:

设定Initial action values最简单的方法是全部设成0。更好的一种方法是把initial value设置成一个比真实value大的值(比如文中设成5,实际值是一个满足normal 分布(均值=1)的值),这样all action在开始的时候很快都会被尝试一遍。特别的,如果是stationary problem,我们可以只采用greedy 而不是$ \varepsilon $-greedy method就可以达成目标,但不适用于nonstationary problem,因为没有exploring。

(*) Upper-Confidence-Bound Action Selection(UCB):

$ \varepsilon $-greedy可以让我们实现exploit和explore之间的平衡,但是当我们在explore选择non-greedy action时是随机选取的,有没有更好的方式呢?我们可以在选择的时候重点考虑那些有更大概率是最佳action的集合。

(*) Gradient Bandit Algorithms:

       Gradient Bandit Algorithms通过学习每个action的numerical preference来选择action。preference的数值越大,表明该action被选中的几率越大。不同于基于评估的action values来选择action的方法,这里preference的值与reward并没有直接关系,它只是表达了对不同action的喜好。

下图是上述几种算法在不同参数下的performance对比图:

(*) Associative Search (Contextual Bandits):

之前讨论的赌博机问题是很基本的,不存在states的概念,agent学习到的是在任何情况下的最优行动。实际上,完整的RL问题比多臂机问题更复杂,它包含环境状态,新状态取决于之前的行动,并且回报在时间上也可能存在延迟性。上下文赌博机(Contextual Bandits)比之前讨论的赌博机问题更贴近于RL,因为它引入了state的概念。Contextual Bandits中包含多台赌博机,每台机器的arms的回报概率都不同,state可以告诉我们正在操作哪一台机器。agent的学习目标不再是针对单一机器的最优行动,而是针对多台机器。很多个性化新闻/广告推荐系统都是基于Contextual Bandits的。

拓展阅读(Thompson Sampling,Gittins index):https://www.sohu.com/a/221811077_775742

Reinforcement Learning: An Introduction读书笔记(2)--多臂机的更多相关文章

  1. Reinforcement Learning: An Introduction读书笔记(3)--finite MDPs

     > 目  录 <  Agent–Environment Interface Goals and Rewards Returns and Episodes Policies and Val ...

  2. Reinforcement Learning: An Introduction读书笔记(1)--Introduction

      > 目  录 <   learning & intelligence 的基本思想 RL的定义.特点.四要素 与其他learning methods.evolutionary m ...

  3. Reinforcement Learning: An Introduction读书笔记(4)--动态规划

     > 目  录 <  Dynamic programming Policy Evaluation (Prediction) Policy Improvement Policy Iterat ...

  4. 强化学习读书笔记 - 02 - 多臂老O虎O机问题

    # 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...

  5. 《Machine Learning Yearing》读书笔记

    ——深度学习的建模.调参思路整合. 写在前面 最近偶尔从师兄那里获取到了吴恩达教授的新书<Machine Learning Yearing>(手稿),该书主要分享了神经网络建模.训练.调节 ...

  6. Machine Learning for hackers读书笔记(六)正则化:文本回归

    data<-'F:\\learning\\ML_for_Hackers\\ML_for_Hackers-master\\06-Regularization\\data\\' ranks < ...

  7. Machine Learning for hackers读书笔记(三)分类:垃圾邮件过滤

    #定义函数,打开每一个文件,找到空行,将空行后的文本返回为一个字符串向量,该向量只有一个元素,就是空行之后的所有文本拼接之后的字符串 #很多邮件都包含了非ASCII字符,因此设为latin1就可以读取 ...

  8. Machine Learning for hackers读书笔记_一句很重要的话

    为了培养一个机器学习领域专家那样的直觉,最好的办法就是,对你遇到的每一个机器学习问题,把所有的算法试个遍,直到有一天,你凭直觉就知道某些算法行不通.

  9. Machine Learning for hackers读书笔记(十二)模型比较

    library('ggplot2')df <- read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\12-Model_C ...

随机推荐

  1. VSCode插件开发全攻略(五)跳转到定义、自动补全、悬停提示

    更多文章请戳VSCode插件开发全攻略系列目录导航. 跳转到定义 跳转到定义其实很简单,通过vscode.languages.registerDefinitionProvider注册一个provide ...

  2. Hadoop 多表关联

    一.实例描述 多表关联和单表关联类似,它也是通过对原始数据进行一定的处理,从其中挖掘出关心的信息.下面进入这个实例. 输入是两个文件,一个代表工厂表,包含工厂名列和地址编号列:另一个代表地址列,包含地 ...

  3. css浮动(float)及清除浮动的几种实用方法

    CSS浮动是现在网页布局中使用最频繁的效果之一,而浮动可以帮我们解决很多问题,那么就让我们一起来看一看如何使用浮动. 一.css浮动(float) (1)html文档流 自窗体自上而下分成一行一行,并 ...

  4. Web前端JQuery入门实战案例

    前端jquery入门到实战 为什么要学习Jquery?因为生活. 案例: <!DOCTYPE html> <html lang="zh-CN"> <h ...

  5. Java面试集合(七)

    前言: Java面试集合(六) 的回顾,对于final可以修饰常量,方法,和类,一旦常量定义好后就不可改变,而方法,用final来修饰方法,方法不可重载,继承,重写,final用来修饰类,该类不能被继 ...

  6. Too many connections

    在一次启动项目的过程中报了如下一个错误信息: [ERROR] [2019-03-20 13:14:43] com.alibaba.druid.pool.DruidDataSource.init(629 ...

  7. python连接Greenplum数据库

    配置greenplum客户端认证 配置pg_hba.conf cd /home/gpadmin/gpdbdata/master/gpseg- vim pg_hba.conf 增加 host all g ...

  8. JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript之间转换

    现在构建任何类型的软件项目最流行的方法这是使用类.在这篇文章中,探讨用 JavaScript 实现类的不同方法,以及如何构建类的结构.首先从深入研究原型工作原理,并分析在流行库中模拟基于类的继承的方法 ...

  9. docker镜像打包save,载入load,启动run

    docker打包,针对的是镜像,而不是运行中的容器. 查看当前系统的镜像文件:docker images 将当前运行中的,已经自定义修改后的容器保存为新的镜像. docker commit ce11e ...

  10. spring cloud+.net core搭建微服务架构:服务注册(一)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...