复习强化学习

https://zhuanlan.zhihu.com/p/374376193

   

首发于机器学习与强化学习

写文章

 

强化学习一:基本原理

 

贺治东

数据挖掘、深度学习、NLP、强化学习

关注

1 人赞同了该文章

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

   

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

   

三者的关系,如图所示:

   

 

   

   

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

   

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

   

 

   

   

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

   

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

   

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

   

 

   

   

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

   

 

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

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

   

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

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

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

step3cd gym 进入到gym目录

step4pip install –e '.[all]'进行完全安装

如果报错,需要执行如下命令sutoapt-get install –y python-numpy python-dev cmake zlib1g-dev xvfb libav-toolsxorg-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、是否终止、调试。特别注意:输出的顺序不能改变,调试通常使用{}来代替。

发布于 2021-05-22 14:40

AlphaGo

李世石

围棋

赞同 1​​添加评论

分享

喜欢收藏申请转载

来自 <https://zhuanlan.zhihu.com/p/374376193>

posted @ 2022-08-31 11:47  atomxing  阅读(40)  评论(0编辑  收藏  举报