白盒环境和黑盒环境
白盒环境:知道环境的状态转移函数P(s’|s)或P(s’|s,a)和奖励函数R(s)或R(s,a):
白盒环境下的学习相当于直接给出了有监督学习的数据分布(就是有了目标靶子),不需要采样了,直接最小化泛化误差更新模型参数。
对于马尔可夫决策过程(MDP),在白盒环境下(即known MDP),就可以直接用动态规划算法(策略迭代算法、价值迭代算法)求解出最优状态价值函数和最优策略(控制),或者求出某一策略下的价值函数(预测)。
黑盒环境:不知道环境的状态转移函数P(s’|s)或P(s’|s,a)和奖励函数R(s)或R(s,a):
黑盒环境就只能采集数据,尽可能的靠近靶子学习,即最小化数据的误差更新参数(训练出的模型是否接近真是模型就要看采集的数据的量)。
大部分强化学习现实场景,马尔可夫决策过程(MDP)是黑盒环境。对于马尔可夫决策过程(MDP),在不知道环境的状态转移函数和奖励函数下(或者是known MDP,但环境太大太复杂无法去使用)就使用无模型的强化学习算法和基于模型的强化学习算法算出最优策略和最优价值函数(控制),或者求出某一策略下的价值函数(预测)。这两种方法都是基于采样的数据来更新的,直接使用和环境交互的过程中采样到的数据来学习。
确定性策略和随机性策略
策略就是评判智能体在特定时间点的表现。把每一个状态和它所对应的最佳行动建立联系。
策略分为两种,
· 确定性策略:某一个特定状态下的策略,永远都会给出同样的行动。
· 随机性策略:策略给出的是多种行动的可能性分布。
一 策略迭代
策略迭代包含两个主要步骤:策略评估(Policy Evaluation)和策略改进(Policy Improvement)。
策略评估
在策略评估步骤中,我们计算给定策略 π 的状态价值函数 Vπ(s)。这是通过迭代更新每个状态的价值来实现的,直到达到稳定状态。更新公式
其中 π(at,st)表示状态 st 下选取动作 at的概率,p(st+1†st,at)表示状态 st转移到st+1的概率。
策略改进
策略改进步骤利用当前价值函数来生成一个更好的策略。这通过为每个状态选择最大化预期回报的动作来实现。改进公式
策略迭代交替进行策略评估和策略改进,直到策略收敛。
初始策略的设置,可以采用随机策略或者某种启发式方法。随机策略是随机选择动作,目的是用各个动作与环境交互,探索环境,获取更全面的数据。启发式方法,是通过专家知识或经验指导,选择相对较优的策略,可以加快模型的收敛速度。
二 值迭代
值迭代是一种更直接的方法,它通过迭代更新状态价值函数来直接找到最优策略。
从上例的策略评估中可以看出,迭代10次和迭代无穷次所得到的贪心策略是⼀样的。因此,对于上面的问题,不一定让策略评估和策略改进反复交替多次,而是用贝尔曼最优方程,一次性确定各个状态的 Vπ(s),再用这些最优状态值函数Vπ(s)计算动作值函数 Q(s,a) ,最后取Q(s,a)最大的动作,这就是值函数迭代算法。
更新公式
值迭代在每次迭代中对状态价值函数进行更新,直到收敛。最优策略可以通过选择在每个状态下最大化价值函数的动作来确定。
三 策略迭代 vs 值迭代
3.1 局限性
策略迭代算法和值迭代算法,当状态和动作数量有限时,经过有限次迭代即可收敛到近似最优策略,但都需要非常多的迭代次数才能完成,因此适合状态和动作都离散且数量不多的情况。
在实际应用中有如下的局限性:
(1)要求模型已知,即需要知道状态转移概率p和奖励函数r。但实际应用中,这个要求很难满足。如果事先不知道模型,就需先让智能体与环境交互来估计模型,即估计状态转移概率和奖励。因过程比较复杂,只能用于状态比较少的场合。
(2)效率问题。当状态数量较多时,算法效率比较低。在实际应用中,很多问题的状态数量和动作数量非常多.比如,围棋有19×19 = 361个位置,每个位置有黑子、白子或无子三种状态,整个棋局有 3361种状态。对于这种情况,无论是值迭代还是策略迭代,以当前计算机的计算能力,根本无法计算。比较有效的方法是通过一个函数,比如神经网络,来近似计算值函数,以减少复杂度,并提高泛化能力(应用范围和效果)。
3.2 两者对比
策略迭代:通常需要更多的时间来收敛,因为它在每个策略下进行完整的策略评估。但是,一旦收敛,就得到了最优策略。
值迭代:通常收敛速度更快,但可能在找到最优策略之前就停止迭代。
基于策略与基于价值的优势
从图中我们可以看到,策略直接指出了每一步的最佳行动,
- 基于策略的方法往往比基于值的方法收敛到更好的解决方案。原因是,解决方案是梯度推出来的,而梯度总是指向微分函数的最陡峭方向。当运用误差函数并采用梯度下降法时,每一步都做都会让误差函数的值最小化。但是,如果几个动作间的差异比较小,基于值的方法产生的结果差异更大,无法保证收敛。
- 值函数需要明确定义的环境,在该环境下动作会产生确定的结果。如果学习过程是随机的,那么在采取相同动作时,可能有不同的结果(观测),这样值函数就没法使用了。基于策略的方法不需要采取相同的动作来探索环境。
- 在高维空间内,基于策略的方法的计算成本更低,计算的更快。这是因为基于值的方法要求我们为每一种可能的动作计算一个价值。如果空间中的动作太多了,值函数就不会收敛于一个解决方案。基于策略的方法不同,因为本质上只是让我们执行动作并且调整梯度。
四 泛化迭代
策略迭代法的中心是策略函数,通过策略评估+策略提升两个步骤使策略变得越来越好;
价值函数通过自我更新、动态规划的方式不断迭代更新价值函数,并最终求出策略函数。
- 两个方法都要求策略函数和价值函数
- 最终最优的策略函数都是由价值函数得到的
- 价值函数依据函数的数值收敛
- 策略函数依据策略收敛
我们发现了一个关键:那就是两者都需要训练策略函数和价值函数,只是侧重点不同。
策略迭代的核心是策略,为了使策略能够提升,价值函数可以求解得准确,也可以求解得不准确;
价值迭代的核心是价值,算法的核心部分根本没有出现与策略有关的内容,直到最后才出现了策略。
两种方法都十分看重自己关心的那部分,而可以选择忽略另一部分,因此可以看出两个方法都比较极端。既然我们找到了两个极端的方法,那么我们可不可以找到两种方法的中间带呢?当然是可以的,这就是本节要介绍的泛化迭代法,英文一般称为Generalized Policy Iteration,但我觉得这个词里只出现Policy是不够准确的。
上面这条线是价值函数,价值函数是连续的,所以这条线并不难得到。而对于价值迭代的算法,则是一直在上面那条线上行走
图中的折线主要表达了策略迭代的算法,我们选定某个策略,求解价值函数,然后更新策略,这样优化的轨迹会不断地在两条主线上跳动。
泛化迭代:
我们先做几轮价值迭代,然后再做策略迭代,这样的方法同样可以得到正确的结果,但是可能会有更快的速度。