潮科技行业入门指南 | 深度学习理论与实战:提高篇(15)—— 强化学习简介 (一)
值函数 和 可以从经验(Experience)中估计出来。比如我们可以这样来估计:如果一个 Agent 使用策略 模拟很多次,通过平均可以估计出一个值来,如果模拟次数趋于无穷大,那么这种方法得到的估计值 () 会收敛到真正的 () 。这就是蒙特卡罗(Monte Carlo)方法,这个方法也可以用于 (,) 的估计。如果状态空间非常大,我们也可以假设 () 或者 (,) 是参数化的函数(模型) (;) 或者 (,;) ,这就是近似的方法。我们可以用深度神经网络来实现 (;) 或者 (,;) ,这就是所谓的深度强化学习(Deep Reinforcement Learning)。 值函数一个非常重要的特效是它满足某种递归性,这在强化学习和动态规划会经常用到。这个递归公式就是贝尔曼方程(Bellman Equation),希望读者能够理解并推导下面的公式(如果有些步骤不能推导,也至少读懂它在说什么并能够“认可”这个等式,书读百遍其义自见,实在不理解多抄两遍也会有帮助)。 的 backup 图 我们再来看一下 Bellman 公式,它是递归定义的—— () 是由 (′) 来定义的,对于有些简单问题,我们可以根据这个公式把 通过解方程解出来。 最优价值函数(Optimal Value Functions) 解决强化学习任务,粗略来说,就是找到一个策略,使得长期的 reward 尽可能多。首先我们定义什么是一个策略 比另外一个策略 ‘ 好(或者一样好),记作 ≥′ 。形式化的定义是 ≥′s∈S, vπ(s)≥vπ′(s)。 可以证明(这里略过)存在一个(可能有多个)最优的 ,它比所有其它策略都“好”。最优策略对于的价值函数叫做最优价值函数,记作 () : 同理对于行为也有一个最优的行为价值函数: (,) 和 () 有如下关系: 我们可以这样解读这个公式: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,如下图所示。 图:CartPole-v0运行时的截图 这个游戏有一个小车,可以对车子施加 +1 或者 -1 的力(加速度),车上有一个杆子,我们的目标是要求车子的位置在 -2.4 到 2.4 之间,并且杆子相对于垂直的角度在 -15° 和 15° 之间。如果从物理的角度来分析,它有 4 个状态变量,车子的位置,车子的速度,杆的角度,杆的角速度。而我们施加的力会改变车子的速度,从而间接改变车子的位置。我们可以用几行代码运行 CartPole-v0 这个游戏: 代码很简单,首先创建一个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 调试用的一些信息 我们可以用如下代码打印出其中的一些信息: Spaces Environment 对象里有两个空间 (Space):状态空间 (State Space) 和行为空间 (Action Space),它们定义了所有可能的状态和行为。我们可以查看一些 CartPole-v0 的 Space: 从输出可以看出,Discrete(2) 表示这个任务有两个选的 Action(分布表示向左和向右移动),Box(4,)表示状态由 4 维向量表示,物理意义分别是车子相对原点的位置和速度,杆相对于垂直方向的角度和角速度。我们可以用如下的代码检查其取值范围:
(编辑:温州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |