阿尔法狗的秘密:人工智能中的强化学习

在有监督学习(supervised learning)中,训练数据中包含了数据样本的目标。 不过现实中可没有上帝一样的监督者给出这些目标或答案!

强化学习(reinforcement learning)是人工智能(AI)的一个重要分支,它也是DeepMind的阿尔法狗(AplhaGo)得以实现的一块基石。

在强化学习中 ,虽然没有现成的答案,但是代理(agent)仍然必须决定如何行动(action)来完成它自己的任务。 在没有训练数据的情况下,代理从经验中学习。 它通过反复的试错来收集训练样本(“这个动作很好,那个动作很糟糕”),学习的目标就是使其长期奖励(reward)最大化 。

在本文中,我们将探讨:

  • 状态空间的利用和探索
  • 马尔可夫决策过程
  • Q学习、策略学习和深度强化学习
  • 价值学习

最后,我们整理了一些优质资源可供你深入探索强化学习。

迷宫老鼠

具有明确的目标和分值系统的游戏,是最容易理解强化学习的应用场景。

假设我们正在玩一款游戏,老鼠如果找到奶酪,就能得到+1000分奖励,如果找到沿途的水源,也能得到+10分奖励。 但是,如果老鼠误入电箱(触电),就会得到负的奖励-100分。

maze

经过一番探索(exploration),老鼠可能会发现聚集在入口附近的三个水源,从此它可能就会花费所有的时间来利用(exploit)这一发现,不断收获这些水源的微小回报(reward),而不再有更高的追求。

因此,正如你所看到的那样,老鼠会在迷宫里错过更好的奖励,例如吃到奶酪!

这带来了探索(exploration)和利用(exploit)之间的权衡问题。 一个简单的探索策略(exploration strategy)是在大多数时间(比如说80%)采取已知的具有最好回报的动作,但偶尔也会探索一个随机选择的动作,尽管它可能导致偏离已知的奖励。

这个策略被称为epsilon-greedy策略,其中epsilon是智能代理(老鼠)采取随机行动的时间百分比(在上例中,即20 %)。 通常我们可以在开始时更多地进行探索(即epsilon取值大一些)。 随着时间的推移,随着老鼠对迷宫越来越了解,并且对哪些行动能够产生长期的高回报的了解也越来越多,将epsilon稳定地降低到10%甚至更低就是合理的选择了。

记住这一点很重要:奖励不是实时的 —— 在迷宫老鼠的例子中,在最终找到奶酪之前,可能需要经过一段漫长的探索,并且做出多次选择。

总结一下:在强化学习中,智能代理(agent)观察环境(environment),采取行动(action)与环境互动,并获得积极或消极的回报(reward):

reinforcement learning

马尔可夫决策过程

老鼠在迷宫中的行为,可以使用马尔科夫决策过程(Markov Decision Process)来描述 ,马尔可夫决策过程是具有特定的状态转移概率的过程。 我们将通过迷宫老鼠这个例子来进一步解释它。

马尔可夫决策过程包括:

  • 一个有限的状态集。 例如,老鼠在迷宫中的每一个可能的位置,都是一个状态。
  • 每个状态下可供选择的动作集。 例如,老鼠在走廊里可以{前进,后退}、在十字路口可以{前进,后退,左,右}
  • 状态之间的迁移。 例如,如果老鼠在一个十字路口左转,就会处于一个新的位置。 这可以是迁移到多个可能状态的概率。例如,当你在Pokeman游戏中进行一次攻击时,可能会攻击失败(状态1),也可能对敌人构成一些伤害(状态2),或者击倒对手(状态3)。
  • 每次状态转移对应的回报。 在迷宫老鼠的例子中,大部分时候老鼠得到的奖励都是0,但是如果老鼠真的找到一个有水或奶酪的地方,就可以得到正的奖励,如果找到不该去的地方,得到的奖励就是负的。
  • 折扣系数γ量化了即时奖励和未来奖励之间重要性的差异,它的取值范围是0~1。 例如,如果γ0.9,并且在3步之后可以得到5分的奖励,那么奖励的折现值是就是.9 3 * 5
  • 无记忆性。 由于当前的马尔可夫状态中已经包含了历史中全部有用的信息,所以在获得当前状态后,就可以清除历史信息。 换句话说, “未来状态只和现在有关,和过去没有关系”。

