文章目录
前言
动态规划 (Dynamic Programming, DP) 就是先把复杂问题分解为若干的子问题,再通过求解这些子问题来得到原问题的解。这适合解决满足如下两个性质的问题:
最优子结构 (optimal substructure):一个原问题可以拆分成一个个的小问题,解决这些小问题后能够通过组合小问题的解来得到原问题的最优解。
重叠子问题 (overlapping subproblems):子问题出现多次,并且子问题的解能被存储起来重复使用。
马尔科夫决策过程正好满足动态规划的这两个要求:贝尔曼方程把问题分解成一个递归的结构来求解子问题,价值函数可以存储并复用它的最佳解。因此我们就可以使用动态规划的方法来求解马尔科夫决策过程的核心问题:预测和控制。
预测 (prediction):已知一个马尔科夫决策过程 MDP 和一个策略 π,或者是给定一个马尔科夫奖励过程 MRP,求解基于该策略的价值函数 vπ。(评估一个给定的策略)
控制 (control):已知一个马尔科夫决策过程 MDP,求解最优价值函数 v∗ 和最优策略 π∗。(搜索最佳策略)
这两种问题的区别在于,预测问题是策略已给,我们需要确定它的价值函数是多少,而控制问题是要在没有策略的前提下确定最优的价值函数以及对应的策略。两者之间存在递进关系,在强化学习中,我们通过解决预测问题,进而解决控制问题。
动态规划算法可分为同步和异步这两类,主要区别在于所有状态的更新是否同步。下面分别介绍这两种动态规划。
1. 同步动态规划 (Synchronous Dynamic Programming)
1.1 策略评估 (policy evaluation)
策略评估:计算给定策略下状态价值函数的过程。具体来讲,策略评估就是从任意一个状态价值函数开始,依据给定的策略,结合了贝尔曼期望方程、状态转移概率矩阵和奖励同步迭代,来更新状态价值函数并直至其收敛,从而得到该策略下最终的状态价值函数。而关键就在于如何在一个迭代周期内更新每一个状态的价值。
这里借用叶强笔记中的一个例子来说明:
在一个 4×4 小型方格世界中,agent 为了在完成任务时(到达 0 或 15 这两个终止状态格子)能够获得尽可能多的奖励(或尽可能减少负值奖励带来的惩罚),它需要思考处在格子世界中的某一个状态时,应该采取怎样的行为才能尽快地到达终止状态格子。
又因为 agent 不像我们人类知道该环境的运行规律,它身处格子世界中一开始并不清楚各个状态之间的位置关系,所以它能做的就是在任何一个状态时,等概率地选择朝四个方向移动。该方法是一个基于均一概率的随机策略 (uniform random policy)。agent 在这个策略下不断产生行为,执行移动动作,从格子世界环境中获得奖励(大多是 −1 代表的惩罚),并到达一个新的或者曾经到达过的状态。
在 agent 与环境不断的交互过程中,它逐渐明白在这个均一随机策略指导下,每一个状态的价值是不一样的,而且要经历过多次的终止状态后才能对各个状态的价值有一定的认识。agent 形成该认识的过程就是策略评估的过程。
1.2 策略迭代 (policy iteration)
策略迭代:策略在循环迭代中得到更新改善的过程。它由两个步骤组成:policy evaluation 和 policy improvement。
定义:一般的,给定一个初始策略 π ,可以得到基于该策略的价值函数 vπ,而基于该价值函数又可以得到一个贪婪策略 π′ = greedy(vπ)。然后依据新的策略 π′ 又可以得到一个新的价值函数,并由此产生新的贪婪策略,如此反复进行,价值函数和策略均得到迭代更新,并最终收敛得到最优价值函数 v∗ 和最优策略 π∗。
这里再借用上述方格世界的例子进行说明:
左图是依据均一随机策略的第二次迭代后各状态价值函数,右图是根据左图各状态的价值绘制的贪婪策略方案。我们可以看到,相比于之前的均一随机策略,新的策略可以让 agent 在靠近终止状态的几个状态中有明确的行为,而不是之前的随机行为,这说明了新策略要比原策略优秀。而这个从均一随机策略下的价值函数中产生新的更优秀的贪婪策略的过程,就是一个策略改善的过程。
贪婪策略 (greedy policy):个体在某个状态下选择的行为是其能够到达后续所有可能的状态中价值最大的那个状态。
1.3 价值迭代 (value iteration)
价值迭代:计算最优价值函数的过程。不停地迭代贝尔曼最优方程 (Bellman Optimality Equation),到了最后它就能逐渐趋向于最佳策略,这是价值迭代算法的精髓所在。
下面通过比较策略迭代和价值迭代这两种方法在解决 MDP 控制问题时的不同之处,来对价值迭代有个更深入的认识:
策略迭代分两步,首先进行策略评估,即对当前已经搜索到的策略函数进行一个估值。得到估值后再进行策略改善,即把 Q 函数算出来,然后进一步改进,并不断重复这两步直到策略收敛;
价值迭代直接利用贝尔曼最优方程进行迭代,然后去寻找最佳的价值函数,其中并没有策略函数的参与。当计算出最优价值函数后,再提取出最佳策略。
我们可以看出,价值迭代的目标也是找到一个最优策略,它通过贝尔曼最优方程从前次迭代的价值函数中计算得到当次迭代的价值函数,但是在这个反复迭代的过程中,并没有一个明确的策略参与。由于使用贝尔曼最优方程进行价值迭代时,类似采用贪婪策略去选择了最优行为对应的后续状态的价值,所以价值迭代其实等效于策略迭代中每迭代一次价值函数就更新一次策略的过程。
2. 异步动态规划 (Asynchronous Dynamic Programming)
在异步动态规划算法中,每一次迭代并不对所有状态的价值进行更新,而是依据一定的原则有选择性地更新部分状态的价值,这种算法能显著节约计算资源,并且只要所有状态能够得到持续的访问更新,那么也能确保算法收敛至最优解。
下面分别介绍比较常用的异步动态规划思想:
原位动态规划 (in-place dynamic programming):直接利用当前状态的后续状态的价值来更新当前状态的价值。
优先级动态规划 (prioritised sweeping):对每一个状态进行优先级分级,优先级越高的状态其状态价值优先得到更新。
实时动态规划 (real-time dynamic programming):直接使用个体与环境交互产生的实际经历来更新状态价值,对于那些个体实际经历过的状态进行价值更新。
总结
动态规划是一种方法,可以有效求解 MDP 的预测和控制问题,而且必须对环境是完全已知的 (Model-Based),也就是需要知道状态转移概率和对应的奖励。所以动态规划应用于 MDP 的规划问题 (planning) 而不是学习问题 (learning)。
动态规划算法可分为同步和异步这两类,在同步动态规划算法中,策略评估属于预测问题,它使用贝尔曼期望方程进行求解。策略迭代和价值迭代属于控制问题,前者使用贝尔曼期望方程进行一定次数的价值迭代更新,随后在产生的价值函数基础上采取贪婪策略从而形成新的策略,如此重复迭代不断地优化策略;而价值迭代不依赖任何策略,它使用贝尔曼最优方程直接对价值函数进行迭代更新,最终能逐渐趋向于最佳的策略。