2.5 动态规划方法(Dynamic Programming, DP)
动态规划(DP)的核心思想是:把一个复杂问题分解成一系列可复用的子问题 ,先求解子问题,再由子问题的解组合出原问题的解。DP 的关键特性在于 "记忆化":一旦某个子问题(例如某个状态的价值)被计算出来,就会被保存,后续再次用到时直接查表,避免重复计算。
在强化学习(Reinforcement Learning, RL)中,DP 方法建立在一个重要前提上:环境是已知的 MDP,也就是:
- 状态转移概率 P(s′∣s,a)P(s'|s,a)P(s′∣s,a) 已知;
- 奖励函数 r(s,a)r(s,a)r(s,a) 已知;
- 折扣因子 γ∈[0,1)\gamma \in [0,1)γ∈[0,1) 已知。
这种条件下,智能体不需要通过大量真实交互来"采样估计"环境动态,而是可以直接用模型进行推导与计算,因此 DP 属于典型的 model-based 方法。
1. MDP 与价值函数回顾(DP 在 RL 中依赖什么)
一个标准 MDP 包含:
- 状态集合 S\mathcal{S}S
- 动作集合 A\mathcal{A}A
- 转移概率 P(s′∣s,a)P(s'|s,a)P(s′∣s,a)
- 奖励函数 r(s,a)r(s,a)r(s,a)
- 折扣因子 γ\gammaγ
策略 π(a∣s)\pi(a|s)π(a∣s) 表示在状态 sss 选择动作 aaa 的概率。
1.1 状态价值函数 Vπ(s)V^{\pi}(s)Vπ(s)
状态价值函数表示:在状态 sss 出发并遵循策略 π\piπ,未来累计折扣回报的期望:
Vπ(s)=Eπ[∑t=0∞γtRt∣S0=s] V^{\pi}(s) = \mathbb{E}{\pi}\left[\sum{t=0}^{\infty} \gamma^t R_t \mid S_0=s\right] Vπ(s)=Eπ[t=0∑∞γtRt∣S0=s]
在 MDP 已知的情况下,它满足 贝尔曼期望方程(Bellman Expectation Equation):
Vπ(s)=∑a∈Aπ(a∣s)(r(s,a)+γ∑s′∈SP(s′∣s,a) Vπ(s′)) V^{\pi}(s) \mathrm{}= \sum_{a\in\mathcal{A}} \pi(a|s) \left( r(s,a) + \gamma \sum_{s'\in\mathcal{S}} P(s'|s,a)\, V^{\pi}(s') \right) Vπ(s)=a∈A∑π(a∣s)(r(s,a)+γs′∈S∑P(s′∣s,a)Vπ(s′))
这个方程揭示了 DP 的"子问题结构":
- 当前状态 sss 的价值由"下一步可能到达的状态 s′s's′ 的价值"决定;
- 这天然符合"从子问题递推到原问题"的思路。
1.2 动作价值函数 Qπ(s,a)Q^{\pi}(s,a)Qπ(s,a)
动作价值函数表示:在状态 sss 先执行动作 aaa,随后遵循策略 π\piπ 的期望回报:
Qπ(s,a)=r(s,a)+γ∑s′∈SP(s′∣s,a) Vπ(s′) Q^{\pi}(s,a) \mathrm{}= r(s,a) + \gamma \sum_{s'\in\mathcal{S}} P(s'|s,a)\, V^{\pi}(s') Qπ(s,a)=r(s,a)+γs′∈S∑P(s′∣s,a)Vπ(s′)
2. DP 在强化学习中的两大经典算法
基于 DP 的 RL 算法主要有两类:
- 策略迭代(Policy Iteration)
- 价值迭代(Value Iteration)
它们都围绕"贝尔曼方程"进行,但更新方式不同:
- 策略迭代:交替进行 策略评估 与 策略提升;
- 价值迭代:把两步合并为一步,直接逼近最优价值函数。
3. 策略迭代(Policy Iteration)
策略迭代的核心流程是:不断重复以下两步,直到策略不再改变:
π0→策略评估Vπ0→策略提升π1→策略评估Vπ1→策略提升⋯→策略提升π∗ \pi^{0} \xrightarrow{\text{策略评估}} V^{\pi^{0}} \xrightarrow{\text{策略提升}} \pi^{1} \xrightarrow{\text{策略评估}} V^{\pi^{1}} \xrightarrow{\text{策略提升}} \cdots \xrightarrow{\text{策略提升}} \pi^{*} π0策略评估 Vπ0策略提升 π1策略评估 Vπ1策略提升 ⋯策略提升 π∗
其中 π∗\pi^*π∗ 是最优策略。
3.1 策略评估(Policy Evaluation)
目标 :在策略 π\piπ 固定时,计算对应的状态价值函数 Vπ(s)V^{\pi}(s)Vπ(s)。
由于直接求解贝尔曼期望方程相当于解一个线性方程组,DP 中常用迭代更新(Iterative Policy Evaluation)来逼近其解:
Vk+1(s)=∑a∈Aπ(a∣s)(r(s,a)+γ∑s′∈SP(s′∣s,a) Vk(s′)) V^{k+1}(s) \mathrm{}= \sum_{a\in\mathcal{A}} \pi(a|s) \left( r(s,a) + \gamma \sum_{s'\in\mathcal{S}} P(s'|s,a)\, V^{k}(s') \right) Vk+1(s)=a∈A∑π(a∣s)(r(s,a)+γs′∈S∑P(s′∣s,a)Vk(s′))
- kkk 是迭代轮数;
- 初始 V0(s)V^0(s)V0(s) 可任意设定(例如全 0);
- 在 γ<1\gamma<1γ<1 且 MDP 有限的条件下,VkV^kVk 会收敛到 VπV^{\pi}Vπ;
- 实际停止条件常用:
- 当所有状态的更新变化都足够小,停止策略评估,例如
maxs∈S∣Vk+1(s)−Vk(s)∣<ϵ \max_{s\in\mathcal{S}} |V^{k+1}(s)-V^{k}(s)| < \epsilon s∈Smax∣Vk+1(s)−Vk(s)∣<ϵ
- 当所有状态的更新变化都足够小,停止策略评估,例如
为什么这个迭代是"动态规划"?
因为每次更新 Vk+1(s)V^{k+1}(s)Vk+1(s) 时,你需要用到"子问题" Vk(s′)V^k(s')Vk(s′):
- 先用上一轮的"下一状态价值" Vk(s′)V^k(s')Vk(s′);
- 得到当前状态的新价值 Vk+1(s)V^{k+1}(s)Vk+1(s);
- 并把结果存下来,下一轮继续复用。
3.2 策略提升(Policy Improvement)
目标 :在已知 Vπ(s)V^{\pi}(s)Vπ(s) 的情况下,构造一个更好的策略 π′\pi'π′。
从动作价值函数关系出发:
Qπ(s,a)=r(s,a)+γ∑s′∈SP(s′∣s,a) Vπ(s′) Q^{\pi}(s,a) \mathrm{}= r(s,a) + \gamma \sum_{s'\in\mathcal{S}} P(s'|s,a)\, V^{\pi}(s') Qπ(s,a)=r(s,a)+γs′∈S∑P(s′∣s,a)Vπ(s′)
在每个状态上选择使 Qπ(s,a)Q^{\pi}(s,a)Qπ(s,a) 最大的动作,就得到一个贪心改进策略:
π′(s)=argmaxa∈AQπ(s,a)=argmaxa∈A{r(s,a)+γ∑s′∈SP(s′∣s,a) Vπ(s′)} \pi'(s) = \arg\max_{a\in\mathcal{A}} Q^{\pi}(s,a) \mathrm{}= \arg\max_{a\in\mathcal{A}} \left\{ r(s,a) + \gamma \sum_{s'\in\mathcal{S}} P(s'|s,a)\, V^{\pi}(s') \right\} π′(s)=arga∈AmaxQπ(s,a)=arga∈Amax{r(s,a)+γs′∈S∑P(s′∣s,a)Vπ(s′)}
直觉上:
- 策略评估告诉你"如果继续沿着当前策略走,长期收益如何";
- 策略提升则说"既然我知道未来长期收益的形状,那我在每一步就应该选更划算的动作"。
3.3 策略迭代为什么能收敛到最优策略?
关键原因是"策略提升定理"(Policy Improvement Theorem)的直觉版本:
如果对所有状态 sss,新策略在该状态选择的动作满足
Qπ(s,π′(s))≥Vπ(s) Q^{\pi}(s,\pi'(s)) \ge V^{\pi}(s) Qπ(s,π′(s))≥Vπ(s)
则新策略 π′\pi'π′ 不会比旧策略更差,并且通常会更好。
在有限状态与有限动作的 MDP 中,策略集合是有限的。策略迭代每轮要么:
- 改进策略(使其严格更好),要么
- 策略不再改变(达到最优并停止)
因此一定会在有限轮内收敛到某个最优策略 π∗\pi^*π∗。
4. 策略迭代的直观案例(网格迷宫风格)
考虑一个简化"迷宫":
- 若在某状态走向终点更近,短期奖励可能为 −1-1−1(走一步耗费),终点奖励为 000;
- 已知每个动作会把你带到哪个下一状态(确定性转移);
- 目标是尽快到达终点(即最大化累积回报,等价于最小步数)。
那么:
- 随机初始化策略:每个格子随便选一个方向走。
- 策略评估 :在这个固定策略下,计算每个格子的 Vπ(s)V^{\pi}(s)Vπ(s):
- 离终点越近的格子,价值越高(因为负步数少)。
- 策略提升 :在每个格子,比较"向上/向下/向左/向右"四个动作的
r(s,a)+γVπ(s′) r(s,a) + \gamma V^{\pi}(s') r(s,a)+γVπ(s′)
选择最大的那个方向作为新策略。 - 重复上述两步后,策略会逐步变成"沿着最短路径走向终点"。
这个例子体现了 DP 的本质:你不需要真实走迷宫很多次,只要环境规则已知,就可以"用计算把最优策略推出来"。
5. 价值迭代(Value Iteration)
策略迭代的一个"成本"是:每一次策略提升之前,需要把当前策略评估到足够准确(通常要多次迭代)。价值迭代把两步合并,直接用最优贝尔曼方程更新价值函数。
5.1 最优贝尔曼方程(Bellman Optimality Equation)
最优状态价值函数 V∗(s)V^*(s)V∗(s) 满足:
V∗(s)=maxa∈A{r(s,a)+γ∑s′∈SP(s′∣s,a) V∗(s′)} V^{*}(s) \mathrm{}= \max_{a\in\mathcal{A}} \left\{ r(s,a) + \gamma\sum_{s'\in\mathcal{S}} P(s'|s,a)\,V^{*}(s') \right\} V∗(s)=a∈Amax{r(s,a)+γs′∈S∑P(s′∣s,a)V∗(s′)}
含义非常直接:
- 在状态 sss,最优策略会选择使"即时奖励 + 折扣后的未来价值期望"最大的动作。
5.2 价值迭代更新
价值迭代用下面的递推式逼近 V∗V^*V∗:
Vk+1(s)=maxa∈A{r(s,a)+γ∑s′∈SP(s′∣s,a) Vk(s′)} V^{k+1}(s) \mathrm{}= \max_{a\in\mathcal{A}} \left\{ r(s,a) + \gamma\sum_{s'\in\mathcal{S}} P(s'|s,a)\,V^{k}(s') \right\} Vk+1(s)=a∈Amax{r(s,a)+γs′∈S∑P(s′∣s,a)Vk(s′)}
- V0(s)V^0(s)V0(s) 任意初始化;
- 不断迭代直到
maxs∈S∣Vk+1(s)−Vk(s)∣<ϵ \max_{s\in\mathcal{S}} |V^{k+1}(s)-V^{k}(s)| < \epsilon s∈Smax∣Vk+1(s)−Vk(s)∣<ϵ - 收敛后,用"贪心提取"得到策略:
π(s)=argmaxa∈A{r(s,a)+γ∑s′∈SP(s′∣s,a) Vk+1(s′)} \pi(s) \mathrm{}= \arg\max_{a\in\mathcal{A}} \left\{ r(s,a) + \gamma\sum_{s'\in\mathcal{S}} P(s'|s,a)\,V^{k+1}(s') \right\} π(s)=arga∈Amax{r(s,a)+γs′∈S∑P(s′∣s,a)Vk+1(s′)}
6. 价值迭代的直观案例(为什么它更"直接")
还是用"迷宫最短路"的直觉:
- 策略迭代:先假设一个走法(策略),把这个走法下的所有格子价值算得很准,再改进走法;
- 价值迭代:不管当前策略是什么,直接在每个格子问一句:
- "从这里出发,向四个方向各走一步,哪个方向带来的未来价值最大?"
- 于是用这个最大值来更新 V(s)V(s)V(s)。
因此价值迭代的更新就像是在做"逐层回推":
- 终点价值固定;
- 离终点一步的状态很快得到高价值;
- 两步、三步......逐渐传播到全局。
7. 策略迭代 vs 价值迭代:区别与取舍
7.1 更新结构对比
-
策略迭代:
- 外层循环:策略提升(改策略)
- 内层循环:策略评估(把 VπV^{\pi}Vπ 尽量算准)
-
价值迭代:
- 单层循环:每次直接对 VVV 做一次"最优备份"(max backup),逐步逼近 V∗V^*V∗
7.2 直观理解
- 策略迭代更像:
- "给定走法 → 把这套走法的长期收益算清楚 → 再根据算清楚的结果换一套更好的走法"
- 价值迭代更像:
- "不承诺任何走法 → 每一步都做最优选择对应的价值更新 → 最后再把策略从价值里提取出来"
7.3 实践中的典型现象
- 策略迭代:
- 每次策略提升可能带来较大幅度改进;
- 但每次提升前的评估可能较贵(尤其状态很多时)。
- 价值迭代:
- 单次迭代较便宜;
- 但可能需要更多轮迭代才能让 VVV 足够接近 V∗V^*V∗。
8. DP 方法在强化学习中的局限
动态规划很强,但它的前提也很苛刻:
-
必须知道 P(s′∣s,a)P(s'|s,a)P(s′∣s,a) 与 r(s,a)r(s,a)r(s,a)
- 现实问题(机器人、推荐系统、对话、游戏等)往往很难精确建模。
-
状态空间过大时计算不可承受
- DP 需要对所有 s∈Ss\in\mathcal{S}s∈S 做全量更新;
- 如果状态是高维连续空间(图像、传感器流),DP 无法直接使用。
-
需要遍历状态集合
- DP 的经典形式需要枚举状态与动作;
- 这也是为什么后续发展出基于采样的 RL(如 MC、TD、Q-learning、Actor-Critic 等)。
9. 总结
- 动态规划的核心是"分解子问题 + 记忆化复用",在 MDP 已知时可直接计算最优策略。
- 策略迭代 通过"策略评估 + 策略提升"交替迭代收敛到 π∗\pi^*π∗:
- 策略评估用贝尔曼期望方程迭代计算 VπV^{\pi}Vπ;
- 策略提升对 Qπ(s,a)Q^{\pi}(s,a)Qπ(s,a) 贪心改进策略。
- 价值迭代 直接用最优贝尔曼方程进行 max backup,逼近 V∗V^*V∗,再从 VVV 中提取策略。
- DP 方法为后续基于采样的 RL 奠定了价值函数与贝尔曼方程的核心框架,但受限于"模型已知"和"状态空间规模"。