在此之前,请先阅读上一篇文章:【RL系列】Multi-Armed Bandit笔记

本篇的主题就如标题所示,只是上一篇文章的补充,主要关注两道来自于Reinforcement Learning: An Introduction 的课后习题。

第一题为Exercise 2.5 (programming),主要讨论了Recency-Weighted Average算法相较于Sample Average算法的优点所在。练习内容大致为比较这两种算法在收益分布为非平稳分布的情况下的表现情况,主要的评价指标依照Figure 2.2,也就是Average Reward和Optimal Action Rate两个。

先前我们在上一篇文章中讨论的所有情况都是假设收益分布为一个固定的不变的正态分布,比如N(1, 1),这里可以称其为平稳分布(Stationary Distribution)。那么如何制造一个非平稳分布呢?在练习中,已经给出了提示:在每一步的实验中,在实际收益均值上加一个服从标准差差为0.01,均值为0的正态分布的随机数即可,举个例子,N(1 + N(0, 0.01), 1)。那么在原先的Matlab程序中需要做出如下的修改:

  1. % 10-Armed Bandit
  2. K = 10;
  3. AverReward = randn([1 K]);
  4. % Reward for each Action per experiment
  5. % Reward(Action) = normrnd(AverReward(Action) + normrnd(0, 0.01), 1);

  

学习过程的参数设定为epsilon = 0.1,最终step数设为10000:

第二题为Exercise 2.6,这个问题是关于初值优化的,主要讨论了初值优化后的OAR图像为何会在实验次数较少时出现突然的尖峰,这个问题也被称作Mysterious Spike:

假设我们将初值Q1设为5,最终step数设为1000,epsilon = 0。可以发现左图的greedy策略是直接求解Q值中的最大值所对应的动作,如下将其转化为Matlab

  1. [MAX i] = max(Q);
  2. if(rand(1) < 1 - epsilon)
  3. CurrentA = i;
  4. else
  5. CurrentA = unidrnd(RandK);
  6. end

而右图也同样是将初值设为5,但并未出现Spike现象,给出右图的greedy选择策略:

  1. [MAX i] = max(Q);
  2. if(MAX ~= 5 & rand(1) < 1 - epsilon)
  3. CurrentA = i;
  4. else
  5. CurrentA = unidrnd(RandK);
  6. end

  

出现Spike现象的原因其实很简单,如果一向量或序列存在两个或两个以上相同的最大值时,计算机在计算最值所在位置的返回值一定是第一个最大值的位置。举个例子(Matlab)

  1. x = [1 2 5 5 5 1]
  2. [MAX n] = max(x);
  3.  
  4. >> MAX = 5
  5. >> n = 3

这个例子中一定不会出现n = 4或n= 5,这就造成了一个问题,我们总是会在有限的步数内不断的去逼近那个真实的收益均值最大值所在的位置。那么在计算Optimal Action Rate时,我们可以举个例子,假设现在是10-Armed Bandit问题,而step数只有不到十次,我们就只看5次的情况吧,假设我们的真实收益最大均值就在向量的第五个位置。

  1. N = 7
  2. K = 10
  3. Reward = [1 2 3 4 5 4.5 3.5 2.5 1.5 0.5];
  4. [MAX i] = max(Reward);
  5. >> MAX = 5
  6. >> i = 5
  7.  
  8. Q = zeros(1, K) + 5;
  9.  
  10. % First step
  11. [MAXQ i] = max(Q);
  12. >> i = 1
  13. >> Q = [4.6 5 5 5 5 5 5 5 5 5]
  14. >> OAR = 0
  15.  
  16. % Second step
  17. [MAXQ i] = max(Q);
  18. >> i = 2
  19. >> Q = [4.6 4.7 5 5 5 5 5 5 5 5]
  20. >> OAR = 0
  21.  
  22. .....
  23.  
  24. % 5th step
  25. [MAX i] = max(Q);
  26. >> i = 5
  27. >> Q = [4.6 4.7 4.8 4.9 5 5 5 5 5 5]
  28. >> OAR = 0.2
  29. %Notice that here's a Spike!

所以依据上面的推断,我们可以推测出,Spike的发生大概率出现在K次实验内(K为K-Armed中的K),而且Spike的最高值取决于真实的收益均值所在的位置与K值之比,假设其所在位置为第M位,则Spike的值可以估计为M/K。当实验次数大于K时,OAR则会从1/K开始逐步增加。

