在上一篇文章中,我演示了如何设计一个基于策略的强化学习agent来解决CartPole任务。在本文中,我们将从另一个角度重新审视这个问题——如何构建仿真环境来提升agent在当前环境下的性能。
如果你还没有阅读本系列之前的文章并且还是强化学习的初学者,我推荐你按照顺序来阅读,文末有之前文章的链接。
仿真环境是什么,我们为什么要引入仿真环境?在上图中,仿真环境是一个用于模拟真实世界中的动态问题的神经网络。拿我们之前CartPole的问题来说,我们需要一个可以根据之前的位置和行动来预测木棒下次位置的模型。在学习得到一个精确的模型之后,我们每次就可以直接用模型来训练我们的agent而不是必须放在真实环境中训练。当然如果原始的环境就是仿真得到的(像CartPole就模拟了真实世界中的物理情景),我们就不必再这样做了。
与计算机模拟不同,真实环境的部署需要时间,而且真实世界中的物理法则也使得环境初始化等一系列操作的可行性大幅下降。相反地,通过模型来模拟环境可以节省时间和成本,agent也可以“假想”自己就在真实环境中运动,我们可以直接在这个虚拟的环境中训练决策网络。只要我们的模拟环境足够优秀,agent即使完全在虚拟环境中训练也可以在真实环境中达到很好的性能。
那么我们如何使用TensorFlow实现这个需求呢?按照我上面所说,我们需要一个能够根据之前的观测和行动转化输出得到新的观测值,收益和状态的神经网络。我们将使用真实环境来训练我们的仿真模型,然后使用仿真模型来训练我们的agent。通过这个方法,我们可以在让agent在不直接接触到真实环境的情况下习得行动策略!下面给出是实现代码(提供版本为评论区重写的版本(译者对代码做了一定修正),作者的原始代码点这里(这个版本有bug,底部有评论指正)查看)
|
|
|
|
到这里,我们引入了两个神经网络,有很多超参数,鼓励读者尝试自己调整超参数来使模型训练更好更快。在下一节我们会探究如何使用卷积神经网络来在更复杂的环境(如雅达利游戏)中学习。
系列文章(翻译进度):
- (0) Q-Learning的查找表实现和神经网络实现
- (1) 双臂赌博机
- (1.5) — 上下文赌博机
- (2) —— 基于策略的Agents
- (3) —— 构建仿真环境来进行强化学习
- 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)