强化学习中动态规划的效率

一、效率问题

动态规划(DP)对于非常大的问题可能不实用,但与其他解决马尔可夫决策过程(MDP)的方法相比,DP方法实际上是非常有效的。如果我们忽略一些技术细节,那么DP方法(在最坏的情况下)找到最优策略所需的时间是状态和动作数量的多项式。如果我们用n和m表示状态和动作的数量,这意味着DP方法所需进行的计算操作数量小于n和m的多项式函数。尽管确定性策略的总数是mn,但DP方法保证在多项式时间内找到最优策略。相比之下,直接搜索策略空间需要穷尽地检查每一种策略才能提供相同的保证,因此DP的效率要高得多。线性规划方法也可以用于解决MDP,在某些情况下,其最坏情况收敛保证优于DP方法。但是,线性规划方法在状态数量比DP方法少很多的情况下变得不切实际(大约少100倍)。对于最大的问题,只有DP方法是可行的。由于状态数量往往随着状态变量的数量呈指数增长,人们有时认为DP的应用受到限制(Bellman)。大型状态集确实会带来困难,但这些困难是问题的固有困难,而不是DP作为解决方案的困难。事实上,与直接搜索和线性规划等竞争方法相比,DP更适合处理大型状态空间。

实际上,动态规划方法可以在今天的计算机上用来解决数百万个状态的多尔弗雷-索洛莫问题。政策迭代和值迭代都被广泛使用,目前尚不清楚哪种方法更有效。实际上,这些方法通常比其理论最坏情况运行时间快得多,特别是如果它们以良好的初始值函数或策略开始。

对于具有大状态空间的问题,异步动态规划方法往往更受青睐。完成一次同步方法的扫描需要为每个状态进行计算和内存存储。对于某些问题,即使有这么多内存和计算也是不切实际的,但问题仍然有潜在的可解决性,因为沿着最优解轨迹只会出现相对较少的状态。异步方法和 GPI 的其他变化可以应用于这种情况,并且可能比同步方法更快地找到良好或最优的策略。

二、动态规划与广义策略迭代

通过回顾动态规划的基本概念和算法,可以看出它们与解决有限马尔可夫决策过程(MDP)有关。策略评估是指(通常)迭代计算给定策略的价值函数。策略改进是指给定该策略的价值函数来计算改进的策略。将这两种计算结合起来,我们得到了策略迭代和值迭代,这是两种最流行的DP方法。这些方法中的任何一个都可以用来可靠地计算给定完全了解MDP的有限MDP的最优策略和价值函数。经典的DP方法通过在状态集上执行完整的扫描来操作,对每个状态执行完整的回溯操作。每个回溯根据所有可能的后继状态及其发生的概率来更新一个状态的值。完整的回溯与贝尔曼方程密切相关:它们只不过是将这些方程变成赋值语句。当回溯不再导致任何价值变化时,收敛就发生了,收敛到满足相应贝尔曼方程的值。正如有四种主要价值函数(vπ,v∗,qπ和q∗)一样,也有四种相应的贝尔曼方程和四种相应的完整回溯。回溯操作的直观视图由回溯图给出。

通过将动态规划方法(DP)视为广义策略迭代(GPI),可以深入了解这些方法,事实上,几乎所有的强化学习都可以从这种视角来理解。GPI是围绕近似策略和近似值函数的两个交互过程的通用思想。一个过程将策略视为给定,并执行某种形式的策略评估,改变值函数以更接近该策略的真实值函数。另一个过程将值函数视为给定,并执行某种形式的策略改进,改变策略以使其变得更好,假设该值函数是其值函数。尽管每个过程都改变了另一个过程的基础,但它们共同寻找一个联合解决方案:一个策略和值函数,它们都不会因任何一个过程而改变,因此是最佳的。在某些情况下,GPI可以证明收敛,最明显的是我们在本章介绍的经典DP方法。在其他情况下,收敛尚未得到证明,但GPI的想法仍然改善了我们对这些方法的理解。

没有必要通过完全扫描状态集来执行DP方法。异步DP方法是就地迭代方法,可以以任意顺序(可能是随机确定的)进行状态回溯并使用过时的信息。这些方法中的许多可以视为GPI的细粒度形式。

最后,我们注意到DP方法的最后一个特殊属性。它们都是根据后继状态值的估计来更新状态值的估计。也就是说,它们根据其他估计进行更新。我们将其称为一般概念的引导(bootstrapping)。许多强化学习方法都执行引导,即使它们不需要像DP所需要的那样对环境进行完整准确的建模。下一章我们将探讨不需要模型并且不进行引导的强化学习方法。

相关推荐
青少儿编程课堂4 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
jktantan6 小时前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
Dream it possible!18 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊19 小时前
算法之双指针系列(一)
算法·leetcode
十二19 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方20 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
Pniubi20 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH21 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
Pniubi21 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
東隅已逝,桑榆非晚1 天前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法