资源行业动态使用python进行强化学习

使用python进行强化学习

2020-01-19 | |  57 |   0

原标题:使用python进行强化学习

来源:AI 研习社        链接:https://www.yanxishe.com/TextTranslation/1674


强化学习是机器学习的一种形式,智能体通过执行动作,从而牵引直觉并得到结果这一过程来学习与环境的交互。在本文中,你将学会理解并设计强化学习问题,进一步通过Python进行解决问题。

1579429995812426.png


近来,我们看到计算机在电子游戏中与人类选手对战——无论是多人游戏中的机器人,还是在Dota2,PUB-G和Mario等一对一游戏中的对手


Deepmind(一家研究公司)的AlphaGo程序在2016年击败了韩国围棋世界冠军,这是史无前例的成就。如果你还是一名游戏发烧友,你一定听说过Dota 2 OpenAI Five match——计算机在几场比赛中击败了世界顶级Dota2玩家(如果你对此感兴趣,这里是对算法和机器游戏策略的完整分析)。

02.png

最新版本的OpenAI Five,来自Roshan(源)


至此还有一个关键问题,为什么我们需要强化学习?它仅适用于游戏吗?还是可以将其应用于其他实际场景和问题?如果你是第一次了解强化学习,这个问题的答案可能会超出你的想象。强化学习毫无疑问是人工智能领域应用最广泛且发展最快的技术之一。


1、自动驾驶

2、游戏

3、机器人

4、推荐系统

5、广告与营销


关于强化学习的简短介绍


当我们已经有大量的机器学习和深度学习技术时,强化学习又是从何而来呢?答案是,“它是Rich Sutton和Andrew Barto发明的,在Rich的博士论文种提出。”在强化学习刚被提出时,没有什么人关注,但Rich相信它是意义非凡的,最终一定会获得认可。


强化学习通过从当前环境中学习来支持自动化,机器学习和深度学习也是如此,虽然采取不同策略,但两者目的都是一样的。既然如此,为什么要进行强化学习?


实际上,强化学习与自然学习过程非常类似,该过程/模型通过接收环境反馈判断其性能表现。虽然深度学习和机器学习同样是学习过程,但它们着重于在现有数据中寻找模式。另一方面,强化学习通过反复试错的方法不断学习,最终能够选择正确的行动或达到全局最优。此外,强化学习的另一个重要优势是,我们无需像监督学习那样提供完整的训练数据,实际上,只要一小部分数据就足够了。


理解强化学习


想象一下,你正在教猫一些新的技能,但不幸的是,猫不懂我们的语言,因此我们无法告诉它们我们想让他们做什么。但是,在这样的情景下,猫会以许多不同的方式做出反应。如果猫的反应符合我们的预期,我们就用牛奶奖励它。现在你就可以想象,当下次猫咪面临相同的情况时,猫咪会更有可能执行与之前类似的动作,以期望得到更多的食物。这就是(猫咪)从积极的响应中学到的东西,如果它们受到消极响应(例如你生气的面孔),它们就会知道不应该再这样做。


与之类似,强化学习的工作方式就是如此。我们会给机器一些输入和动作,然后根据输出对不同状态进行奖励,奖励最大化是最终目标。现在,我们要将上述过程(教猫新技能)定义为强化学习问题。

●  猫是“环境”中的“智能体”。

●  环境是房屋/游乐区,具体取决于你教给它的内容。

●  遇到的不同情况称为“状态”,比如猫在床下爬行或奔跑,这些可以解释为状态。

●  智能体通过执行动作从一个“状态”变为另一“状态”,作为对环境的反应。

●  状态更改后,我们根据执行的动作对智能体进行“奖励”或“惩罚”。

● “政策”是正确选择动作以获得更好结果的策略。


现在我们已经了解了强化学习是什么,我们将在下面章节中深入研究强化学习和深度强化学习的起源和发展,以及它们如何解决监督学习或无监督学习无法处理的问题。强化学习可被应用到实际场景中,比如Google搜索引擎就是使用强化算法进行优化的。


熟悉强化学习相关术语


智能体和环境在强化学习算法中起着至关重要的作用。环境是指智能体存在的世界;智能体从该环境中得到奖励信号,依次判断当前环境状态的好坏;智能体的目标是最大化其累积奖励(也称回报)。在编写第一个强化学习算法之前,我们需要了解以下“术语”。

03.gif


1、状态:状态是对智能体所处环境的的完整描述,它们可以表示环境中的全部信息。状态可以是位置,常数或动态值,通常将这些状态以数组,矩阵或高阶张量的形式表示。

2、动作:动作一般是基于环境的,不同的环境中智能体的动作也有所不同。将智能体的有效动作集合记录为动作空间,通常动作集合是有限的。

