1. 为什么使用免模型算法?
强化学习是一个与时间相关的序列决策问题,核心在于如何使智能体(agent)在复杂、不确定的环境(environment)中最大化它能获得的奖励。
如图所示,强化学习由智能体和环境组成,智能体首先从环境获取到状态,如何智能体基于此状态输出一个动作,紧接着环境根据这个动作,输出下一个状态和奖励。两者不断交互,智能体在交互中通过更新策略使奖励最大化。
具体来说,又可根据智能体有没有学习环境模型分为有模型强化学习与免模型强化学习。
有模型强化学习
有模型强化学习是指根据环境中的经验,构建一个虚拟世界,同时在真实环境和虚拟世界中学习。这个概念或许有些抽象,再详细解释一下:首先,通过马尔可夫决策过程(上一节有介绍)来定义强化学习任务,以四元组<S,A,P,R>的形式表示,S表示状态,A表示动作,P表示状态转移概率,R表示奖励。假设4个元素都已知,且状态集合与动作集合是有限集,那么智能体就可以对真实环境进行建模,构建一个虚拟世界来模拟真实环境中的状态和交互反应。因为当智能体知道状态转移函数与奖励函数后,它就能知道在某一状态下执行某一动作后能带来的奖励和环境的下一状态,这样智能体就不需要在真实环境中采取动作,直接在虚拟世界中学习和规划策略即可。
免模型强化学习
免模型强化学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。判断有没有学习环境模型,也就是看环境是否已知,即状态转移概率是否已知。若已知状态转移概率,则使用有模型算法,例如动态规划,反之则使用免模型算法。
然而,绝大多数情况下,状态转移概率和奖励函数是未知的,我们在产生某个动作之前,并不能知道此动作会转移到某个状态的概率,通俗的说就是我们做某件事前不能够确定会产生什么样的后果。因此,目前大部分深度强化学习方法都采用了免模型强化学习,此方法更为简单、直观且有丰富的开源资料,如 AlphaGo 系列都采用免模型强化学习。在目前的强化学习研究中,大部分情况下环境都是静态的、可描述的,智能体的状态是离散的、可观察的,这种相对简单、确定的问题并不需要评估状态转移函数和奖励函数,可直接采用免模型强化学习,使用大量的样本进行训练就能获得较好的效果。
2. 免模型预测
由于不知道状态转移函数与奖励函数,也就是无法获取马尔可夫决策过程的模型,那么要想获取状态转移概率,就可以去近似此环境的状态价值函数,这个过程叫做预测。它的目的就是想知道如果按照某种策略输出动作,模型的预测得分是多少,也就是此策略的价值是多少。我们可以通过蒙特卡洛方法和时序差分方法来估计某个给定策略的价值。
2.1 蒙特卡洛估计
蒙特卡洛是一种基于采样的方法,用于计算价值函数的值。给定策略,让智能体与环境进行交互,可以得到很多轨迹。每个轨迹都有对应的回报:,然后求出所有轨迹的回报的平均值,就可以知道某一个策略对应状态的价值:
举例来说,假设有一艘小船,把小船放到水中,从状态s1开始,让它随波流动,这样就会产生一个轨迹,得到一个回报g1,由于水流的不确定性,再把小船放回状态s1,又会产生一个新的轨迹,得到回报g2,反复此过程,根据大数定律,只要我们得到足够多的轨迹,就可以趋近这个策略对应的价值函数。将总回报除以轨迹数量,即,进而得到状态s1的价值函数。最终公式为:
具体推导过程如下:
假设在状态下,有轨迹样本回报,那么此状态下的价值为
通过这种转换,最终得到,可以看出t-1时刻(上一时刻)与t时刻(现在时刻)的平均值建立了联系。其中,表示残差,也就是最终公式中的;表示学习率,也就是最终公式中的,当得到轨迹样本时,就可以用上一时刻的值来更新现在的值。
2.2 时序差分估计
时序差分方法(temporal-difference,TD)是一种基于经验的动态规划方法,结合了蒙特卡洛和动态规划的思想。它与蒙特卡洛方法一样不需要马尔可夫决策过程的转移矩阵和奖励函数。 此外,它可以通过采样的方式从不完整的回合中学习,并且结合了动态规划自举(指更新时使用了现有的估计)的思想。
时序差分方法的目的是对于某个给定的策略,在线地算出它的价值函数,也就是一步一步地算。 最简单的是单步时序差分(one-step TD),即TD(0)。公式为:
其中,被称为时序差分目标(TD target),也就是带折扣因子的长期奖励。首先在当前状态下输出动作后得到及时奖励,然后利用自举的方法,通过之前的估计来估计状态下的价值函数的值,并且加上折扣因子,得到。根据蒙特卡洛推导公式,给定一个回合,同理可以得到时序差分的更新公式为:
与蒙特卡洛方法不同,在蒙特卡洛方法里面,是实际得到的值(可以看成目标),因为它已经把一条轨迹跑完了,可以算出每个状态实际的回报。时序差分不等轨迹结束,往前走一步,就可以更新价值函数。而蒙特卡洛方法需要等全部执行完,到终止状态之后,才能更新它的值。
2.3 两者的区别
时序差分方法是指在不清楚马尔可夫状态转移概率的情况下,以采样的方式得到不完整的状态序列,估计某状态在该状态序列完整后可能得到的奖励,并通过不断地采样持续更新价值。蒙特卡洛则需要经历完整的状态序列后,再来更新状态的真实价值。
例如,我们想获得开车去公司的时间,每天上班开车的经历就是一次采样。假设我们今天在路口 A 遇到了堵车, 时序差分方法会在路口 A 就开始更新预计到达路口 B、路口 C 、⋯⋯,以及到达公司的时间; 而蒙特卡洛方法并不会立即更新时间,而是在到达公司后,再更新到达每个路口和公司的时间。 时序差分方法能够在知道结果之前就开始学习,相比蒙特卡洛方法,其更快速、灵活。
在单步时序差分(one-step TD)TD(0)中,步数为1,也就是只往前走一步,相当于一步一更新。将步数调整为n,那么就变成n步时序差分(n-step TD)。比如 TD(1),即往前走两步,利用两步得到的回报,使用自举来更新状态的价值。如果,也就是在整条轨迹结束后再进行更新,时序差分方法就变成了蒙特卡洛方法。
3. 免模型控制
根据前文可知免模型预测是估计某个策略的价值,那么如何去优化这个价值函数,进而得到最佳策略?换句话说,免模型预测让我们知道按照某种策略,预期得分是多少,但我们还想知道如何选择动作以最大化这个得分。免模型控制就是找到一个最优策略,该策略可以最大化期望回报。
3.1 Q-learning算法(异策略)
用于学习在未知环境下的最优策略,适用于离散的状态空间和动作空间。在Q-learning中,定义了一个Q值函数(也称为动作价值函数),记作Q(s, a),表示在状态s下执行动作a所能获得的长期累积回报的期望值。Q值函数的核心思想是衡量在某个状态下执行某个动作的好坏,从而帮助智能体学习最优策略。
状态价值函数、策略、动作价值函数三者之间存在联系,公式如下:
因此, 为了解决控制问题,我们只需要直接预测动作价值函数,然后在决策时选择动作价值即 Q 值最大对应的动作即可。这样一来,策略和动作价值函数同时达到最优,相应的状态价值函数也是最优的,这就是 Q-learning 算法的思路。更新公式为:
此公式神似于时序差分中的状态价值函数更新公式,动作价值函数更新时是直接拿最大的未来动作价值来估计,也就是从其他策略中获取样本然后利用它们来更新目标策略,因此属于异策略算法。不同的是,状态价值函数更新是拿对应的平均值来估计。
具体实现过程如下图:
首先创建一个Q表格,初始化Q值,然后通过探索与利用,不断更新表格中的值,最后学习到最优策略。探索是在当前的情况下,继续尝试新的动作,其有可能得到更高的奖励,也有可能一无所有。而利用是在当前的情况下,继续尝试已知的可以获得最大奖励的过程,即选择重复执行当前动作。Q-learning 算法就是采用的探索策略,是指智能体在探索的过程中,来进行利用操作,然后以剩下的概率进行探索。
3.2 Sarsa算法(同策略)
Sarsa 算法的更新公式也类似于时序差分的状态价值函数更新公式,它将原本时序差分方法更新V的过程,变成了更新Q,即:
从公式可知,它的策略评估和策略改进过程是基于相同的策略完成的,因此Sarsa 算法属于同策略算法。
同策略和异策略的根本区别在于生成样本的策略和参数更新时的策略是否相同。对于同策略,行为策略和要优化的策略是同一策略,更新了策略后,就用该策略的最新版本对数据进行采样;对于异策略,其使用任意行为策略来对数据进行采样,并利用其更新目标策略。例如,Q学习在计算下一状态的预期奖励时使用了最大化操作,直接选择最优动作,而当前策略并不一定能选择到最优的动作,因此这里生成样本的策略和学习时的策略不同,所以Q学习算法是异策略算法;相对应的Sarsa算法则是基于当前的策略直接执行一次动作选择,然后用动作和对应的状态更新当前的策略,因此生成样本的策略和学习时的策略相同,所以Sarsa算法为同策略算法。