在有监督学习(supervised learning
)中,训练数据中包含了数据样本的目标。 不过现实中可没有上帝一样的监督者给出这些目标或答案!
强化学习(reinforcement learning
)是人工智能(AI
)的一个重要分支,它也是DeepMind
的阿尔法狗(AplhaGo
)得以实现的一块基石。
在强化学习中 ,虽然没有现成的答案,但是代理(agent
)仍然必须决定如何行动(action
)来完成它自己的任务。 在没有训练数据的情况下,代理从经验中学习。 它通过反复的试错来收集训练样本(“这个动作很好,那个动作很糟糕”),学习的目标就是使其长期奖励(reward
)最大化 。
在本文中,我们将探讨:
最后,我们整理了一些优质资源可供你深入探索强化学习。
具有明确的目标和分值系统的游戏,是最容易理解强化学习的应用场景。
假设我们正在玩一款游戏,老鼠如果找到奶酪,就能得到+1000
分奖励,如果找到沿途的水源,也能得到+10
分奖励。 但是,如果老鼠误入电箱(触电),就会得到负的奖励-100
分。
经过一番探索(exploration
),老鼠可能会发现聚集在入口附近的三个水源,从此它可能就会花费所有的时间来利用(exploit
)这一发现,不断收获这些水源的微小回报(reward
),而不再有更高的追求。
因此,正如你所看到的那样,老鼠会在迷宫里错过更好的奖励,例如吃到奶酪!
这带来了探索(exploration
)和利用(exploit
)之间的权衡问题。 一个简单的探索策略(exploration strategy
)是在大多数时间(比如说80%
)采取已知的具有最好回报的动作,但偶尔也会探索一个随机选择的动作,尽管它可能导致偏离已知的奖励。
这个策略被称为epsilon-greedy
策略,其中epsilon
是智能代理(老鼠)采取随机行动的时间百分比(在上例中,即20 %
)。 通常我们可以在开始时更多地进行探索(即epsilon
取值大一些)。 随着时间的推移,随着老鼠对迷宫越来越了解,并且对哪些行动能够产生长期的高回报的了解也越来越多,将epsilon
稳定地降低到10%
甚至更低就是合理的选择了。
记住这一点很重要:奖励不是实时的 —— 在迷宫老鼠的例子中,在最终找到奶酪之前,可能需要经过一段漫长的探索,并且做出多次选择。
总结一下:在强化学习中,智能代理(agent
)观察环境(environment
),采取行动(action
)与环境互动,并获得积极或消极的回报(reward
):
老鼠在迷宫中的行为,可以使用马尔科夫决策过程(Markov Decision Process
)来描述 ,马尔可夫决策过程是具有特定的状态转移概率的过程。 我们将通过迷宫老鼠这个例子来进一步解释它。
马尔可夫决策过程包括:
{前进,后退}
、在十字路口可以{前进,后退,左,右}
。 Pokeman
游戏中进行一次攻击时,可能会攻击失败(状态1),也可能对敌人构成一些伤害(状态2),或者击倒对手(状态3)。0
,但是如果老鼠真的找到一个有水或奶酪的地方,就可以得到正的奖励,如果找到不该去的地方,得到的奖励就是负的。γ
量化了即时奖励和未来奖励之间重要性的差异,它的取值范围是0~1
。 例如,如果γ
是0.9
,并且在3
步之后可以得到5
分的奖励,那么奖励的折现值是就是.9 3 * 5
。现在我们理解了马尔可夫过程,可以给出老鼠的目标函数了。 我们要做的就是尽量最大化其长期回报的总和:
让我们逐项学习这个回报公式。 首先,我们累加所有时间步t
上的回报。 现在先把γ
设置为1
,暂时忽略它。 r(x,a)
是一个奖励函数。 对于状态x
和行动a
(例如,在十字路口左转),它给出了在x
状态下采取行动a
的奖励。 从直觉上讲,这个公式所表达的,就是应当在每个状态都采取最优动作来最大化未来奖励的总和。
我们已经定义了强化学习的问题,并且确定了学习目标,现在让我们来探讨一些可能的解决方案。
Q-learning
是一种利用动作-价值(action-value
)函数来进行动作选择的技术(Q
指quality
,即动作的质量 —— 译者注) ,该动作-价值函数根据所处的状态,来决定在该状态下应该采取哪种行动。
函数Q
的输入是一个状态-动作对,返回值是该状态下执行该动作(以及所有后续动作)的预期回报 。 在我们开始探索环境之前,Q
给出相同的(任意)固定值。 但是,随着我们更多地探索环境,Q
可以越来越准确地估计出在状态s
下执行动作a
的价值。 在智能代理探索环境的过程中,函数Q
同步得到更新。
维基百科上Q-learning的这个方程式解释得非常好。 它展示了我们如何利用从环境中获得的回报来更新Q
值:
让我们再次将γ
设置为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英尺,就应该刹车。 否则,继续前进。“
因此我们学习的这个函数,其目标是最大化预期的奖励。 什么模型最擅长学习复杂的函数? 深层神经网络!
Andrej Karpathy
的文章Pong from Pixels中介绍了一个很好的实战案例,他使用深度强化学习来学习经典的Atari
游戏Pong
的操作策略,以游戏画面中的原始像素作为输入(状态),输出应当向上或向下移动(动作)的概率 :
如果你想用亲手尝试深度强化学习,请仔细阅读Andrej
的帖子。 你将学习如何使用130
行代码来实现一个两层的策略网络,还将学习如何将其嵌入OpenAI
的Gym
环境,使用Gym
可以快速启动并运行你的第一个强化学习算法,然后在各种游戏上进行测试,看看它的表现与其他人提交的实现相比性能如何。
在2015
年,DeepMind
使用了一种称为深度Q
网络(DQN
)的方法,使用深度神经网络来拟合Q
函数,并利用这一模型在许多Atari
游戏中超越了人类的基准表现:
我们发现基于深度
Q
网络的智能代理,只需要使用画面像素和游戏得分作为输入,就能够超越所有以前的算法,在49
个游戏中达到了与专业游戏玩家相当的水平,而且所有这些任务中的模型使用相同的算法、网络体系结构和超参数。 这个研究在高维感官输入和行动之间架起了桥梁,从而造就了第一个能够学会应对多种挑战性任务的人工代理。 ( Silver等人,2015 )
下图是基于DQN
的智能代理在多个领域中的表现,与线性学习器和人类的比较:
为了帮助对强化学习领域研究中的最新进展有一些直观感受,下面提供了一些非线性Q
函数拟合器的改进实例:
RNN
)增加DQN
。 当智能代理只能看到周围的环境时(例如老鼠只能看到迷宫的某个部分,而不能看到整个迷宫的鸟瞰图),代理需要记忆更大的场景,以便记住某些物体的位置。 这类似于人类的婴儿对物体的持久性感知能力的开发过程 ,即使物体离开婴儿的视野,人类婴儿也知道这些物体是存在的。 RNN
是“递归的”,即它们允许信息持久的存在 。 这是一个使用DQRN
网络玩Doom
游戏的视频,令人印象相当深刻。2016
年,在DQN
论文仅一年之后,DeepMind
发布了另一种算法,称为Asynchronous Advantage Actor-Critic
,即A3C
,只需要一半的时间进行训练,其在Atari
游戏上的表现已经超越了所有尖端的算法( Mnih等,2016 )。A3C
是一种演员-评论员(Actor-Critic
)算法,它融合了我们之前探讨的两种方法中的精华:包括一个Actor
(策略网络:决定如何动作)和一个Critic
(Q
网络:决定动作价值)。 Arthur Juliani
对A3C
的具体工作做了很好的阐述。 A3C
现在是OpenAI
的通用启动代理 。
从那时起,就有了无数的惊人的突破 - 从发明自己语言到教自己适应各种地形 。 我们这个系列的文章只是简单介绍了强化学习的一些前沿进展,但我希望它能成为你进一步探索的起点!
进入下一段之前,我们想分享一下DeepMind
所开发的智能代理学习走路的视频,实在令人难以置信…
Andrej Karpathy
的 Pong from Pixels 能够让你迅速运行起来第一个强化学习代理。 正如文章所描述的那样,“我们将从零开始,只使用原始像素,使用深度神经网络来玩Pong
游戏,而这一切只需要130
行Python
代码,只依赖numpy
库。 Arthur Juliani
的 基于Tensorflow的强化学习简明教程。教程介绍了DQN
、策略学习、actor-critic
方法以及探索策略,并使用TensorFlow
进行代码实现。 你可以先理解这些核心的概念和实现代码,然后通过重新实现来真正的掌握它。 Richard Sutton
的著作《强化学习简介 》- 书很棒,可读性非常强John Schulman
在伯克利开设的 课程CS 294:深度强化学习David Silver
在UCL
开设的课程 强化学习 原文:Machine Learning for Humans, Part 5: Reinforcement Learning