3、环境:智能体存在以及与之交互的外在世界。对于不同类型的环境,我们要使用不同的奖励,策略等。

4、奖励和回报:奖励函数R是整个强化学习过程中必须完整记录的函数,在调整、优化以及停止训练算法等各方面都起着至关重要的作用。5、奖励函数的值取决于当前的环境状态,刚刚采取的动作以及(执行动作后)下一环境状态。

6、策略:策略是智能体用于选择下一个动作的依赖规则,这些规则也称为智能体的大脑。

04.png

现在我们已经了解了强化学习的所有术语,可以通过强化学习算法解决问题了。但在此之前,我们需要学习如何设计问题,并针对具体问题时正确定义强化学习术语。


解决出租车问题


现在我们已经了解了强化学习的所有术语,可以通过强化学习算法解决问题了。但在此之前,我们需要学习如何设计问题,并针对具体问题时正确定义强化学习术语。


假设我们要在一片区域训练出租车,目的是教会出租车将停车场中的人员运送到四个不同的位置(R,G,Y,B)。在此之前,我们需要了解并设置环境,以便python程序(在此环境)执行动作。如果你是python新手,推荐你阅读下这篇文章。


你可以使用OpenAi的Gym库来设置出租车问题的环境,该库是解决增强学习问题最常用的库之一。在使用它之前,你首先需要在计算机上安装Gym,通过python软件包安装程序(也称为pip)可以方便的安装。以下是安装命令。

pip insatll gym


接下来我们看看该问题的环境是如何渲染的。在Gym中对出租车问题的所有模型和界面已经进行完整配置,并以Taxi-V2命名。下面是渲染此环境的代码段。


