第一章 强化学习基础
强化学习概述
强化学习(reinforcement learning,RL)讨论的问题是智能体(agent)怎么在复杂、不确定的环境(environment)中最大化它能获得的奖励。强化学习由两部分组成:智能体和环境。在强化学习过程中,智能体与环境一直在交互。智能体在环境中获取某个状态后,它会利用该状态输出一个动作 (action),这个动作也称为决策(decision)。然后这个动作会在环境中被执行,环境会根据智能体采取的动作,输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中获取奖励。
强化学习与监督学习的对比
在监督学习过程中,有两个假设:
-
输入的数据(标注的数据)满足独立同分布条件。
-
需要告诉学习器正确的标签是什么,这样它可以通过正确的标签来修正自己的预测。
强化学习和监督学习最根本的区别就在于:在强化学习中,监督学习的两个假设都不能得到满足。
比如玩俄罗斯方块,上一步与下一步动作有很大的关联,我们得到的数据是相关的时间序列数据,很显然不满足独立同分布。另外,我们并不会得到即时的反馈,这一步走错了可能要等到几步甚至十几步之后才能发现,也就是说我们得到的反馈是延后的,即延迟奖励(delayed reward)的问题。延迟奖励使得训练网络非常困难。
因此,强化学习之所以困难,是因为智能体不能得到即时的反馈,然而我们依然希望智能体在这个环境中学习。
因此,总结监督学习和强化学习的区别如下:
-
强化学习输入的样本是序列数据,而不像监督学习里面样本都是独立的。
-
学习器并没有告诉我们每一步正确的动作应该是什么,学习器需要自己去发现哪些动作可以带来最多的奖励,只能通过不停地尝试来发现最有利的动作。
-
智能体获得自己能力的过程,其实是不断地试错探索(trial-and-error exploration)的过程。探索(exploration)和利用(exploitation)是强化学习里面非常核心的问题。我们需要在探索和利用之间进行权衡,监督学习则不需要。
-
在强化学习过程中,没有非常强的监督者(supervisor),只有奖励信号(reward
signal),并且奖励信号是延迟的,即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈,所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后,如果我们使用监督学习,我们就可以立刻获得一个指导,比如,我们现在采取了一个错误的动作,正确的动作应该是什么。而在强化学习里面,环境可能会告诉我们这个动作是错误的,但是它并没有告诉我们正确的动作是什么。而且更困难的是,它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方。
通过与监督学习的比较,我们可以总结出强化学习的一些特征:
- 强化学习会试错探索,它通过探索环境来获取对环境的理解。
- 强化学习智能体会从环境里面获得延迟的奖励。
- 在强化学习的训练过程中,时间非常重要。因为我们得到的是有时间关联的数据(sequential data),
而不是独立同分布的数据。在机器学习中,如果观测数据有非常强的关联,会使得训练非常不稳定。这也是为什么在监督学习中,我们希望数据尽量满足独立同分布,这样就可以消除数据之间的相关性。 - 智能体的动作会影响它随后得到的数据,这一点是非常重要的。在训练智能体的过程中,很多时候我们也是通过正在学习的智能体与环境交互来得到数据的。所以如果在训练过程中,智能体不能保持稳定,就会使我们采集到的数据非常糟糕。我们通过数据来训练智能体,如果数据有问题,整个训练过程就会失败。所以在强化学习里面一个非常重要的问题就是,怎么让智能体的动作一直稳定地提升。
强化学习的例子
- 羚羊奔跑。它刚刚出生的时候,可能都不知道怎么站立,然后它通过试错,一段时间后就可以跑得很快,可以适应环境。
- 股票交易。我们可以不断地买卖股票,然后根据市场给出的反馈来学会怎么去买卖可以让我们的奖励最大化。
- 玩电脑游戏。比如超级马里奥,我们可以通过不断试错来知道怎么玩才可以通关。
强化学习的历史
早期的强化学习,我们称其为标准强化学习。最近业界把强化学习与深度学习结合起来,就形成了深度强化学习(deep reinforcemet learning)。
因此,深度强化学习 = 深度学习 + 强化学习
-
标准强化学习:标准强化学习先设计很多特征,这些特征可以描述现在整个状态。得到这些特征后,我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作。
-
深度强化学习:自从我们有了深度学习,有了神经网络,我们不需要设计特征,直接输入状态就可以输出动作。我们可以用一个神经网络来拟合价值函数或策略网络,省去特征工程(feature engineering)的过程。
强化学习的应用
- DeepMind 研发的走路的智能体。
- 机械臂抓取。
- OpenAI 的机械臂翻魔方。
- 穿衣服的智能体。
序列决策(sequential decision making)
智能体与环境
强化学习研究的问题是智能体与环境交互
的问题,智能体把它的动作输出给环境,环境取得这个动作后会进行下一步,把下一步的观测与这个动作带来的奖励返还给智能体。这样的交互
会产生很多观测,智能体的目的是从这些观测之中学到能最大化奖励的策略。
奖励
奖励是由环境给的一种标量的反馈信号(scalar feedback signal),这种信号可显示智能体在某一步采 取某个策略的表现如何。强化学习的目的就是最大化智能体可以获得的奖励,智能体在环境里面存在的目的就是最大化它的期望的累积奖励(expected cumulative reward)。不同的环境中,奖励也是不同的。
序列决策
在一个强化学习环境里面,智能体的目的就是选取一系列的动作来最大化奖励,所以这些选取的动作 必须有长期的影响。但在这个过程里面,智能体的奖励其实是被延迟了的,就是我们现在选取的某一步动作,可能要等到很久后才知道这一步到底产生了什么样的影响。强化学习里面一个重要的课题就是近期奖励和远期奖励的权衡 (trade-off),研究怎么让智能体取得更多的远期奖励。
需要注意的是,状态是对世界的完整描述,不会隐藏世界的信息。观测是对状态的部分描述,可能会遗漏一些信息。
当智能体的状态与环境的状态等价的时候,即当智能体能够观察到环境的所有状态时,我们称这个环境是完全可观测的(fully observed)。在这种情况下面,强化学习通常被建模成一个 马尔可夫决策过程 (Markov decision process,MDP) 的问题。
但是有一种情况是智能体得到的观测并不能包含环境运作的所有状态,因为在强化学习的设定里面, 环境的状态才是真正的所有状态。也就是当智能体只能看到部分的观测,我们就称这个环境是部分可观测的(partially observed)。 在这种情况下,强化学习通常被建模成**部分可观测马尔可夫决策过程(partially observable Markov decision process, POMDP)**的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。 部分可观测马尔可夫决策过程依然具有马尔可夫性质,但是假设智能体无法感知环境的状态,只能知道 部分观测值。比如在自动驾驶中,智能体只能感知传感器采集的有限的环境信息。
动作空间
不同的环境允许不同种类的动作。在给定的环境中,有效动作的集合经常被称为动作空间(action space)。像雅达利游戏和围棋(Go)这样的环境有离散动作空间(discrete action space),在这个动作空间里,智能体的动作数量是有限的。
在其他环境,比如在物理世界中控制一个智能体,在这个环境中就有连续动作空间(continuous action space)。在连续动作空间中,动作是实值的向量。
例如,走迷宫机器人如果只有往东、往南、往西、往北这 4 种移动方式,则其动作空间为离散动作空 间;如果机器人可以向 360 ◦ 中的任意角度进行移动,则其动作空间为连续动作空间。
强化学习智能体的组成成分和类型
对于一个强化学习智能体,它可能有一个或多个如下的组成成分。
-
策略(policy)。智能体会用策略来选取下一步的动作。
-
价值函数(value function)。我们用价值函数来对当前状态进行评估。价值函数用于评估智能体进
入某个状态后,可以对后面的奖励带来多大的影响。价值函数值越大,说明智能体进入这个状态越有 利。 -
模型(model)。模型表示智能体对环境的状态进行理解,它决定了环境中世界的运行方式。 下面我们深入了解这 3 个组成部分的细节。
策略
策略是智能体的动作模型,它决定了智能体的动作。它其实是一个函数,用于把输入的状态变成动作。策略可分为两种:随机性策略和确定性策略。
随机性策略(stochastic policy) 就是 π 函数,输入一个状态 ,输出一个概率。 这个概率是智能体所有动作的概率,然后对这个概率分布进行采样,可得到智能体将采取的动作。比如可能是有 0.7 的概率往左,0.3 的概率往右,那么通过采样就可以得到智能体将采取的动作。
确定性策略(deterministic policy) 就是智能体直接采取最有可能的动作.
通常情况下,强化学习一般使用随机性策略,随机性策略有很多优点。比如,在学习时可以通过引入一定的随机性来更好地探索环境; 随机性策略的动作具有多样性,这一点在多个智能体博弈时非常重要。采用确定性策略的智能体总是对同样的状态采取相同的动作,这会导致它的策略很容易被对手预测。
价值函数
价值函数的值是对未来奖励的预测,我们用它来评估状态的好坏。
模型
模型决定了下一步的状态。下一步的状态取决于当前的状态以及当前采取的动作。它由状态转移概率和奖励函数两个部分组成。其中奖励函数是指我们在当前状态采取了某个动作,可以得到多大的奖励,当我们有了策略、价值函数和模型3个组成部分后,就形成了一个马尔可夫决策过程(Markov decision process)。
强化学习智能体的类型
基于价值的智能体与基于策略的智能体
根据智能体学习的事物不同,我们可以把智能体进行归类。
基于价值的智能体(value-based agent) 显式
地学习价值函数,隐式
地学习它的策略。策略是其从学到的价值函数里面推算出来的。
基于策略的智能体(policy-based agent) 直接学习策略
,我们给它一个状态,它就会输出对应动作的概率。基于策略的智能体并没有学习价值函数
。
把基于价值的智能体和基于策略的智能体结合起来就有了演员-评论员智能体(actor-critic agent)。这一类智能体把策略和价值函数都学习了,然后通过两者的交互
得到最佳的动作。
有模型强化学习智能体与免模型强化学习智能体
我们可以通过智能体到底有没有学习环境模型来对智能体进行分类。
有模型(model-based) 强化学习智能体通过学习状态的转移
来采取动作。
免模型(model-free) 强化学习智能体没有去直接估计状态的转移,也没有得到环境的具体转移变量,它通过学习价值函数和策略函数进行决策。免模型强化学习智能体的模型里面没有环境转移的模型。
Q:有模型强化学习和免模型强化学习有什么区别?
A:针对是否需要对真实环境建模
,强化学习可以分为有模型强化学习和免模型强化学习。有模型强化学习是指根据环境中的经验,构建一个虚拟世界
,同时在真实环境和虚拟世界中学习;免模型强化学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。
总之,有模型强化学习相比免模型强化学习仅仅多出一个步骤,即对真实环境进行建模
。因此,一些有模型的强化学习方法,也可以在免模型的强化学习方法中使用。在实际应用中,如果不清楚该用有模型强化学习还是免模型强化学习,可以先思考在智能体执行动作前,是否能对下一步的状态和奖励进行预测,如果能,就能够对环境进行建模,从而采用有模型学习。
免模型强化学习通常属于数据驱动型方法,需要大量的采样来估计状态、动作及奖励函数,从而优化动作策略。相比之下,有模型的深度强化学习可以在一定程度上缓解训练数据匮乏的问题,因为智能体可以在虚拟世界中进行训练。 免模型学习的泛化性要优于有模型强化学习,原因是有模型强化学习算需要对真实环境进行建模,并且虚拟世界与真实环境之间可能还有差异,这限制了有模型强化学习算法的泛化性。 有模型的强化学习方法可以对环境建模,使得该类方法具有独特魅力,即“想象能力”。在免模型强化学习中,智能体只能一步一步地采取策略,等待真实环境的反馈;有模型强化学习可以在虚拟世界中预测出将要发生的事,并采取对自己最有利的策略。
目前,大部分深度强化学习方法都采用了免模型强化学习,这是因为:免模型强化学习更为简单、直观且有丰富的开源资料,如 AlphaGo 系列都采用免模型强化学习;在目前的强化学习研究中,大部分情况下环境都是静态的、可描述的,智能体的状态是离散的、可观察的(如雅达利游戏平台),这种相对简单、确定的问题并不需要评估状态转移函数和奖励函数,可直接采用免模型强化学习,使用大量的样本进行训练就能获得较好的效果。
学习与规划
学习(learning)和规划(planning)是序列决策的两个基本问题。
-
在强化学习中,环境初始时是未知的,智能体不知道环境如何工作,它通过不断地与环境交互,逐渐改进策略。
-
在规划中,环境是已知的,智能体被告知了整个环境的运作规则的详细信息。智能体能够计算出一个完美的模型,并且在不需要与环境进行任何交互的时候进行计算。智能体不需要实时地与环境交互就能知道未来环境,只需要知道当前的状态,就能够开始思考,来寻找最优解。
一个常用的强化学习问题解决思路是,先学习环境如何工作,也就是了解环境工作的方式,即学习得到一个模型,然后利用这个模型进行规划。
探索和利用
-
探索即我们去探索环境,通过尝试不同的动作来得到最佳的策略(带来最大奖励的策略)。
-
利用即我们不去尝试新的动作,而是采取已知的可以带来很大奖励的动作。
也就是说探索就是通过试错来理解采取的动作到底可不可以带来好的奖励,而利用是指我们直接采取已知的可以带来很好奖励的动作。
所以这里就面临一个权衡问题,即怎么通过牺牲一些短期的奖励来理解动作,从而学习到更好的策略。