尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

马尔科夫决策过程:动态规划与强化学习的数学基础

马尔科夫决策过程:动态规划与强化学习的数学基础 1. 项目概述从直觉到决策的数学桥梁聊到数学建模很多人会想到复杂的微分方程或者庞大的优化算法但今天我想分享一个在动态决策领域极其优雅且强大的工具——马尔科夫决策过程。我第一次接触这个概念是在一个资源调度优化的项目里当时团队面对的是一个状态瞬息万变、决策环环相扣的复杂系统传统的静态规划方法完全失灵。直到引入了马尔科夫决策过程我们才真正找到了描述和解决这类“走一步看三步”问题的数学语言。简单来说马尔科夫决策过程是研究如何在具有随机性的环境中做出一系列最优决策的数学模型。它把现实世界中的“状态”、“动作”、“奖励”和“不确定性”这几个核心要素抽象出来形成一个可以计算和优化的框架。比如一个机器人如何规划路径以最快到达目标同时避开随机出现的障碍一个电商平台如何动态定价以实现长期收益最大化或者一个玩家在游戏中如何选择行动以赢得最终胜利其背后都可能藏着马尔科夫决策过程的影子。这个模型的核心魅力在于它处理“不确定性”和“长期收益”的方式。它不假设未来是确定的而是承认每次行动都可能带来几种不同的结果各有其概率同时它追求的也不是眼前这一步的最大利益而是从当前状态出发所有未来可能获得奖励的“期望总和”的最大化。这种思想与我们做很多长期战略决策时的思考方式不谋而合。接下来我会拆解它的核心骨架分享如何从零开始构建一个马尔科夫决策过程模型并深入探讨求解过程中的关键技巧和那些容易踩坑的细节。2. MDP核心四要素拆解构建模型的基石要建立一个马尔科夫决策过程模型首先必须精准地定义四个核心要素状态集、动作集、状态转移概率和奖励函数。这四者构成了模型的全部世界观定义的好坏直接决定了模型能否真实反映问题以及最终求解的效率和效果。2.1 状态对系统环境的完整“快照”状态是对决策环境在某一时刻的完整描述。定义状态的关键原则是“马尔科夫性”即未来的状态只依赖于当前状态和当前采取的动作而与过去的历史状态无关。这意味着你定义的状态必须包含所有能影响未来发展的信息。举个例子在经典的“网格世界”问题中一个智能体在网格中移动状态可以简单地定义为智能体所在的坐标(x, y)。但在更复杂的问题中比如一个库存管理系统状态可能就需要包含当前库存量、未来几天的需求预测、供应链的当前状态等多个维度。一个常见的误区是状态定义得过于复杂包含了大量无关或冗余信息这会导致“状态空间爆炸”让问题变得无法计算。我的经验是开始时尽量用最精简的信息来描述状态只有在模型效果不佳时再考虑加入更多维度的信息。通常状态空间可以是离散的如有限个网格点也可以是连续的如一个速度值离散空间在分析和求解上通常更简单。2.2 动作决策者的可选操作动作是决策者在每个状态下可以做出的选择。动作集需要是完备的覆盖所有可能操作且互斥的。在一些问题中动作集在所有状态下是相同的如网格世界中总是可以向上、下、左、右移动而在另一些问题中可用的动作可能依赖于当前状态如库存量达到上限时就不能再执行“订购”动作。定义动作时需要平衡精细度和可行性。动作划分得太粗可能无法实现精细控制划分得太细则会急剧增加决策的复杂度。例如在机器人控制中将动作定义为“向前移动0.1米”和“向前移动0.2米”就是两个不同的动作这显然比只定义一个“向前移动”要精细但也复杂得多。通常我们需要根据问题的实际控制精度需求来定义动作的粒度。2.3 状态转移概率拥抱不确定性这是马尔科夫决策过程处理随机性的核心。状态转移概率P(s | s, a)定义了在状态s下执行动作a后系统转移到下一个状态s的概率。它量化了环境的不确定性。获取准确的状态转移概率往往是建模中最困难的一步。它可能来源于历史数据统计如果有大量的系统运行日志可以通过统计在状态s执行动作a后出现状态s的频率来估计概率。这是最理想的情况。物理或业务模型推导例如根据设备故障率的指数分布可以推导出设备从“正常”状态转移到“故障”状态的概率。仿真或领域专家估计当数据不足时可以通过高保真仿真来生成数据或者请领域专家根据经验给出估计值。这时需要特别注意估计的准确性不准确的转移概率会导致策略失效。一个实用的技巧是对于某些极其复杂或难以精确建模的转移可以将其部分不确定性“吸收”到奖励函数中。例如一个动作的成功率只有80%你可以将其建模为执行动作后有80%概率转移到“成功”状态并获得高奖励20%概率停留在原状态并获得负奖励惩罚。这等价于一个确定的转移但期望奖励降低了。2.4 奖励函数定义“好”与“坏”奖励函数R(s, a, s)给出了在状态s执行动作a并到达状态s后决策者获得的即时收益或成本。奖励函数是优化目标的直接体现它告诉模型什么是我们想要的。设计奖励函数是一门艺术常见的陷阱包括奖励稀疏只有在达成最终目标如游戏胜利时才给予奖励中间过程没有任何反馈。这会导致模型学习效率极低不知道哪些中间行为是好的。奖励欺骗设计不当的奖励可能导致模型找到“刷分”的漏洞做出违背设计者初衷的行为。例如一个旨在让机器人快速到达终点的奖励函数如果只奖励位移变化机器人可能会在原地来回转圈来获取奖励。奖励尺度不当不同奖励之间的数值差异过大或过小会影响优化过程的稳定性和收敛速度。一个好的实践是设计“塑形奖励”即除了最终目标的大奖励外为一些有益的中间行为设置小奖励。例如在导航问题中除了到达终点的奖励可以为每一步更接近终点给予一个小的正奖励为撞墙给予一个负奖励惩罚。这能有效引导智能体朝正确的方向学习。3. 策略与价值函数从模型到最优方案定义了马尔科夫决策过程的四要素我们只是描述清楚了问题。我们的目标是找到一个“策略”告诉我们在每一个状态下应该采取哪个动作。而评估一个策略好坏以及寻找最优策略则需要引入“价值函数”这个概念。3.1 策略从状态到动作的映射策略π(a|s)是一个函数它指定了在状态s下选择各个动作a的概率分布。确定性策略对每个状态只输出一个确定的动作概率为1而随机性策略则会以一定概率分布选择多个动作。随机性策略在某些情况下很有用例如在探索环境时或者为了应对对手而需要保持不可预测性。我们最终寻找的是一个最优策略π*它能在任何初始状态下为我们带来最大的长期累积奖励期望。3.2 状态价值函数与动作价值函数为了比较不同策略的优劣我们定义了价值函数。状态价值函数 Vπ(s)表示从状态s开始一直遵循策略π行动所能获得的期望累积回报。这里的累积回报不是简单的加法未来的奖励会打一个折扣折扣因子 γ (0 ≤ γ ≤ 1) 体现了“未来奖励不如当前奖励值钱”的普遍认知。其贝尔曼方程表示为Vπ(s) Σ_{a} π(a|s) Σ_{s} P(s|s,a) [ R(s,a,s) γ * Vπ(s) ]这个方程是理解价值迭代等算法的关键它揭示了一个状态的价值等于立即奖励加上所有可能后续状态的折扣价值的期望。动作价值函数 Qπ(s, a)也称为Q函数它表示在状态s下先执行一个特定动作a然后再遵循策略π行动所能获得的期望累积回报。Q函数在不需要知道环境模型即转移概率P的强化学习方法中至关重要。其贝尔曼方程类似Qπ(s, a) Σ_{s} P(s|s,a) [ R(s,a,s) γ * Σ_{a} π(a|s) Qπ(s, a) ]最优策略π*对应的就是最优状态价值函数V*(s)和最优动作价值函数Q*(s, a)。对于最优Q函数存在一个重要的关系V*(s) max_a Q*(s, a)。也就是说一个状态的最优价值等于在该状态下所有可选动作中最优的那个Q值。3.3 最优性原理与贝尔曼最优方程马尔科夫决策过程求解的理论基础是贝尔曼最优方程。它指出一个最优策略具有这样的性质无论初始状态和初始决策是什么剩余的决策对于由第一个决策所形成的状态必须构成一个最优策略。基于此我们可以得到贝尔曼最优方程V*(s) max_a Σ_{s} P(s|s,a) [ R(s,a,s) γ * V*(s) ]Q*(s, a) Σ_{s} P(s|s,a) [ R(s,a,s) γ * max_{a} Q*(s, a) ]这两个方程是动态规划类求解方法如值迭代、策略迭代的核心。它们表明最优价值函数必须满足这个自洽的等式一个状态或状态-动作对的最优价值等于所有可能动作或后续动作中能带来最大“立即奖励加后续状态最优价值的折扣期望”的那个值。4. 经典求解算法策略迭代与值迭代详解当我们有了完整的环境模型即已知P和R时策略迭代和值迭代是两种最经典、最可靠的求解最优策略的动态规划方法。它们都基于贝尔曼方程通过迭代更新来逼近最优解。4.1 策略迭代评估与改进的双重循环策略迭代分为两个交替进行的步骤策略评估和策略改进。它更像是一种“精雕细琢”的过程。步骤一策略评估给定一个当前策略π我们通过迭代求解贝尔曼期望方程来计算该策略下的状态价值函数Vπ。具体迭代公式为V_{k1}(s) Σ_{a} π(a|s) Σ_{s} P(s|s,a) [ R(s,a,s) γ * V_k(s) ]我们对所有状态s反复应用这个更新直到价值函数的变化小于一个很小的阈值θ此时我们认为V已经收敛到了当前策略π下的真实价值函数。实操心得策略评估的迭代过程本质上是在解一个线性方程组。在实际编程中我们通常使用“就地更新”还是“同步更新”需要留意。就地更新使用新的V(s)值立即更新同一轮迭代中后续状态的计算可能收敛更快但不保证稳定性同步更新则使用上一轮的全部V_k来计算V_{k1}更稳定。对于中小规模问题同步更新实现简单且可靠。步骤二策略改进在得到了当前策略的价值函数Vπ后我们尝试改进策略。对于每个状态s我们贪心地选择一个能最大化“期望回报”的动作从而生成一个新策略ππ(s) argmax_a Σ_{s} P(s|s,a) [ R(s,a,s) γ * Vπ(s) ]这个新策略被证明至少和旧策略一样好通常更好。迭代循环然后我们用新策略π替换旧策略π回到步骤一进行新一轮的策略评估。如此循环直到策略不再发生变化即策略改进步骤没有产生任何改变此时我们就得到了最优策略π*。策略迭代的优点是通常收敛速度很快尤其是策略改进步骤能显著提升策略质量。缺点是每一步的策略评估可能都需要很多次迭代才能收敛计算成本较高。4.2 值迭代一步到位的优化值迭代可以看作是策略迭代的一种精简和融合。它不显式地维护一个策略而是直接迭代更新最优价值函数V*的估计值。其核心迭代公式就是贝尔曼最优方程V_{k1}(s) max_a Σ_{s} P(s|s,a) [ R(s,a,s) γ * V_k(s) ]对于每个状态s我们都计算所有可能动作a带来的期望回报立即奖励加上后续状态的折扣价值然后取最大值作为该状态新的价值估计。与策略迭代的区别值迭代在每次更新中都隐式地执行了一次“策略改进”取max操作但它并没有等到价值函数完全收敛到当前策略下就进行了这次改进。你可以把它理解为一边评估一边改进而且评估只做了一次非常“粗糙”的更新。它直接朝着最优价值函数的目标迭代。收敛与策略提取重复上述更新直到价值函数的变化足够小。收敛后我们得到最优价值函数V*的近似值。此时最优策略可以通过“一步前瞻”的方式提取出来π*(s) argmax_a Σ_{s} P(s|s,a) [ R(s,a,s) γ * V*(s) ]值迭代的实现通常比策略迭代更简单代码更简洁。对于很多问题尤其是当策略评估需要很多次迭代时值迭代可能更高效。但它不一定比策略迭代快收敛速度取决于问题本身。4.3 算法选择与实现要点在实际项目中如何选择选择策略迭代的情况当状态空间不大且策略评估能快速收敛时或者当你对中间产生的策略序列也感兴趣时例如想观察策略是如何逐步改进的。选择值迭代的情况当状态空间较大一次策略评估成本很高时或者当你只关心最终的最优策略和最优价值时。通用实现框架与技巧初始化将所有状态的价值V(s)初始化为0或随机小值。迭代循环对于策略迭代内循环做策略评估更新V直至收敛外循环做策略改进更新π。对于值迭代单层循环每次对所有状态用max操作更新V。终止条件通常设定一个阈值θ如1e-6当一次迭代中所有状态的价值最大变化量max_s |V_{new}(s) - V_{old}(s)| θ时停止迭代。异步更新对于大规模问题可以使用异步动态规划即每次迭代只更新一部分状态的价值而不是全部。这能显著加快收敛速度尤其适用于某些状态更重要的场景。避坑指南折扣因子γ的选择对结果影响巨大。γ接近1意味着模型非常“有远见”重视长期回报但可能导致迭代收敛慢且对遥远未来的不确定性过于敏感。γ接近0则使模型变得“短视”只追求眼前利益。通常需要根据问题的“时间尺度”来调整。例如一个金融投资模型可能用较高的γ如0.99而一个实时游戏AI可能用较低的γ如0.9。建议通过网格搜索来调优这个参数。5. 实战建模流程与一个完整案例理论需要结合实践才能真正掌握。下面我将以一个简化的“库存管理”问题为例完整走一遍马尔科夫决策过程的建模与求解流程。这个案例麻雀虽小五脏俱全涵盖了从问题定义到策略解读的全过程。5.1 案例背景与问题定义假设你经营一家小店销售一种易腐商品比如报纸、鲜花。每天早晨你需要决定订购多少单位a的商品。每天的需求d是随机的。你的目标是最大化长期的日均利润。每单位商品进货成本为c。每单位商品售价为p(p c)。每天结束时未售出的商品因腐坏而完全损失无残值。每日需求d是一个随机变量我们假设其概率分布已知例如服从泊松分布均值为λ。库存容量有上限M。5.2 构建马尔科夫决策过程模型1. 状态集S 状态就是每天开始时的库存量s。由于容量上限为M所以S {0, 1, 2, ..., M}。这是一个离散有限状态空间。2. 动作集A(s) 动作是每天早晨的订购量a。订购后库存变为s a但不能超过容量上限M且订购量非负。所以在状态s下可选动作集为A(s) {0, 1, ..., M-s}。3. 状态转移概率P(s | s, a) 在状态s早晨库存采取动作a订购后早晨的库存变为s a。经过一天销售晚上的库存也就是第二天的初始状态s取决于需求d。s max(0, (s a) - d)由于需求d是随机的因此s也是随机的。转移概率完全由需求的概率分布决定P(s | s, a) P( d (sa) - s )当s 0。P(s0 | s, a) P( d sa )因为当需求大于等于现有库存时库存都会清空。4. 奖励函数R(s, a, s) 奖励是当天的利润。它由销售收入减去进货成本构成。销售收入售出的商品数量为min(sa, d)收入为p * min(sa, d)。进货成本c * a。 因此即时奖励利润为r p * min(sa, d) - c * a。 注意这里的d是连接(s,a)和s的随机变量。在计算期望时我们需要对所有可能的需求d进行加权平均。5.3 模型求解与策略分析假设我们设定具体参数c2,p5,M5每日需求d服从λ3的泊松分布折扣因子γ0.95。我们可以编写程序使用值迭代或策略迭代来求解。这里简述值迭代的过程初始化V(s) 0对所有s。对每个状态s(从0到5)计算Q(s, a) Σ_{d} P(d) * [ p * min(sa, d) - c*a γ * V( max(0, sa-d) ) ]其中对需求d的求和由于泊松分布理论上无限实践中可以取到一个足够大的上界如d0到20因为P(d20)已经极小。更新V(s) max_a Q(s, a)并记录下使Q最大的动作a作为当前策略π(s)。重复步骤2-3直到V值收敛。收敛后最后记录的π(s)就是近似最优策略。求解后我们可能会得到类似下面的最优策略表当前库存s最优订购量π*(s)041322314050策略解读这个策略是一种典型的(s, S)策略或“基库存策略”的变体。当库存水平较低时s0,1,2我们需要订购较多的商品以应对需求当库存水平达到一定高度后s4,5就不再订购因为腐坏风险带来的潜在损失超过了缺货风险。这个策略在库存管理中非常经典也验证了我们模型的合理性。5.4 模型扩展与思考这个基础模型可以朝多个方向扩展以贴近更复杂的现实缺货惩罚在原模型中缺货只是损失了潜在销售收入。现实中缺货可能导致客户流失可以加入固定的缺货惩罚成本。持有成本库存本身会产生仓储、资金占用成本可以按库存量加入一个负奖励成本。交货延迟订购的商品可能不是立即到达而是有L天的提前期。这需要将状态扩展为包含在途订单的向量状态空间会急剧增大。需求非平稳需求分布可能随时间如季节性变化这需要引入非平稳的马尔科夫决策过程或部分可观测马尔科夫决策过程。6. 前沿扩展与常见问题排查马尔科夫决策过程是强化学习的理论基础。当环境模型P和R未知或过于复杂时我们就进入了强化学习的领域。此外还有一些重要的扩展模型用于处理更复杂的情况。6.1 部分可观测马尔科夫决策过程在POMDP中智能体不能直接观测到真实的状态s而是接收到一个与状态相关的观测值o。例如一个机器人通过噪音传感器感知环境一个扑克玩家只能看到公共牌和自己的手牌。这更贴近许多实际问题。POMDP的求解远比马尔科夫决策过程复杂因为智能体需要维护一个“信念状态”即所有可能状态的概率分布并基于这个信念状态做决策。常用的算法包括值迭代的扩展、蒙特卡洛树搜索以及结合深度学习的各种近似方法。POMDP是当前研究的热点之一在机器人、自动驾驶、游戏AI等领域有广泛应用。6.2 与强化学习的衔接强化学习可以看作是在环境模型未知的情况下求解马尔科夫决策过程或POMDP。两者的核心概念状态、动作、奖励、策略、价值函数完全相通。基于模型的强化学习先通过学习或估计环境模型P和R然后使用动态规划方法如值迭代求解。这对应了我们前面讨论的“有模型”情况。无模型强化学习不尝试学习环境模型而是直接通过与环境的交互来评估和改进策略。这又分为两大类价值学习直接学习最优动作价值函数Q*(s,a)如Q-Learning、DQN。学到Q*后最优策略就是选择Q值最大的动作。策略学习直接参数化策略π(a|s; θ)并通过梯度上升等方法优化参数θ以最大化期望回报如REINFORCE、策略梯度算法、PPO。演员-评论家方法结合两者既有策略函数演员也有价值函数评论家如A3C、SAC。理解马尔科夫决策过程对于深入理解强化学习算法的设计动机和收敛性分析至关重要。6.3 常见问题与调试技巧在实际建模和求解马尔科夫决策过程中会遇到各种各样的问题。下面是一个常见问题排查表问题现象可能原因排查与解决思路算法不收敛价值V发散到无穷大折扣因子γ设置为1且存在正奖励的循环。检查γ是否小于1。如果问题本身是回合制且无循环如游戏通关即结束γ1可用否则必须γ1。策略振荡在两个或多个策略间来回切换价值函数评估未收敛就进行策略改进在策略迭代中或者存在多个等价的最优动作。1. 在策略迭代中降低策略评估的收敛阈值θ确保Vπ评估更精确。2. 如果存在多个等价最优动作可以引入微小的随机性如ε-greedy或任意选择一种。得到的最优策略看起来“短视”或愚蠢折扣因子γ设置过小奖励函数设计不合理忽略了长期影响。1. 适当增大γ让模型更重视未来。2. 重新审视奖励函数检查是否缺少对长期有利行为的激励或对短期行为过度奖励。状态空间太大算法运行极慢甚至内存不足遭遇“维数灾难”。1.状态聚合将相似的状态合并为一类。2.函数近似使用线性函数、神经网络等来近似价值函数或策略函数这是深度强化学习的核心。3.分层抽象将问题分解为多个子任务使用分层强化学习。模型结果与仿真或实际结果差异大状态转移概率P或奖励函数R建模不准确。1. 用历史数据或高保真仿真重新校准P和R。2. 进行敏感性分析观察模型输出对关键参数变化的敏感程度。3. 考虑使用无模型强化学习方法让智能体直接从交互中学习。策略总是选择某个固定动作缺乏探索性在确定性环境中最优策略本身就是确定性的。在探索阶段这是不希望的。这是强化学习中的“探索-利用”困境。在训练阶段应使用随机策略如ε-greedy, softmax或添加探索噪声。仅在部署时使用学到的确定性最优策略。调试心得在实现算法时务必从最简单、规模最小的验证案例开始。例如先在一个已知最优解的3x3网格世界上测试你的值迭代代码确保它能输出正确的最优路径和价值。然后再逐步应用到你的实际问题中。另外可视化是强大的调试工具将迭代过程中的价值函数或策略变化动画展示出来能帮你直观理解算法的行为及时发现异常。
返回列表