加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

发布时间:2019-03-26 07:01:17 所属栏目:教程 来源:36氪
导读:编者按:本文节选自《深度学习理论与实战:提高篇 》一书,原文链接http://fancyerii.github.io/2019/03/14/dl-book/ 。作者李理,环信人工智能研发中心vp,有十多年自然语言处理和人工智能研发经验,主持研发过多款智能硬件的问答和对话系统,负责环信中

值函数 和 可以从经验(Experience)中估计出来。比如我们可以这样来估计:如果一个 Agent 使用策略 模拟很多次,通过平均可以估计出一个值来,如果模拟次数趋于无穷大,那么这种方法得到的估计值 () 会收敛到真正的 () 。这就是蒙特卡罗(Monte Carlo)方法,这个方法也可以用于 (,) 的估计。如果状态空间非常大,我们也可以假设 () 或者 (,) 是参数化的函数(模型) (;) 或者 (,;) ,这就是近似的方法。我们可以用深度神经网络来实现 (;) 或者 (,;) ,这就是所谓的深度强化学习(Deep Reinforcement Learning)。

值函数一个非常重要的特效是它满足某种递归性,这在强化学习和动态规划会经常用到。这个递归公式就是贝尔曼方程(Bellman Equation),希望读者能够理解并推导下面的公式(如果有些步骤不能推导,也至少读懂它在说什么并能够“认可”这个等式,书读百遍其义自见,实在不理解多抄两遍也会有帮助)。

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

的 backup 图

我们再来看一下 Bellman 公式,它是递归定义的—— () 是由 (′) 来定义的,对于有些简单问题,我们可以根据这个公式把 通过解方程解出来。

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

最优价值函数(Optimal Value Functions)

解决强化学习任务,粗略来说,就是找到一个策略,使得长期的 reward 尽可能多。首先我们定义什么是一个策略 比另外一个策略 ‘ 好(或者一样好),记作 ≥′ 。形式化的定义是 ≥′s∈S, vπ(s)≥vπ′(s)。 可以证明(这里略过)存在一个(可能有多个)最优的 ,它比所有其它策略都“好”。最优策略对于的价值函数叫做最优价值函数,记作 () :

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

同理对于行为也有一个最优的行为价值函数:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

(,) 和 () 有如下关系:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

我们可以这样解读这个公式:s 和 a 确定后,它会进入 +1 状态并得到 Reward +1 ,这是过程是有概率的,因此前面有一个期望E。但是这和 Agent 无关,和 Agent 有关的是在 t+1 时刻的行为,如果要得到最优的 (,) ,那么它必须在 t+1 时刻根据最优策略 来计算 (+1) ,因此就是 (+1) 。

需要注意:上面公式的随机变量只是 +1 和 +1 ,它由环境 (,′|,) 确定,而 () 和 (,) 是两个常量(给定 s,a 的情况下)。

OpenAI Gym简介

OpenAI Gym是一个用来开发和比较强化学习算法的工具。它对Agent的实现没有任何约束,因此你可以用TensorFlow或者其它任何工具来实现Agent。它提供统一的Environment的接口,你可以用这个接口来定义一个具体的强化学习任务,此外它也提供很多常见的任务,比如很多Atari的游戏。

运行Environment

首先我们介绍一个很简单的游戏CartPole-v0,如下图所示。

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

图:CartPole-v0运行时的截图

这个游戏有一个小车,可以对车子施加 +1 或者 -1 的力(加速度),车上有一个杆子,我们的目标是要求车子的位置在 -2.4 到 2.4 之间,并且杆子相对于垂直的角度在 -15° 和 15° 之间。如果从物理的角度来分析,它有 4 个状态变量,车子的位置,车子的速度,杆的角度,杆的角速度。而我们施加的力会改变车子的速度,从而间接改变车子的位置。我们可以用几行代码运行 CartPole-v0 这个游戏:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

代码很简单,首先创建一个CartPole-v0 Environment对象 env,重置(reset)使环境进入初始状态。接着循环 1000 次,每次首先把当前的游戏状态绘制出来 (render),然后随机的选择一个 Action env.action_space.sample(),接着调用 env.step 函数真正的“执行”这个 Action。

观察(Observations)

观察就是 MDP 里的状态 (State),Environment 的 step 有 4 个返回值:

observation 一个对象,代表观察,不同的环境返回的对象是不同的。

reward float 类型表示Reward。

done bool 类型 表示任务是否结束。对于 Episode 类任务会有结束状态,进入结束状态后再调用step是没有意义的,必须要先调用reset

info 调试用的一些信息

我们可以用如下代码打印出其中的一些信息:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

Spaces

Environment 对象里有两个空间 (Space):状态空间 (State Space) 和行为空间 (Action Space),它们定义了所有可能的状态和行为。我们可以查看一些 CartPole-v0 的 Space:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

从输出可以看出,Discrete(2) 表示这个任务有两个选的 Action(分布表示向左和向右移动),Box(4,)表示状态由 4 维向量表示,物理意义分别是车子相对原点的位置和速度,杆相对于垂直方向的角度和角速度。我们可以用如下的代码检查其取值范围:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读