接着考虑前文的10臂老虎机问题。假设我们可以与老虎机交互TTT次,显然我们每次采取的行动(action)不必一成不变。记我们在ttt时刻采取行动为ata_tat​,获得的回报为R(at)R(a_t)R(at​)。那么,我们的目标是
max⁡a1,a2,...,aT∑t=1TE[R(at)].\max_{a_1,a_2,...,a_T} \sum_{t=1}^T E[R(a_t)]. a1​,a2​,...,aT​max​t=1∑T​E[R(at​)].

在实际应用中,ata_tat​会根据之前得到的a1,a2,...,at−1a_1,a_2,...,a_{t-1}a1​,a2​,...,at−1​和R(a1),R(a2),...,R(at−1)R(a_1),R(a_2),...,R(a_{t-1})R(a1​),R(a2​),...,R(at−1​)进行优化调整。换句话说,ata_tat​是a1,a2,...,at−1a_1,a_2,...,a_{t-1}a1​,a2​,...,at−1​和R(a1),R(a2),...,R(at−1)R(a_1),R(a_2),...,R(a_{t-1})R(a1​),R(a2​),...,R(at−1​)的函数。但是,R(a1),R(a2),...,R(at−1)R(a_1),R(a_2),...,R(a_{t-1})R(a1​),R(a2​),...,R(at−1​)是随机的,因此ata_tat​必然也是一个随机变量,我们记为AtA_tAt​。同时,为了简化,我们记Rt=R(At)R_t=R(A_t)Rt​=R(At​)。那么上面的优化问题,可以重写为
max⁡A1,A2,...,AT∑t=1TE[Rt].\max_{A_1,A_2,...,A_T} \sum_{t=1}^T E[R_t]. A1​,A2​,...,AT​max​t=1∑T​E[Rt​].
这里AtA_tAt​概率分布与A1,...,At−1A_1,...,A_{t-1}A1​,...,At−1​和R1,...,Rt−1R_1,...,R_{t-1}R1​,...,Rt−1​的取值有关。事实上,对AtA_tAt​概率分布调整的过程,就是学习的过程。一种简单的学习算法是ϵ\epsilonϵ-贪心算法。其核心思想,是花费TϵT\epsilonTϵ步的时间用来探索(explore),花费T−TϵT-T\epsilonT−Tϵ步的时间用来挖掘(exploit)。所谓探索,是指完全随机地选择行动AtA_tAt​,用以学习每个行动的回报期望。所谓发掘,是指根据当前已经观测到的数据,选择回报期望最高的行动。请看示例。

首先,我们以正态分布N(0,1)N(0, 1)N(0,1)随机生成老虎机各个老虎臂的回报期望。

import numpy as npyNUM_ARM = 10
mu = Nonedef init_arms():global mumu = npy.random.normal(0, 1, NUM_ARM)

下面的方法用来生成按动第aaa条老虎臂,产生的回报。假设第a条老虎臂的回报期望为μa\mu_aμa​,那么它的回报满足N(μa,1)N(\mu_a, 1)N(μa​,1)。

def get_reward(a):return mu[a] + npy.random.normal(0, 1)

为了学习最优的策略,我们需要记录每次行动获得的回报。

record_average = None
record_num = Nonedef init_record():global record_averageglobal record_numrecord_average = npy.zeros(NUM_ARM)record_num = npy.zeros(NUM_ARM, dtype=npy.int32)

上面的代码段定义了两个数组,record_average记录了到目前为止每个action回报的均值,record_num记录了到目前为止每个action执行的次数。每次我们执行一次action以后,都需要更新这两个数组。更新的方法也非常简单。

def update_record(a, r):record_average[a] = (record_average[a] * record_num[a] + r) / (record_num[a] + 1)record_num[a] += 1

有了上面的基础方法,我们就可以定义epsilon贪心算法了。

epsilon = .1def epsilon_greedy():if npy.random.uniform(0, 1) < epsilon:return npy.random.randint(0, NUM_ARM - 1)else:return npy.argmax(record_average)

接下来定义主方法。

def run(T):init_arms()init_record()for t in range(T):a = epsilon_greedy()r = get_reward()update_record(a, r)

上面的方法实现了epsilon贪心算法的所有逻辑。但是,为了判断这个算法是否有效,我们需要对算法的性能进行评估。一个显而易见的参数,是评估每次操作中,选择最优action的频率。为此,我们对run方法稍加改动。

def run(T):hits = []init_arms()init_record()best_action = npy.argmax(mu)for t in range(T):a = epsilon_greedy()r = get_reward(a)update_record(a, r)hits.append(1 if best_action == a else 0)return hits

上面的代码返回了一个数组hits,它的第t个元素指明我们的第t个action是否最优。为了获得每个时刻执行最优action的频率,我们需要执行run方法多次。

def main(episode_num, T):freq = npy.zeros(T, dtype=npy.int32)for e in range(episode_num):hits = run(T)for t in range(T):freq[t] += hits[t]return freq

下面的代码画出最优action频率的曲线。

if __name__ == "__main__":freq = main(1000, 500)plt.plot(freq)plt.show()


从上面图表可以看到,随着我们操作次数的增加,最优action的频率也相应增加。这说明我们的学习是有效的。

强化学习第二:epsilon贪心算法相关推荐

  1. 【强化学习】Policy Gradient算法详解

    DeepMind公开课https://sites.google.com/view/deep-rl-bootcamp/lectures David Silver教程 http://www0.cs.ucl ...

  2. 赠票 | 深度强化学习的理论、算法与应用专题探索班

    文末有数据派赠票福利呦! 深度强化学习是人工智能领域的一个新的研究热点.它以一种通用的形式将深度学习的感知能力与强化学习的决策能力相结合,并能够通过端对端的学习方式实现从原始输入到输出的直接控制.自提 ...

  3. 华为诺亚ICLR 2020满分论文:基于强化学习的因果发现算法

    2019-12-30 13:04:12 人工智能顶会 ICLR 2020 将于明年 4 月 26 日于埃塞俄比亚首都亚的斯亚贝巴举行,不久之前,大会官方公布论文接收结果:在最终提交的 2594 篇论文 ...

  4. 线下报名 | YOCSEF TDS:深度强化学习的理论、算法与应用

    时间:7月29日9:00-17:20 地点:北京中科院计算所,一层/四层报告厅(暂定) 报名方式:1.报名链接:http://conf2.ccf.org.cn/TDS  2.点击文末阅读原文报名  3 ...

  5. 基于强化学习的服务链映射算法

    2018年1月   <通信学报>    魏亮,黄韬,张娇,王泽南,刘江,刘韵洁 摘要 提出基于人工智能技术的多智能体服务链资源调度架构,设计一种基于强化学习的服务链映射算法.通过Q-lea ...

  6. _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II 、55.跳跃游戏、45.跳跃游戏II

    _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II .55.跳跃游戏.45.跳跃游戏II 题目列表 122.买卖股票的最佳时机II 55.跳跃游戏 45 ...

  7. CORL: 基于变量序和强化学习的因果发现算法

    深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 来源:诺亚实验室 华为诺亚方舟实验室.西安交通大学 ...

  8. 【实践】基于强化学习的 Contextual Bandits 算法在推荐场景中的应用

    文章作者:杨梦月.张露露 内容来源:滴滴科技合作 出品平台:DataFunTalk 导读:本文是对滴滴 AI Labs 和中科院大学联合提出的 WWW 2020 Research Track 的 Or ...

  9. 深度强化学习系列(15): TRPO算法原理及Tensorflow实现

    深入浅出理解TRPO算法 1.论文思想与原理 1.1 Surrogate function(替代函数) 1.2 目标函数 1.3 一阶近似: L函数 1.3.1 技巧一:一阶近似 1.3.2 重要性采 ...

最新文章

  1. Windows7瘦身和备份
  2. 熊猫分发_熊猫新手:第二部分
  3. 超全十大经典排序算法及其分析
  4. 当心异步刷新后的脚本文件加载
  5. wordpress发送测试邮件
  6. 【2019杭电多校第九场1002=HDU6681】Rikka with Cake(离散化+树状数组+思维)
  7. 教师计算机培训心得体会范文,教师计算机教育培训学习心得体会
  8. 计算机 映射网络驱动器,win7电脑映射网络驱动器的方法?
  9. SRRC型号核准的一点澄清-- 设备型产品的SRRC是强制性的,但模块型为非强制性的,有条件可参考性
  10. blast2go windows 下本地化
  11. swift野梦抄袭 taylor_断眉质疑Taylor Swift新歌抄袭《Next to Me》,双方粉丝掀起骂战...
  12. 新消费下的国货崛起新模式!
  13. [附源码]计算机毕业设计Node.js老薛男生服装网(程序+LW)
  14. 无限复活服务器,绝地求生无限复活玩法说明 绝地求生无限复活分数计算规则/吃鸡攻略...
  15. MATLAB提取图片点击处的坐标代码(仅供参考)
  16. MFC VS2010 Open CASCADE新建自己的工程
  17. 咖啡汪日志——遇见数仓,理想与现实的碰撞,前景与难点的对接
  18. mysql 函数from_unixtime返回null
  19. hadoop官网最新稳定版安装包下载(高效,无毒,简便)
  20. 视频教程-2020年软考网络规划设计师案例分析历年真题详解软考视频教程-软考

热门文章

  1. seo优化教程-免费SEO优化详细教程
  2. 域名如何绑定到服务器ip
  3. 安卓应用程序配置文件存放位置
  4. 数据服务 开源方案技术选型
  5. 【测试开发】web 自动化测试 --- selenium4
  6. Android 悬浮窗基本使用
  7. 【arduino】arduino家族,arduino相关各种开发环境汇总,Mixly米思齐最新python开发环境...
  8. python中set option_python的set_option选择
  9. Redis是什么?有什么用?
  10. 《Microduino实战》——3.7 光敏电阻