现在我们理解了马尔可夫过程,可以给出老鼠的目标函数了。 我们要做的就是尽量最大化其长期回报的总和:

object function

让我们逐项学习这个回报公式。 首先,我们累加所有时间步t上的回报。 现在先把γ设置为1,暂时忽略它。 r(x,a)是一个奖励函数。 对于状态x和行动a (例如,在十字路口左转),它给出了在x状态下采取行动a的奖励。 从直觉上讲,这个公式所表达的,就是应当在每个状态都采取最优动作来最大化未来奖励的总和。

我们已经定义了强化学习的问题,并且确定了学习目标,现在让我们来探讨一些可能的解决方案。

Q-learning:学习动作-价值函数

Q-learning是一种利用动作-价值(action-value)函数来进行动作选择的技术(Qquality,即动作的质量 —— 译者注) ,该动作-价值函数根据所处的状态,来决定在该状态下应该采取哪种行动。

函数Q的输入是一个状态-动作对,返回值是该状态下执行该动作(以及所有后续动作)的预期回报 。 在我们开始探索环境之前,Q给出相同的(任意)固定值。 但是,随着我们更多地探索环境,Q可以越来越准确地估计出在状态s下执行动作a的价值。 在智能代理探索环境的过程中,函数Q同步得到更新。

维基百科上Q-learning的这个方程式解释得非常好。 它展示了我们如何利用从环境中获得的回报来更新Q值:

wiki

让我们再次将γ设置为1来暂时忽略折扣因子。 首先请记住,Q表示的是选择某个动作(以及之后的所有动作)所获得全部奖励的总和。

现在让我们从左到右查看上述方程式。 在st状态下采取行动时,我们在公式中添加一项来更新Q(st,at)的值。 这一项的内容包含:

  • 学习速率(alpha)体现了我们更新Q值的激进程度。 当alpha接近于0时,我们并不是非常积极地更新。 当alpha接近1时,完全用更新后的值来替换旧值。
  • 奖励(reward)指的是我们在状态st采取某个动作所获得的回报 。 所以我们把这个奖励加在之前的估计上。
  • 然后加上对未来奖励的估计,这是在xt + 1时刻所有可选动作中可实现的最大回报Q
  • 最后减去Q的旧值,以确保我们只是通过估计值的误差来进行增减(当然,还需要乘以alpha)。

现在我们对每个状态 - 动作对都有了一个价值估计,就可以根据动作选择策略来决定应该采取哪一个动作(不一定只是选择可以导致最大奖励的动作,例如,在一个epsilon-greedy探索策略中,我们会根据时间百分比采取随机行动)。

在迷宫老鼠的例子中,我们可以使用Q-learning来计算迷宫中每个位置的动作{向前,向后,向左,向右}的价值。 然后就可以根据动作选择策略来决定老鼠在每个时间步需要执行的动作。

策略学习:从状态到行动的映射

Q-learning中,我们可以学习出一个价值函数,利用它可以估计每个状态-动作对的价值。

策略学习(Policy Learning)是一个更直接的选择,我们学习策略函数π , 它可以从每个状态直接映射到该状态下的最优动作。可以把它看作是一种行为策略:“当我观察状态s时,最好的办法就是执行动作a”。 例如,一辆自动驾驶汽车的策略可能会包括:“如果我看到一个黄灯,并且距离十字路口超过100英尺,就应该刹车。 否则,继续前进。“

policy function

因此我们学习的这个函数,其目标是最大化预期的奖励。 什么模型最擅长学习复杂的函数? 深层神经网络!

