在本教程系列的(1)中,我演示了如何构建一个agent来在多个选择中选取最有价值的一个。在本文中,我将讲解如何得到一个从现实世界中获取 观测值 ,并作出 长期收益 最大的 行动 的agent。正如前文所说,本文解决的问题将是一个完备的强化学习问题。
完备的强化学习问题所处的环境又被称为马尔科夫决策过程(MDPs)。这个环境不再仅仅通过当前的行动来提供收益并进行状态切换,它提供的收益同时取决于环境的状态以及在当前状态中执行的行为。这是一个动态的暂态过程并且可以延迟生效。
下面给出更加正式一点的马尔科夫决策过程定义:一个马尔科夫决策过程包含可能状态集S
(包含所有可能经历的状态s
)和可选行动集A
(包含所有agent可选的行动a
)。给定行动状态组合(s,a)
,下一个状态的概率分布通过T(s,a)
确定,收益由R(s,a)
给定。由此,在马尔科夫决策过程的任意时刻,agent在给定状态s
和行动a
后获得新的状态s'
和收益r
。
虽然这个概念很简单,但是我们可以将之应用于任何可以视为MDP的任务上。举例来说,你可以想象开门的场景,状态信息为我们眼睛看到的场景以及我们的身体和门在真实世界中的位置,可选行动为我们身体可以作出的任何动作,收益为门是否被成功打开。像走向门这种动作是解决该问题必需的步骤,但是它们并不能为我们直接带来收益,只有开门这个动作才能直接带来收益。在这种场景下,agent需要学会为导向收益的一系列行动分配价值分数,这涉及了开门这一动态过程中的一系列暂态过程。
Cart-Pole 案例
为了实现这样的功能,我们需要一个比之前的双臂赌博机更有挑战性的问题。OpenAI gym包含了一系列强化学习问题所需的环境,本文也正是利用其中的一个经典案例:Cart-Pole(查看相关文档)。在这个案例中,我们希望agent在学习之后可以使木杆平衡尽可能长的时间不倒下。和双臂赌博机不同,这个任务需要额外考虑以下两点:
- 观测值 —— agent需要直到当前木杆的位置以及它的平衡角。为了得到它,我们的agent在每次输出行动的概率分布时都将进行观测并使用它。
- 延时收益 —— 保持木杆平衡的时间尽可能长意味着当前的行动对目前和将来都是有利的。为了达成这一功能,我们将设计一个函数,使收益值按照设计的权重分配在过去的一系列行动上。
考虑到延迟收益,我们之前教程使用的策略梯度的形式需要调整。首先我们每次要利用多个过程来更新agent。为了实现这一点,我们将过程存在中间变量(作为缓冲)里,需要的时候用它来更新agent。这些过程组成的序列有时又被称作rollouts
或experience trace
。存储起来的序列并不能直接使用,我们还需要引入折算引子进行调整。
直观地来看,延迟收益使得每次的行动的收益除了来自当前收益的一部分以外,还有后续全部收益折算给之前行动的收益。相应地,我们使用修改后的收益作为损失函数中对行动的评估标准。在完成这一改动之后,我们可以尝试解决CartPole案例了!
代码示例(选用了评论区用户重写作者代码后的版本):
|
|
|
|
现在我们已经拥有了一个实用而又有趣的强化学习agent,不过这离目前最先进的技术还很远。尽管我们使用了基于策略梯度的神经网络,但是网络的深度和复杂度远远不及大部分先进的网络。在下一篇文章中我将展示如何使用深度神经网络来创建agent去在更复杂的环境中学习,同时深入讲解网络在复杂环境下的表征手段。
系列文章(翻译进度):
- (0) Q-Learning的查找表实现和神经网络实现
- (1) 双臂赌博机
- (1.5) — 上下文赌博机
- (2)——基于策略的Agents
- Part 3 — Model-Based RL
- Part 4 — Deep Q-Networks and Beyond
- Part 5 — Visualizing an Agent’s Thoughts and Actions
- Part 6 — Partial Observability and Deep Recurrent Q-Networks
- Part 7 — Action-Selection Strategies for Exploration
- Part 8 — Asynchronous Actor-Critic Agents (A3C)