强化学习一、基本原理与gym的使用

谈到强化学习,大家最直观的印象应该就是2016-2017年AlphaGo大胜世界围棋冠军李世石和柯洁,其实强化学习大牛Richard S. Sutton在1998年就出版了《Reinforcement Learning:An Introduction》,本文章的大部分内容也来自于此。

强化学习,也有人称增强学习,是机器学习的一个分支。它与无监督学习和监督学习有本质的区别,无监督学习没有标签,只有特征,根据数据中发现内在关联和相似性,把数据进行聚类,而强化学习是有回报rewards的;监督学习是模型根据指定的输入得到对应的输出,这个输出一般比较明确,而强化学习是根据指定的状态最大化回报,这个回报是不明确的,而且通常是有延时的,与环境紧密相关的。

三者的关系,如图所示:

强化学习一、基本原理与gym的使用

一般来说,我认为学习有三种方式:第一种就是灌输式,比如我们上学,一般都是老师直接告诉我们知识,我们来理解并最终记住;第二种是模仿式,比如小孩说话,是根据父母或者其他人的表情和言语来模仿学习的,你对小孩说很多遍“爸爸”,小孩就知道这是爸爸了,因为你已经喊了很多遍了;还有就是试错式,也就是在不断的试错中学习,强化学习正是采用这种方式学习的。

强化学习是如何在挫折中学习的呢?看下图:

强化学习一、基本原理与gym的使用

首先是大脑通过观察,然后对环境(如图中的地球)执行一个动作action,那么环境会反馈一个reward,同时也得到一个观察值Q,用户再根据这个观察值对环境采用某一个action,最终的目标使得每次循环得到的reward总和最大。

由此看出,强化学习是一个序列决策的问题,它不关心输入的格式,只关心当前的输入应该采用什么样的措施,可以使得整个任务序列的长期回报得到最大。

为了更清晰的描述强化学习,我们需要引入几个概念:S、A、P、R、γ。下面以Maze游戏来说明这些概念的含义,游戏界面如下图所示:

强化学习一、基本原理与gym的使用

假设有一只蚂蚁来完成这个游戏,那么蚂蚁就是agent,游戏的目的是蚂蚁从start位置开始沿着白色的方格以最少的步走到goal位置。那么在这个游戏中状态空间S就是agent的位置,动作空间A就是{东,西,南,北},比如下图显示了agent的动作空间形式

强化学习一、基本原理与gym的使用

状态转移概率P就表示agent处在一个位置,那么可以走其他位置的概率。其实每走一步都会给单元格一个值,这个值就是回报R(reward),比如下图就是经过n步后的结果。

强化学习一、基本原理与gym的使用

为了保证模型可以收敛,通常需要一个时间衰减因子γ,γ通常在0-1之间。

我们在了解了强化学习的原理和基本概念后,就要问了,自己想要实现一些基本的算法模拟如何实现呢?那么gym(https://github.com/openai/gym)是一个不错的选择,它是openAI的通用的强化学习平台,里面集成了很多仿真环境,比如车摆环境,Atari游戏等等。下面介绍一下它的安装和使用:

step1、需要读者自行安装python3.5以上环境,包括anaconda,虚拟环境(如果需要的话);

step2、git clone https://github.com/openai/gym.git,将gym克隆到本地

step3、cd gym 进入到gym目录

step4、pip install –e ‘.[all]’进行完全安装

如果报错,需要执行如下命令suto apt-get install –y python-numpy python-dev cmake zlib1g-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig

至此,gym环境已经安装好了,下面以小车倒立游戏为例,介绍gym的使用

import gym   # 导入gym库

env = gym.make(‘CartPole-v0’)    #创建小车倒立模型的环境

env.reset  #  初始化环境

env.render()   # 显示当前环境   需要提前安装matplotlib包

创建好CartPole-v0环境,其中涉及到三个方法,reset()、step()、render()。智能体agent需要不断和环境交互来获得经验,因此每个episode执行后,都需要通过reset()重置环境,下次智能体agent重头开始执行;环境的交互反馈主要依靠step(),它的输入是动作a,输出是下一步的状态s,立即回报r、是否终止、调试。特别注意:输出的顺序不能改变,调试通常使用{}来代替。