【RL系列】Multi-Armed Bandit笔记补充(一)的更多相关文章

  1. 【RL系列】Multi-Armed Bandit笔记补充(二)

    本篇的主题是对Upper Conference Bound(UCB)策略进行一个理论上的解释补充,主要探讨UCB方法的由来与相关公式的推导. UCB是一种动作选择策略,主要用来解决epsilon-gr ...

  2. 【RL系列】Multi-Armed Bandit笔记——UCB策略与Gradient策略

    本篇主要是为了记录UCB策略与Gradient策略在解决Multi-Armed Bandit问题时的实现方法,涉及理论部分较少,所以请先阅读Reinforcement Learning: An Int ...

  3. 【RL系列】Multi-Armed Bandit问题笔记

    这是我学习Reinforcement Learning的一篇记录总结,参考了这本介绍RL比较经典的Reinforcement Learning: An Introduction (Drfit) .这本 ...

  4. 【RL系列】马尔可夫决策过程——状态价值评价与动作价值评价

    请先阅读上两篇文章: [RL系列]马尔可夫决策过程中状态价值函数的一般形式 [RL系列]马尔可夫决策过程与动态编程 状态价值函数,顾名思义,就是用于状态价值评价(SVE)的.典型的问题有“格子世界(G ...

  5. 【RL系列】从蒙特卡罗方法步入真正的强化学习

    蒙特卡罗方法给我的感觉是和Reinforcement Learning: An Introduction的第二章中Bandit问题的解法比较相似,两者皆是通过大量的实验然后估计每个状态动作的平均收益. ...

  6. (zhuan) 一些RL的文献(及笔记)

    一些RL的文献(及笔记) copy from: https://zhuanlan.zhihu.com/p/25770890  Introductions Introduction to reinfor ...

  7. 【RL系列】马尔可夫决策过程中状态价值函数的一般形式

    请先阅读上一篇文章:[RL系列]马尔可夫决策过程与动态编程 在上一篇文章里,主要讨论了马尔可夫决策过程模型的来源和基本思想,并以MAB问题为例简单的介绍了动态编程的基本方法.虽然上一篇文章中的马尔可夫 ...

  8. STM32 FSMC学习笔记+补充(LCD的FSMC配置)

    STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD

  9. Vue双向绑定的实现原理系列(四):补充指令解析器compile

    补充指令解析器compile github源码 补充下HTML节点类型的知识: 元素节点 Node.ELEMENT_NODE(1) 属性节点 Node.ATTRIBUTE_NODE(2) 文本节点 N ...

随机推荐

  1. asp.net mvc5 step by step(一)——CURD增删查改Demo

    1.  新建一个项目:

  2. oracle系列(二)用户管理

    SQL> conn /as sysdbaConnected to Oracle Database 11g Express Edition Release 11.2.0.2.0 Connected ...

  3. Linux中文件函数(二)

    一.link.linkat.unlink.unlinkat.remove函数 创建一个指向现有文件的链接的方法是使用link函数或linkat函数.函数的原型为: #include <unist ...

  4. netstat命令的用法

    netstat用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.利用netstat指令可让你得知整个Linux系统的网络情况.参数:-a或–all 显示 ...

  5. java 整型数据转换为小数类型 BigDecimal 装换为Double

    A,B为String类型 ,A-B=C BigDecimal A=(BigDecimal) map.get("A"); BigDecimal B=(BigDecimal) map. ...

  6. 关于ajax请求数据的方法

    $.ajax({  //课程详情信息    type:'get',     data: {'id':courseId},    dataType:'json',        beforeSend : ...

  7. Elasticsearch 数据查询

    数据准备: PUT /shop { "settings": { "number_of_shards": 3, "number_of_replicas& ...

  8. Java : java基础(6) 反射与枚举

    类需要经过 加载, 连接, 初始化三个步骤来进行初始化. 加载是把class文件读入内存创建一个class对象, 连接分为三步,第一步是验证是否是正确的结构, 第二步是准备, 为类的静态成员分配内存, ...

  9. laravel form 表单提交

    form表单需要加token,不然会出现419错误,csrf_token不用自己生成,放进去就行,laravel自己会生成 路由: 控制器生成一个:

  10. 网站用户行为分析——Hadoop的安装与配置(单机和伪分布式)

    Hadoop安装方式 Hadoop的安装方式有三种,分别是单机模式,伪分布式模式,伪分布式模式,分布式模式. 单机模式:Hadoop默认模式为非分布式模式(本地模式),无需进行其他配置即可运行.非分布 ...