Andrej Karpathy的文章Pong from Pixels中介绍了一个很好的实战案例,他使用深度强化学习来学习经典的Atari游戏Pong的操作策略,以游戏画面中的原始像素作为输入(状态),输出应当向上或向下移动(动作)的概率 :
pong from pixels

如果你想用亲手尝试深度强化学习,请仔细阅读Andrej的帖子。 你将学习如何使用130行代码来实现一个两层的策略网络,还将学习如何将其嵌入OpenAIGym 环境,使用Gym可以快速启动并运行你的第一个强化学习算法,然后在各种游戏上进行测试,看看它的表现与其他人提交的实现相比性能如何。

DQN,A3C和深RL的进步

2015年,DeepMind使用了一种称为深度Q网络(DQN)的方法,使用深度神经网络来拟合Q函数,并利用这一模型在许多Atari游戏中超越了人类的基准表现:

我们发现基于深度Q网络的智能代理,只需要使用画面像素和游戏得分作为输入,就能够超越所有以前的算法,在49个游戏中达到了与专业游戏玩家相当的水平,而且所有这些任务中的模型使用相同的算法、网络体系结构和超参数。 这个研究在高维感官输入和行动之间架起了桥梁,从而造就了第一个能够学会应对多种挑战性任务的人工代理。 ( Silver等人,2015 )

下图是基于DQN的智能代理在多个领域中的表现,与线性学习器和人类的比较:

dqn performance

为了帮助对强化学习领域研究中的最新进展有一些直观感受,下面提供了一些非线性Q函数拟合器的改进实例:

  • 体验重放 ,通过对包含历史观察和相应奖励的较长序列进行随机学习来避免过度拟合最近的体验。 这个思路受到了生物学大脑的启发 :例如,老鼠在游历迷宫后,会在睡眠期间“重放”其经历过的神经活动模式,以遍优化其未来在迷宫中的行为。
  • 为递归神经网络( RNN )增加DQN。 当智能代理只能看到周围的环境时(例如老鼠只能看到迷宫的某个部分,而不能看到整个迷宫的鸟瞰图),代理需要记忆更大的场景,以便记住某些物体的位置。 这类似于人类的婴儿对物体的持久性感知能力的开发过程 ,即使物体离开婴儿的视野,人类婴儿也知道这些物体是存在的。 RNN是“递归的”,即它们允许信息持久的存在 。 这是一个使用DQRN网络玩Doom游戏的视频,令人印象相当深刻。

2016年,在DQN论文仅一年之后,DeepMind发布了另一种算法,称为Asynchronous Advantage Actor-Critic,即A3C ,只需要一半的时间进行训练,其在Atari游戏上的表现已经超越了所有尖端的算法( Mnih等,2016 )。A3C是一种演员-评论员(Actor-Critic)算法,它融合了我们之前探讨的两种方法中的精华:包括一个Actor (策略网络:决定如何动作)和一个CriticQ网络:决定动作价值)。 Arthur JulianiA3C的具体工作做了很好的阐述A3C现在是OpenAI的通用启动代理 。

从那时起,就有了无数的惊人的突破 - 从发明自己语言教自己适应各种地形 。 我们这个系列的文章只是简单介绍了强化学习的一些前沿进展,但我希望它能成为你进一步探索的起点!

进入下一段之前,我们想分享一下DeepMind所开发的智能代理学习走路的视频,实在令人难以置信…

关于练习资料和进一步的阅读

代码

  • Andrej KarpathyPong from Pixels 能够让你迅速运行起来第一个强化学习代理。 正如文章所描述的那样,“我们将从零开始,只使用原始像素,使用深度神经网络来玩Pong游戏,而这一切只需要130Python代码,只依赖numpy库。
    • 接下来,我们强烈推荐Arthur Juliani基于Tensorflow的强化学习简明教程。教程介绍了DQN、策略学习、actor-critic方法以及探索策略,并使用TensorFlow进行代码实现。 你可以先理解这些核心的概念和实现代码,然后通过重新实现来真正的掌握它。

阅读+讲座

原文:Machine Learning for Humans, Part 5: Reinforcement Learning