强化学习w/ Keras + OpenAI的实践:Actor-Critic模型

快速回顾

在上次的Keras/OpenAI教程中,讨论了一个非常基础的强化学习算法——DQN(深度Q网络)。这个“深度Q网络”是近几年刚出现的新兴事物,所以,如果你能够理解甚至运用这个算法,那就太了不起了。首先,还是快速地回顾一下取得的惊人成绩:一开始,对于一个好算法的开发几乎一概不知;而现在,已经能够探索的环境,并且完成试验了。

可以设身处地的想,这有点像让你玩一个既没有游戏规则,也没有最终目标的游戏,你只需要不停地玩,直到你赢了为止(感觉有点残忍)。不仅如此,你通过一系列动作所能达到的结果是无限的(连续观察空间)!然而,DQN通过逐步维护个更新的操作在处理这个看似不可能完成的任务时,其收敛速度快得惊人。

更复杂的环境

“MountainCar环境”到“Pendulum环境”的步骤与“CartPole环境”到“MountainCar环境”的步骤非常相似:正从一个离散的环境扩展为一个连续的环境。“Pendulum环境”有一个无限输入空间,这就意味着在任何给定的时间里,你能采取的行为数量是完全没有限制的。那么为什么DQN不再适用于这个环境了呢?DQN的执行难道不是完全独立于环境行为的结构吗?


比起MountainCar,给提供了一个无限输入空间的Pendulum所带来的挑战更大。

尽管它与具体的行为几乎没有关系,但DQN完全是建立在一个无限输出空间的基础之上的。想想是如何构建代码的:预测结果会给各个步骤中的各个可能发生的行为指定一个分数(在给定的现有环境下),然后网络会执行那个得分最高的行为。之前,通过给各个行为评分,已经减少了强化学习的问题。但是,假如有一个无限的输入空间,问题还能这么轻易地被解决吗?可能这个时候需要一个无限大的表格来跟踪记录所有的Q值!

这个“无限大的表格”似乎与理想的结构有很大的差距!

那么,应该如何完成这个看似不可能完成的任务呢?现在,正做着一些疯狂无比的事:不仅要玩一个完全没有指示和规则的游戏,而且这个游戏是无止境循环的!让来看一下DQN为什么会受到限制。

根源在于这个模型的构建方式:必须能够在每一步骤中更新在某一行为中的位置。这正是让模型预测Q值,而不是直接预测行为的原因。如果预测行为,那么就不知道在考虑预测结果的基础上如何更新模型,以及对未来的预测将接收到什么反馈。因此,最根源的问题在于,的模型似乎必须输出一个与所有行为相关的反馈的表格式计算。如果把这个模型分开,会怎么样呢?如果有两个独立的模型,一个模型输出预期行为(在连续空间内),另一个模型接收行为输入,由DQN中生成Q值,又会发生什么呢?这似乎对解决问题非常有帮助,事实上,这正是Actor-Critic模型的基础。

Actor-Critic模型的原理


与DQN不同的是,Actor-Critic模型有两个独立的网络,其中一个网络用于在给定的环境中对行为进行预测;另一个网络用于查找行为或环境的值。

正如在前面部分的介绍,整个Actor-Critic(AC)方法都是建立在两个相互作用的模型之上的。在强化学习(RL)和监督式学习领域,多个相互作用的神经络的重要性越来越突出。认识和熟悉这些网络架构,绝对是一次非常有价值的尝试:你将有能力理解,甚至规划出一些领域内先进的算法。

回到话题,顾名思义,Actor-Critic模型有两个组成部分——Actor和Critic。前者接收“环境”输入,并由此确定一个“最佳行为”,这实质上是DQN最普通的操作方式。后者扮演的是一个“评估者”的角色,它对“环境”输入的信息和“最佳行为”进行评分,这个分数代表着某一行为与环境的适应程度。

不妨想象一下,一个小女孩(actor)和她的父母(critic)站在一个操场上。孩子四处张望,观察在这个环境下所有可能玩的项目,比如说玩滑滑梯、荡秋千,或者是拔草。在这种情况下,不管是批评还是赞扬,都是父母根据女孩在这个环境下女孩的行为和表现所作出的评价。父母的评价和判断与所处的环境有非常密切的关系。

简要介绍:“链式法则”(任选)

在AC模型的原理中,你主要需要掌握的是支撑了绝大部分现代机器学习的一条法则——“链式法则”。毫不夸张地说,“链式法则”看似非常简单,但它将可能成为理解机器学习实践的最重要想法之一。事实上,如果你能直观地理解“链式法则”的概念,即使你不太擅长数学也完全没有关系。接下来我将快速地介绍一下“链式法则”。在下一个部分将会介绍AC模型的实际开发框架,并解释“链式法则”与AC模型开发的关系。


这是一个看似非常简单的概念,它有可能来自于你的第一堂微积分课程。由于其对算法的惊人加速,它构成了机器学习的现代基础。

从图上看,这个等式非常直观明了:分子或分母互相抵消。但是这个直观的等式有一个主要问题:等式的推导是反向的!重要的是要记住,数学与开发直观的符号一样,就像理解概念一样。所以,人们开发这个分数式的原因是“链式法则”与分数简化的原理非常相似。因此,那些企图仅通过这个符号来解释概念的人实际上都忽视了一个关键性步骤:为什么这个符号是适用的呢?求导过程为什么是这样的呢?


经典的弹簧例子实际上是观察运动中的“链式法则”的一种直观方法。

其中隐含的概念实际上并不比这个符号难理解。想象有几条绳子,绳子有一些固定的点被绑在一起,就像被串联起来的弹簧一样。假如你抓着这个弹簧系统的一端,你的目标是让另一端以10英尺/秒的速度震动。那么你可以以10英尺/秒的速度震动你抓住的一端,让它的震动传递到另一端。或者你可以连接一些以较低速率(比如5英尺/秒)震动的中间节点,这样,你就只需要以2英尺/秒的速率摇晃你所持的一端,因为你做的所有动作都会被传递到另一末端。其中的原理是:物理上的连接能够使动作从一端传递至另一端。注意!这里打的比方当然会与现实有些出入,但这主要是为了更直观、形象地理解链式法则。

同样的道理,如果有两个网络系统,其中一个系统的输出作为另一系统的输入。“震动”输出系统的参数自然会影响其输出,而这个输出的任何变化必定会被传递到管道的另一端。

AC模型概述

因此,必须开发一个与训练更为复杂的DQN有一些重合的ActorCritic模型。由于需要更多更高级的特性,所以必须利用Keras底层库的基础——Tensorflow。注意:你同样可以在Theano中执行,但是因为我从没研究过Theano,所以我没有将其代码包含在内。

AC模型的执行包括四个主要内容,与DQN的执行方法是一致的:

·      模型参数/设置

·      训练代码

·      预测代码

AC参数

首先,需要的是导入:

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值