前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GAIL:一种结合GAN思想的反向强化学习方法

GAIL:一种结合GAN思想的反向强化学习方法

作者头像
石晓文
发布2019-03-06 11:11:58
1.3K0
发布2019-03-06 11:11:58
举报
文章被收录于专栏:小小挖掘机小小挖掘机

前几天听到一声广告语:只要你愿意,从现在开始努力,最坏的结果不过是大器晚成。好了,既然我们决定要努力,要怎么做呢?我们要有自己的一套方法论,如何得到自己的方法论呢?最简单的方法就是从成功者的身上去学习,在学习的基础上,结合自身的情况和经验,不断完善形成自己的一套方法论,进而取得成功。这其实就是我们今天要介绍的反向强化学习方法(Inverse Reinforcement Learning)的基本思想。同时,也作为辞旧迎新的话语,激励自己和大家在新的一年里,不断努力,砥砺前行。

本文首先将介绍反向强化学习的基本概念和实现思路;随后将介绍其中一种结合GAN思想的反向强化学习方法:GAIL;最后,将介绍一下GAIL的代码实现思路。

1、反向强化学习基础

反向强化学习也称为模仿学习(Imitation Learning)或学徒学习(Apprentice Learning)。

在强化学习中,我们的基本思路是通过agent与环境的交互,根据环境对于agent在某一状态下所采取动作的回报,对agent的策略进行更新,从而获得最大化的长期期望收益。也就是说,强化学习通常是在回报已知的情况下求出值函数和策略。但是如果回报我们无法获得呢?反向强化学习使用了逆向思维,我们不通过回报求策略,而是反过来,根据策略求回报。

这听上去有点荒谬,我们想通过交互获得回报,就是为了求解更好的策略,现在有了策略,我们为什么还要去求回报呢?因为很多时候,我们拥有的不是最优的策略,而是基于这些策略的一些样本。

想象我们想要学习打羽毛球,虽然我们无法像专业运动员那样拥有超强的战术策略,但是我们可以通过观察他们的比赛录像,通过观察他们在不同情况下的不同击球策略,来不断提高我们自身的球技。实际上,我们在实际情况下也是这么做的:在家不断学习高手的动作要领,并铭记于心,然后回到球场上一试身手。实际上,这就是一个从反向强化学习到强化学习的过程。首先通过最优策略的交互样本学习到回报函数,即不同的情境下的不同击球方式(扣杀球,放小球,球速,击球高度等等),能够获得的回报是怎样的。接下来就可以通过得到回报函数进行尝试,使用强化学习的方法得到最终的策略。

好了,我们给出反向强化学习的一般思路:

  1. 随机生成一个策略作为agent的初始策略。
  2. 通过比较高手的交互样本和自身的交互样本,学习得到回报函数
  3. 利用回报函数进行强化学习,提升自己的策略水平
  4. 如果自身的策略所能得到的奖励和高手的策略差不多,就可以停止学习,否则返回第二步继续学习。

2、GAIL的基本思路

本节我们简单介绍一种反向强化学习的实现思路,这种思路结合了GAN的思想,称为:GAIL(Generative Adversarial Imitation Learning)。

简单回顾下GAN,在GAN中,我们有Generator和Discriminator。其最初主要应用于图像生成,因此我们以图像生成这一应用来介绍下它的主要流程:在图像生成中,Generator要用来学习真实图像分布从而让自身生成的图像更加真实,以骗过Discriminator。Discriminator则需要对接收的图片进行真假判别。在整个过程中,Generator努力地让生成的图像更加真实,而Discriminator则努力地去识别出图像的真假,这个过程相当于一个二人博弈,随着时间的推移,Generator和Discriminator在不断地进行对抗,最终两个网络达到了一个动态均衡:Generator生成的图像接近于真实图像分布,而Discriminator识别不出真假图像,对于给定图像的预测为真的概率基本接近 0.5(相当于随机猜测类别)。

回到GAIL中,我们该如何应用GAN的思想呢。在这之前,我们首先要做出假设,即我们已有的高手的策略就是最优策略,在不同的状态s下所采取的动作a就是最优的动作。

在GAIL中,Generator其实就是我们的Agent,它会根据不同的state,采取不同的动作。而Discriminator将要努力区分高手的行动和agent的行动。对Discriminator来说,我们可以转化成一个简单的二分类问题,即将当前的状态和动作作为输入,得到这个动作是最优动作的概率。如果这个状态-动作对来自高手的交互样本,那么Discriminator希望得到的概率越接近于1越好,而如果这个状态-动作对来自Generator的交互样本,那么Discriminator希望得到的概率越接近于0越好。对Generator来说,我们希望自己的策略越接近于高手的策略,那么就可以使用Discriminator输出的概率作为奖励,来更新自身的策略,如果Discriminator给出的概率越高,说明我们在这一状态下采取的动作是一个较优的动作,我们就提高该动作出现的概率,反之则是一个较差的动作,降低其出现的概率。

以上就是GAIL的基本思路,是不是跟GAN如出一辙?

3、GAIL的代码实现

结下来,我们来看一下如何实现GAIL,这里我们不给出具体的代码,只给出具体的实现思路。

代码地址为:https://github.com/princewen/tensorflow_practice/tree/master/RL/Basic-GAIL-Demo

代码结构如下:

我们按照以下几步来实现GAIL。

训练一个高手

首先运行run_ppo.py文件,该文件会通过PPO算法来训练一个agent,如果训练的agent能够满足我们的高手定义,则终止学习,此时学习到的agent我们就认为是一个高手。

得到高手的交互序列

接下来,我们运行sample_trajectory.py文件,得到高手的状态-动作对,保存在trajectory文件夹下。

训练GAIL模型

接下来运行run_gail.py文件,基于上述介绍的GAIL的基本思路,来进行学习。

检验学习成果

最后,运行test_policy.py文件,我们可以检验一下我们通过GAIL学习到的agent的学习成果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小小挖掘机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、反向强化学习基础
  • 2、GAIL的基本思路
  • 3、GAIL的代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档