之前通过对AlphaGo Zero的学习,我对深度强化学习有了一定的了解。但是由于没有经过系统的学习,我对其中的知识还有很多不懂的地方。写这一系列文章主要是整理一下网上的资料,梳理这方面的知识,做一下总结。目前网上关于深度强化学习的应用这方向的资料不算多,再加上深度强化学习本身也是一个很难的方向,我在总结的时候会尽量用较简单的语言来说明。
强化学习是机器学习的一个分支,相较于机器学习经典的有监督学习、无监督学习问题,强化学习最大的特点是在交互中学习(Learning from
Interaction)。智能体在与环境的交互中根据获得的奖励或惩罚不断的学习知识,更加适应环境。RL学习的范式非常类似于我们人类学习知识的过程,也正因此,RL被视为实现通用AI重要途径。
强化学习的灵感来源于心理学中的行为主义理论,即智能体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。它强调如何基于环境而行动,以取得最大化的预期利益。
以走迷宫的游戏为例,一开始智能体采取随机行走的策略,直到走到终点结束游戏,计算奖励。我们可以把步数的多少作为奖励,步数越少,奖励越大。步数少的那局游戏中采取的策略给予奖励。随着游戏进行的局数变多,智能体就会逐渐知道在当前局面采取什么策略会更靠近终点。
强化学习关键要素:agent(智能体),reward(奖励),action(行为),policy(策略),state(状态),environment(环境),MDP(马尔科夫决策过程)。
agent(智能体)处于某一个state(状态),它按某种policy(策略)选择了某一action(行为),导致它从state1进入state2,这就是agent与environment(环境)的一次交互。每一次和环境交互,环境返回reward(奖励)。
policy(策略)是RL中最核心的问题,它的定义一定要记住,是agent在state时,所要做出action的选择,定义为 π π π。在数学上可以理解为从state到action的映射,是一个mapping。策略分为随机性策略和确定性策略。
state:可以细分为三种,Environment State,Agent State和Information State。
Environment State是agent所处环境包含的信息,简单理解就是很多特征数据,也包含了无用的数据。
Agent State是输入给agent的信息,也就是特征数据。
Information State是一个概念,即当前状态包含了对未来预测所需要的有用信息,过去信息对未来预测不重要,该状态就满足马尔科夫性(Markov Property)。
Environment State,Agent State都可以是Markov Property。
environment:可以分为完全可观测环境(Fully Observable Environment)和部分可观测环境(Partially Observable Environment)。
Fully Observable Environment就是agent了解了整个环境,是一个理想情况。
Partially Observable Environment是agent了解部分环境的情况,剩下的需要靠agent去探索。
强化学习算法有Qlearning、Sarsa、Policy Gradients、Sarsa lambda、A3C等等,每种算法都有其特点。
这里只给出各个算法的伪码,之后会在实战练习中熟悉各个算法。
在19年看到过一篇文章,堪称深度强化学习的劝退文。
任何时候,如果有人问我强化学习能不能解决他们的问题,我都会告诉他们,不行。而且70%的情况下我都是对的。
深度强化学习被大量的炒作重重包围。这并不是无缘无故的!强化学习是很奇妙的一种范式,原则上,一个鲁棒且高性能的RL系统应该是可以完成一切任务的。将这种范式与深度学习的经验力量相结合明显是最佳搭配。深度RL看起来是最接近通用人工智能(Artificial
general intelligence,AGI)的系统之一,而打造AGI这一梦想已经消耗了数十亿美元的资金。
不幸的是,目前深度强化学习仍然不起作用。
当然,我相信它是有用的。如果我不相信强化学习,我也不会研究它。但是研究过程中也出现了很多问题,而且大部分都很难解决。智能体agent光鲜亮丽的演示背后,是大家看不到的无数鲜血、汗水和泪水。
……
作者Alex Irpan 目前是谷歌大脑机器人团队的软件工程师,他从伯克利获得计算机科学本科学位,本科时曾在伯克利人工智能实验室(Berkeley AI Research (BAIR) Lab)参与科研,导师是深度强化学习大牛 Pieter Abbeel。
他在这篇文章指出了深度强化学习的种种弊端:
1、深度强化学习的样本效率极低
这一点是众所周知的。深度强化学习最经典的实验基准是Atari游戏。在著名的深度Q网络(Deep Q-Networks)论文中,如果你将Q学习、大小合适的神经网络和一些优化技巧结合,就可以让网络在一些Atari游戏中达到甚至超越人类水平。然后深度强化学习所耗费的硬件资源和时间也非常非常多。
2、如果你只关心最终的性能,许多问题更适合用其他方法解决。
强化学习理论上可以用于任何事物,包括模型未知的环境。然而,这种普遍性是有代价的:算法很难利用特定信息来帮助学习,这迫使人们使用多到吓人的样本来学习本来通过硬编码就可以得到的规律。
无数经验表明,除了极少数情况,特定域的算法均比强化学习的表现更快更好。 如果你只是为了深度RL而研究深度RL,这不成问题,但是每当我把RL与其他任何方法进行对比时,都会觉得十分沮丧,无一例外。我非常喜欢AlphaGo的原因之一就是因为它代表了深度RL的一次毋庸置疑的胜利,而这样的胜利并不常见。
3、强化学习通常需要奖励函数
强化学习一般假定存在奖励函数。通常是直接给定的,或者是离线手动调整,然后在学习过程中不断修正。我说“通常”是因为也有例外,例如模仿学习或逆RL,但大多数RL方法把奖励函数奉为神谕。
更重要的是,想让RL做正确的事,奖励函数必须知道到底你想要什么。RL有过拟合奖励函数的倾向,会导致意想不到的结果。这就是为什么Atari游戏是一个很好的基准。不仅是因为很容易从中获得大量的样本,而且是因为每场比赛的目标都是尽可能地得分,所以永远不用担心该如何定义奖励函数,而且每个系统都用相同的奖励函数。
这也是MuJoCo任务很受欢迎的原因。因为它们在模拟器中运行,所以你清楚地知道所有的对象状态(state),这使得奖励函数的设计容易许多。
4、奖励函数设计难
增加一个奖励函数并不难。困难的是如何设计一个奖励函数,让它能鼓励你想要的行为,同时仍然是可学习的。
在HalfCheetah环境中,有一个双足机器人被限制在一个垂直平面内,只能向前跑或向后跑。任务目标是学习跑步的步态。奖励函数是HalfCheetah的速度。
计划奖励可能会影响学习,导致最终的行为与你想要的结果不匹配。一个很好的例子就是赛龙舟游戏(详情参考OpenAI博客),预定的目标是完成比赛。可以想象,在给定的时间内完成比赛,稀疏奖励函数会+1奖励,而其他情况都是0奖励。
但游戏给出的奖励是只要到达关卡点就会加分,并且收集道具也会加分,而且收集道具给的分数比完成比赛得到的还多。在这样的奖励函数下,RL系统的agent即使没有完成比赛,也能拿到最高得分。因此也导致了许多意想不到的行为,例如agent会撞毁船、着火、甚至走反方向,但它获得的分数比单纯完成游戏还要高。
在测试一个项目时,要花很多时间设计奖励函数,奖励函数定义不当会造成agent做出出人意料的行为。
5、即使奖励函数设计得很好,也很难避免局部最优解
正常情况下,AI会通过正常的手段最大化奖励函数。然而,有些情况下,AI可以通过作弊的手段,直接把奖励函数调到最大值。有时一个聪明的、现成的解决方案比奖励函数设计者所预期的答案能得到更多的奖励。
奖励作弊是一个例外,更常见的情况是由于探索-利用权衡不当而导致的局部最优解。
有几个不错的想法可以解决这个问题——内在动机、好奇心驱动探索、基于计数的探索等等。这些方法中有许多是在80年代或更早的时候提出的,其中有几个在深度学习模型中重新得到应用。然而,据我所知,没有一个方法能在所有环境中持续奏效,他们总是有时有用,有时没用。如果有一个到处都能奏效的探索技巧,那就太好了,但我认为这种万能技术在很长一段时间内都不能实现。不是因为人们没有尝试,而是因为探索-利用困境真的太难了。
6、当深度RL有效时,它可能过拟合环境中奇怪的模式
“深度RL广受欢迎的原因是它是机器学习中唯一允许在测试集上进行训练的研究领域。”
强化学习的好处是:如果你想在一个环境中表现很好,可以随意的过拟合。缺点是,如果你想推广到其他环境中,可能表现会很差。
7、即使忽略泛化问题,最终结果也可能不稳定而且难复现
几乎每一个ML算法都有超参数,它们会影响学习系统的行为。通常,超参数都是人工挑选的,或者是随机搜索得到的。
监督学习是稳定的,有固定的数据集和真实值目标。如果你稍微改变超参数,算法的表现不会改变很多。并不是所有的超参数都表现良好,但有了过去几年发现的所有经验技巧,许多超参数在训练中可以进行优化。这些优化方向是非常重要的。
目前,深度RL是不稳定的,是一项十分麻烦的研究。
目前以及未来,深度强化学习会在哪些方面有作用呢。
1、DQN,AlphaGo,AlphaZero,跑酷机器人,减少能耗中心使用,以及利用神经架构搜索技术(Neural Architecture Search)的AutoML。
2、OpenAI的Dota2 1v1影魔( Shadow Fiend)机器人,在一个简单的对战设置中打败了顶级职业选手。
3、任天堂明星大乱斗(Super Smash Brothers Melee)机器人,在1v1的Falcon ditto游戏中打败了职业选手。(Firoiu et al, 2017)
4、机器学习最近在玩法不限注德州扑克中击败了职业玩家。Libratus(Brown et al, IJCAI 201) 和 DeepStack(Moravčík et al, 2017)都做到了这一点。有些人认为这是用深度RL完成的。但这两篇论文都不是,他们用的是虚拟遗憾最小化(counterfactual regret minimization)和迭代求解子博弈的方法。
我们可以看出使学习更容易的一般属性。下面的属性都不是学习必需的,但是满足的特性越多绝对是越好的:
很容易产生近乎无限量的经验。为什么这一点有用应该是很清楚的。拥有的数据越多,学习问题就越容易。这适用于Atari游戏,围棋、象棋、将棋,以及跑酷机器人的模拟环境。它似乎也适用于能耗中心的项目,因为在以前的工作中(Gao, 2014),结果表明神经网络预测能源效率的准确度很高。这正是你训练RL系统想要的模拟模型。
问题可以简化成更简单的形式。 我在深度RL看到的常见错误是想法太大。强化学习可以做任何事情!这并不意味着你必须同时完成每件事。
1、 用强化学习进行调优: 第一篇AlphaGo论文就是采用监督学习,然后在其基础上用RL进行微调。这是一个很好的方法,因为它使用一个更快但不那么强大的方法来加快初始学习。该方法在其他环境下也有效,例如Sequence Tutor(Jaques et al, ICML 2017)。可以将其视作以一个合理的先验条件作为RL过程的开始,而不是用一个随机的条件,或者用其他方法来解决学习先验条件的问题。
2、 可学习的奖励函数: ML的前景在于我们可以用数据来学习比人类的设计更好的东西。如果奖励函数的设计这么难,为什么不用ML来学习更好奖励函数呢?模仿学习和逆向增强学习都显示了奖励函数可以用人为演示和人为评分来隐式定义。
分层深度强化学习:利用分层强化学习(Hierarchical Reinforcement Learning,HRL)将最终目标分解为多个子任务来学习层次化的策略,并通过组合多个子任务的策略形成有效的全局策略。
多任务迁移深度强化学习:在传统 DRL 方法中, 每个训练完成后的 agent只能解决单一任务. 然而在一些复杂的现实场景中,需要 agent 能够同时处理多个任务,此时多任务学习和迁移学习就显得异常重要.Wang 等人总结出 RL 中的迁移分为两大类:行为上的迁移和知识上的迁移,这两大类迁移也被广泛应用于多任务 DRL 算法中。
多 agent 深度强化学习:在面对一些真实场景下的复杂决策问题时,单agent 系统的决策能力是远远不够的.例如在拥有多玩家的 Atari 2600 游戏中, 要求多个决策者之间存在相互合作或竞争的关系. 因此在特定的情形下,需要将 DRL 模型扩展为多个 agent 之间相互合作、通信及竞争的多 agent 系统。
基于记忆与推理的深度强化学习:在解决一些高层次的 DRL 任务时, agent 不仅需要很强的感知能力,也需要具备一定的记忆与推理能力,才能学习到有效的决策. 因此赋予现有 DRL 模型主动记忆与推理的能力就显得十分重要。
[1]. Deep Reinforcement Learning Doesn’t Work Yet. https://www.alexirpan.com/2018/02/14/rl-hard.html
[2]. 莫烦-强化学习教学 https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/
[3]. LIU Quan, ZHAI Jian-Wei, ZHANG Zong-Zhang, ZHONG Shan, ZHOU Qian, ZHANG Peng, XU Jin, A Survey on Deep Reinforcement
Learning, 2017,Vol.40,Online Publishing No.1