“有4个地点(用不同的字母标记),我们的任务是在一个地点接客,然后将他送到另外一个地方。成功送达获得+20分,而每经过一个时间步损失1分,非法接送行为还将受到10分的惩罚。”(来源:https://gym.openai.com/envs/Taxi-v2/)


下图是控制台上的渲染输出:

05.png

Taxi-V2 ENV

env是OpenAi Gym的核心,是统一的环境界面。下面介绍几个常用到的env方法:

env.reset:重置环境并返回随机初始状态。

env.step(action):将环境步进单位时间步。

env.step(action)会返回以下变量:

● observation:对环境的观察。

● reward:用于判断动作是否有用。

● done:表示我们是否已成功接送一名乘客,也称为一个事件。

● info:用于调试的一些信息,例如性能和延迟。

● env.render:渲染环境的帧(有助于可视化环境)。


现在我们已经了解了环境,接下来该更深入地分析问题。出租车是该停车场中唯一的汽车;我们可以将停车场分成5x5的网格,这样出租车便有25个可能的位置,这25个位置是状态空间的一部分;并且假设出租车当前位置为坐标(3,1)。


该环境中,有四个位置可以接送乘客:R,G,Y,B。你也可以在上述渲染环境中定义坐标系,以(行,列)对应坐标表示这四个点,即[(0,0),(0,4),(4,0),(4,3)]。


我们还要考虑到乘客可能在出租车内,将所有可能的乘客位置以及目的地位置进行组合得到出租车所处环境的总状态数:由于有四个目的地、五(4 +1)个乘客地点,因此出租车所处环境总共有5×5×5×4 = 500个可能的状态。智能体处于500种状态之一,并据此采取行动。在本次实例中,智能体的动作就是朝某个方向移动或决定接送乘客。


换句话说,我们有六个可选的动作:上车,下车,北,东,南,西(后四个是出租车移动的方向。)


以上便构成状态空间:也就是智能体在特定状态下可以执行的所有动作的集合。


你还会注意到,在上面的描述中,当出租车面临墙壁时(边缘区域),一些动作在当前状态下是不可能被执行的执行。面临这种情况,我们对每一次撞墙或出租车不进行任何移动的行为施加-1的惩罚项,以此促使出租车考虑绕墙行驶。


奖励表:创建出租车环境时,还会创建一个初始奖励表,记为P。我们可以将其视为一个矩阵,该矩阵的行为环境状态数,列为智能体动作数,即状态×动作矩阵。


由于每个状态都在此矩阵中,因此我们可以看到分配给示例状态的默认奖励值:


>>> import gym

>>> env = gym.make("Taxi-v2").env

>>> env.P[328]

{0: [(1.0, 433, -1, False)], 

 1: [(1.0, 233, -1, False)],

 2: [(1.0, 353, -1, False)],

 3: [(1.0, 333, -1, False)],

 4: [(1.0, 333, -10, False)],

 5: [(1.0, 333, -10, False)]

}

该记录值以字典形式存在{action: [(probability, nextstate, reward, done)]},其中:

● 0-5分别对应于出租车在示例状态下可以执行的动作(南,北,东,西,上车,下车)。

● done的值是来告诉我们是否成功地将乘客送到目的位置。


首先考虑不依赖任何强化学习的方法来解决此问题,我们可以设置目标状态,然后选择样本空间。如果经过多次迭代达到目标状态,则假定这是最大奖励,否则进一步判断:接近目标状态则增加奖励,某一步的奖励值为最小值-10时则增大惩罚。


这样,我们无需增强学习即可编码解决这个问题。


P表包含任意状态的默认奖励,因此我们可以使用它来为出租车导航。


我们不断循环该过程,直到一个乘客到达一个目的地(一个事件),换句话说,就是要得到20的奖励值。env.action_space.sample()方法会自动从动作集合中随机一个可能的动作。


我们来看看究竟发生了什么:

06.png

输出:

07.gif

来源:OpenAI


这样问题得以解决,然而这样的方法并不是最优的,也意味着该算法并不是每次都会生效。为此,我们需要合理设计一个智能体进行交互,以使机器/算法所需的迭代次数尽可能少。Q学习算法满足我们的需求,在下一节我们将学习如何实现它。


Q学习介绍


该算法是最常用的、最基础的增强学习算法。随着时间的推移,Q学习利用环境奖励不断学习,针对给定状态采取最佳的行动。在上一章节的解决方法中,我们定义了奖励表“P”,智能体将依赖该表进行学习。智能体从表中选择下一步的动作,判断执行该动作是否有益,并以此更新得到新值(Q值)。Q值组成的新表称为Q表,该表与(状态,操作)组合呈映射关系。Q值越好,我们也会获得更优的回报。


举例来说,如果出租车当前位置面临着包括乘客的状态(也就是可以做接客的选择),那么与其他活动(例如下车或向北)相比,乘客上车的Q值可能会更高。


Q值最初初始化为任意值,随着智能体在环境不断学习——执行不同的动作获得不同的奖励,根据以下等式更新Q值:

08.png

对于如何初始化Q值以及如何计算它们,通常的做法是:随机初始化Q值为任意常数,然后智能体根据环境与当前状态选择不同的动作来获得相应回报。一旦动作被执行,Q值就由上述方程式计算更新。


上式种Alpha和Gamma是Q学习算法的参数。Alpha时学习率,Gamma是折扣因子,两者的值都介于0和1之间,有时也可以等于1。Gamma可以为零,而alpha则不能为零,因为总是要以一定的学习率来更新损失。式中Alpha的含义与监督学习中的含义相同,Gamma表示我们对未来奖励的重视程度。


下面是算法的简要介绍:

步骤1:初始化Q表为0,Q值为任意常数。

步骤2:智能体与环境交互并选择动作。针对状态的每一次改变,智能体可以从所有动作中为当前状态(S)选择一个。

步骤3:执行动作(a),得到下一个状态(S')。

步骤4:对状态(S')的所有可能动作,选择Q值最高的动作。

步骤5:使用公式更新Q表的值。

状态6:将新的状态作为当前状态。

步骤7:重复上述过程直到达到目标状态。


python实现Q学习:

09.png


至此,所有的值都被存储在q_table变量中。

以上便是全部训练过程,现在,出租车在该环境可以更准确的接送乘客。掌握这些你就理解了强化学习,可以用它去解决新问题。


更多强化学习技术:

马尔可夫决策过程(MDPs)和 Bellman等式

动态规划:基于模型的强化学习,策略迭代与值迭代

深度Q学习

策略梯度方法

SARSA算法


本文的代码见此:vihar/python-reinforcement-learningContribute to vihar/python-reinforcement-learning development by creating an account on GitHub。


感谢阅读。本文由Vihar Kurama和Samhita Alla撰写。

请持续关注更多文章,在此查看Samhita Alla的更多精彩文章。

参考资料:OpenAI, Playing Atari with Deep Reinforcement Learning, SkyMind, LearnDataSci。

感谢Samhita Alla。

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:简介神经网络与符号AI结合的方法

下一篇:损失函数详解

用户评价
全部评价

热门资源

  • 国内人才报告:机...

    近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...

  • AI使物联网更智能...

    看到微软对物联网和人工智能的结合感兴趣是一个明...

  • 推荐一批学习自然...

    这里推荐一批学习自然语言处理相关的书籍,当然,...

  • 安防智能化大势下...

    大部分传统安防设备不仅拍摄视野有限,而且无法事...

  • 20亿创业基金、10...

    近日,杭州举办了建设国家新一代人工智能创新发展...