概述
- 动态规划是众多强化学习方法的一个必要基础。
- 策略评估对一个策略的价值函数进行迭代计算。
- 策略改进根据给定策略的价值函数计算改进的策略。
- 策略迭代和价值迭代通过策略评估和策略改进过程的交替得到最优价值函数和一个最优策略。
- 异步动态规划是一种以任意顺序更新状态的就地迭代方法。
- 所有涉及策略评估和策略改进相互作用的一般思路称为广义策略迭代。
动态规划(Dynamic Programming,DP)是一类优化方法,在给定一个用MDP描述的完备环境模型的情况下,其可以计算最优策略。对于强化学习问题,传统DP算法作用有限,原因有二:
- 完备的环境模型只是一个假设。
- 它的计算复杂度极高。
但DP为更多的方法提供了一个必要的基础,依然是一个非常重要的理论。
策略评估#
对于任意一个策略π,计算其状态价值函数vπ的过程在DP中被称为策略评估。我们已知计算状态价值函数的贝尔曼方程:
vπ(s)=a∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γvπ(s′)]如果环境的动态特性完全已知,那么上式是一个拥有∣S∣个未知数以及∣S∣个等式的线性方程组。该计算方程较为繁琐,可以使用迭代法来解决。记策略π在第k轮迭代得到的状态价值函数为vk,其中初始近似值v0可以任意选取(除了终止状态价值必须为0),则使用vπ的贝尔曼方程的更新公式为:
vk+1(s)=˙Eπ[Rt+1+γvk(St+1)∣St=s]=a∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γvk(s′)]这种根据新一轮的单步即时收益和上一轮所有的后继状态价值函数二者的期望来更新新一轮s的价值函数的方法为期望更新,因为它基于所有可能后继状态的期望值。
用程序实现迭代策略评估有两种方式。一种是使用两个数组,一个存储旧的价值函数vk(s),另一个存储新的价值函数vk+1(s);另一种只使用一个数组就地更新。直接用新的价值函数替换旧的价值函数。就地更新方法根据状态更新的顺序可以将新的价值函数立刻用于当前轮的更新,该算法依然能收敛到vπ,且比双数组收敛得更快。
完整的就地更新策略评估算法的伪代码如下:
- 输入:待评估的策略π
- 参数:小阈值θ>0
- 对于任意s∈S+,任意初始化V(s),其中V(终止状态)=0
- 循环:
- Δ←0
- 对每一个s∈S:
- v←V(s)
- V(s)←a∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γV(s′)]
- Δ←max(Δ,∣v−V(s)∣)
- 直到Δ<θ
由于迭代策略评估只能在极限意义下收敛,因此该算法使用小阈值θ判断程序何时终止。随着更新接近收敛,每一轮更新带来的改变量也将趋于无穷小,当所有状态的价值函数改变量的最大值小于一个小阈值时,可以考虑结束更新。
策略改进#
计算一个给定策略下的价值函数是为了寻找更好的策略。假设对于任一确定的策略π,我们已知其策略函数vπ。如果想知道在某个状态s,选择一个不同于给定策略的动作a=π(s)是否会更好,一种解决方法是在状态s选择动作a之后继续遵循现有的策略π,则相应的动作价值为qπ(s,a)。如果qπ(s,a)>vπ(s),则可以认定该新策略总体来说更好。
以上是针对某个状态的特例,一般来说,如果π′和π是任意两个确定的策略,对任意的s∈S有qπ(s,π′(s))⩾vπ(s),则我们称策略π′相比于π一样好或更好,此时对任意的s∈S也必然有vπ′(s)⩾vπ(s)
在上一章针对贝尔曼最优方程的反证法的讨论中,我们知道对于一个策略π,基于其动作价值函数qπ(s,a)的贪心策略π′必然是一个不劣于π的策略,其满足:
π′(s)=˙aargmaxqπ(s,a)=aargmaxs′,r∑p(s′r∣s,a)[r+γvπ(s′)]如果π′和π一样好,即vπ=vπ′,那么上式将与贝尔曼最优方程等效,即π′和π都是最优策略。
另外,如果同一状态下存在多个最优动作,则新的贪心策略只需保证每个最优动作都有概率被选中,而选中非最优动作的概率为0即可。
策略迭代#
根据策略评估和策略改进,一旦一个策略π根据vπ产生了更好的策略π′,我们就可以通过计算vπ′得到一个更优的策略π′′。该练市方法可以得到如下不断改进的策略和价值函数的序列:
π0→Evπ0→Iπ1→Evπ1→Iπ2→E⋯→Iπ∗→Ev∗其中→E代表策略评估,→I代表策略改进。由于有限MDP必然只有有限种策略,所以该方法一定能在有限次迭代后收敛到一个最优策略和最优价值函数。这种寻找最优策略的方法称为策略迭代,其算法伪代码如下:
- 初始化
- ∀s∈S,任意设定V(s)∈R和π(s)∈A(s)
- 策略评估
- 循环:
- Δ←0
- 对每一个s∈S:
- v←V(s)
- V(s)←a∑π(a∣s)s′,r∑p(s′,r∣s,a)[r+γV(s′)]
- Δ←max(Δ,∣v−V(s)∣)
- 直到Δ<θ(一个决定估计精度的小正数)
- 策略改进
- policy-stable←true
- 对每一个s∈S:
- old-action←π(s)
- π(s)←aargmaxs′,r∑p(s′,r∣s,a)[r+γV(s′)]
- 如果old-action=π(s),那么policy-stable←false
- 如果policy-stable为true,那么停止并返回V≈v∗以及π≈π∗,否则跳转到策略评估
其中policy-stable根据新旧策略在每一个状态选择的动作是否都一样判断算法是否(近似)收敛。
价值迭代#
策略迭代算法的一个缺点是每一次迭代都要进行策略评估,而策略评估本身也是一个迭代过程,且其收敛理论上在极限处才成立,效率较低。
有多种方式可以截断策略迭代中的策略评估步骤,并且不影响策略迭代的收敛。其中一种方式在策略评估中只对每个状态进行一次更新,被称为价值迭代。将此表示为结合了策略改进和截断策略评估的更新公式如下,对任意s∈S:
vk+1=˙amaxs′,r∑p(s′,r∣s,a)[r+γvk(s′)]该方法直接假定策略是贪心的,每轮对每个状态的所有动作遍历一次后即刻选取最优动作价值作为新的状态价值函数。从另一种角度看,这相当于使用贝尔曼最优方程作为更新规则,舍弃在过程中追求具体的策略,直接迭代求解最优价值函数再导出最优策略,根据其压缩映射性质可以证明它必然收敛到该方程唯一的不动点v∗。
价值迭代和策略评估一样,理论上需要迭代无限次才能收敛到v∗,可以设置一个小阈值使其终止,以下为其算法伪代码:
- 参数:小阈值θ>0
- 对于任意s∈S+,任意初始化V(s),其中V(终止状态)=0
- 循环:
- Δ←0
- 对每一个s∈S循环:
- v←V(s)
- V(s)←amaxs′,r∑p(s′,r∣s,a)[r+γV(s′)]
- Δ←max(Δ,∣v−V(s)∣)
- 直到Δ<θ
- 输出一个确定的π≈π∗,使得π(s)=aargmaxs′,r∑p(s′,r∣s,a)[r+γV(s)]
异步动态规划#
上述DP方法的一个主要缺点是它们需要对MDP的整个状态集进行遍历。如果状态集很大,即使是单次遍历也很昂贵。
异步DP算法是一类就地迭代的DP算法,其不以系统遍历状态集的形式组织算法,而是使用任意可用的状态值以任意顺序更新状态值。在某些状态值第一次更新之前,另一些状态值可能已经更新了好几次。但为了正确收敛,异步算法必须不断更新直至某个没有遗漏任何一个状态的计算节点。
异步算法具有很大的灵活性。我们可以尝试通过选择一些特定状态来更新可以加快算法的速度、调整更新顺序以使价值信息能更有效地在状态间传播、将更新的重点放在和最优行为更相关的一些状态上等等。
异步算法还使得计算和实时交互的结合更加容易,它可以随着智能体实际在MDP中交互的经历更新,并立刻将更新值应用于智能体下一时刻的决策,这使得将DP算法的更新聚焦到部分与智能体最相关的状态集成为可能。
广义策略迭代#
策略迭代包括策略评估和策略改进两个同时进行、相互作用的流程,但作用的顺序、粒度都不是一成不变的。只要两个流程持续更新所有状态,那么最后的结果通常能收敛到最优价值函数和一个最优策略。我们用广义策略迭代(GPI)指代让策略评估和策略改进相互作用的一般思路,而与其他细节无关。几乎所有的强化学习方法都可以被描述为GPI,即包含明确定义的策略和价值函数。
可以将GPI的评估和改进流程视为两个约束之间相互作用、竞争合作的流程。让策略对价值函数贪心通常会使价值函数与新的策略不匹配,而使价值函数与策略一致通常会使策略不再对新的价值函数贪心。但从长远来看,这两个流程会相互作用以找到一个联合解决方案:最优价值函数和一个最优策略。
