ESC
输入关键词搜索文章
目录

动态规划方法

模块 02 · 有模型方法:策略迭代与价值迭代
已知环境模型时,无需试错即可求解最优策略
前提:什么是有模型方法?

在强化学习中,有模型方法的核心是已知完整的环境模型:

  1. 状态转移概率 $P(s'|s,a)$:在状态 $s$ 执行动作 $a$,转移到 $s'$ 的概率
  2. 奖励函数 $R(s,a)$:执行动作后获得的即时奖励

因为已知这两个要素,智能体无需在真实环境中试错,而是直接在内部通过数学推演计算出最优策略。这种"已知模型 + 动态推演"的范式就是动态规划(Dynamic Programming, DP)。

表格型方法:动态规划使用查找表精确记录每个状态 $V(s)$ 或状态-动作对 $Q(s,a)$ 的价值。精确度高,但只适用于状态空间有限且离散的问题。当状态空间爆炸(如围棋 $10^{170}$),表格法无法承受,需要深度学习来近似。
Section 01
策略迭代(Policy Iteration)

策略迭代包含两个交替进行的步骤:

策略迭代的两步循环

策略评估(Policy Evaluation):给定当前策略 $\pi$,计算每个状态的价值函数 $V_\pi$

策略改进(Policy Improvement):基于 $V_\pi$,在每个状态贪心地选择价值最大的动作,生成新策略 $\pi'$

$$\pi \xrightarrow{\text{评估}} V_\pi \xrightarrow{\text{改进}} \pi' \xrightarrow{\text{评估}} V_{\pi'} \cdots$$

直到 $\pi$ 不再变化,就得到了最优策略 $\pi^*$

策略评估的迭代公式

对每个状态 $s$,反复应用贝尔曼期望备份:

$$V_{k+1}(s) = \sum_a \pi(a|s) \sum_{s', r} P(s', r|s,a) \bigl[r + \gamma V_k(s')\bigr]$$

从任意初始值 $V_0$ 开始,每次迭代都将估值向真实价值推进一步。

策略改进

评估出 $V_\pi$ 后,对每个状态选使期望价值最大的动作:

$$\pi'(s) = \arg\max_a \sum_{s'} P(s'|s,a)\bigl[R(s,a,s') + \gamma V_\pi(s')\bigr]$$

为什么迭代能收敛?

收敛性的数学基础是巴拿赫压缩映射定理

  • 贝尔曼算子 $T_\pi$ 是一个 $\gamma$-压缩映射:$\|T_\pi V - T_\pi V'\|_\infty \leq \gamma \|V - V'\|_\infty$
  • 每次迭代,估计值与真实值之间的最大误差乘以 $\gamma$(严格变小)
  • 在完备度量空间中,压缩映射必然有唯一不动点
  • 因此 $V_0, V_1, V_2, \ldots$ 以指数级速度收敛到 $V_\pi$
Worked Example 01
例题:4×4 网格世界的策略迭代

环境设定:4×4 网格,16 个状态(标号 0-15),状态 0 和 15 为终止状态。

属性
状态空间16 个格子(0-15),0 和 15 是终止状态
动作空间4 个方向:上、右、下、左
奖励每步 $-1$(鼓励尽快到达终点)
转移确定性(撞墙则原地不动)
折扣因子$\gamma = 1$(有限任务)

初始策略:均匀随机策略,$\pi(a|s) = 0.25$(每个方向等概率)。

第一轮策略评估($k=0 \to k=1$

初始 $V_0(s) = 0$ 对所有 $s$。现在计算 $V_1$

以状态 1(第 1 行第 2 列)为例:

  • 上 → 状态 0(终止),$V(0) = 0$,奖励 $= -1$
  • 右 → 状态 2,$V(2) = 0$,奖励 $= -1$
  • 下 → 状态 5,$V(5) = 0$,奖励 $= -1$
  • 左 → 状态 0(终止,因为撞到边界后绕到终止态)……不对,左是状态 0 吗?让我重新核实。

实际上,网格布局如下(标号):0 在左上角,15 在右下角。

0(终)123
4567
891011
12131415(终)

对状态 1:

  • 上 → 状态 0(终止),$V_0(0) = 0$,得到 $-1 + 1 \times 0 = -1$
  • 右 → 状态 2,$V_0(2) = 0$,得到 $-1 + 0 = -1$
  • 下 → 状态 5,$V_0(5) = 0$,得到 $-1 + 0 = -1$
  • 左 → 状态 0(左出界了吗?不,状态 1 向左到状态 0),得到 $-1 + 0 = -1$
$$V_1(1) = 0.25 \times (-1) + 0.25 \times (-1) + 0.25 \times (-1) + 0.25 \times (-1) = -1.0$$

类似地,所有非终止状态的 $V_1 = -1.0$

第二轮策略评估($k=1 \to k=2$

以状态 1 为例:

  • 上 → 状态 0(终止),$V(0) = 0$,得 $-1 + 0 = -1$
  • 右 → 状态 2,$V_1(2) = -1$,得 $-1 + (-1) = -2$
  • 下 → 状态 5,$V_1(5) = -1$,得 $-1 + (-1) = -2$
  • 左 → 状态 0(终止),$V(0) = 0$,得 $-1 + 0 = -1$
$$V_2(1) = 0.25 \times (-1) + 0.25 \times (-2) + 0.25 \times (-2) + 0.25 \times (-1) = -1.5$$

边界状态(靠近终止态的)会更快收敛到更高的值,因为它们有更多机会走到终止态。

继续迭代直到收敛(约 50-100 步后 $\Delta$ 很小),然后进行策略改进:对每个状态,选使价值最大的动作。

策略改进结果

经过几轮"评估→改进"循环后,策略会稳定在最优策略上。例如,状态 1 的最优动作是"上"(直接走向终止态 0),状态 14 的最优动作是"右"(走向终止态 15)。

实际效率:在这个 4×4 网格中,策略迭代通常 3-4 轮(每轮评估 + 改进)就能收敛到最优策略。每轮评估内部大约需要几十次迭代才能使 $V$ 充分收敛。整体计算量虽大,但保证收敛。
Section 02
价值迭代(Value Iteration)

策略迭代需要"评估到完全收敛再改进",效率不高。价值迭代的核心洞察:不需要等策略评估完全收敛,每一步同时完成评估和改进

核心公式:贝尔曼最优方程

$$V_{k+1}(s) = \max_a \sum_{s'} P(s'|s,a)\bigl[R(s,a,s') + \gamma V_k(s')\bigr]$$

注意与策略评估的区别:这里直接用 $\max$ 选最优动作,而不是按 $\pi$ 的概率加权。因此每一步迭代都在同时做评估和改进。

算法步骤

  1. 初始化 $V_0(s) = 0$(对所有 $s$
  2. 对每个状态 $s$,用贝尔曼最优方程计算 $V_{k+1}(s)$
  3. $\max_s |V_{k+1}(s) - V_k(s)| \lt \theta$ 时停止
  4. 提取最优策略:$\pi^*(s) = \arg\max_a \sum_{s'} P(s'|s,a)[r + \gamma V^*(s')]$
Worked Example 02
例题:小型网格的价值迭代

环境:3 个状态的小型 MDP。

状态动作转移奖励
$s_A$$a_1$$s_B$(确定)$+2$
$s_A$$a_2$$s_C$(确定)$-1$
$s_B$$a_1$$s_C$(确定)$+5$
$s_B$$a_2$$s_A$(确定)$+0$
$s_C$(终止)$V = 0$

参数:$\gamma = 0.9$

价值迭代过程

初始化$V_0(s_A) = 0$$V_0(s_B) = 0$$V_0(s_C) = 0$

迭代 $k=1$

$$V_1(s_A) = \max\bigl\{2 + 0.9 \times 0,\; -1 + 0.9 \times 0\bigr\} = \max\{2, -1\} = 2$$
$$V_1(s_B) = \max\bigl\{5 + 0.9 \times 0,\; 0 + 0.9 \times 0\bigr\} = \max\{5, 0\} = 5$$

迭代 $k=2$

$$V_2(s_A) = \max\bigl\{2 + 0.9 \times 5,\; -1 + 0.9 \times 0\bigr\} = \max\{6.5, -1\} = 6.5$$
$$V_2(s_B) = \max\bigl\{5 + 0.9 \times 0,\; 0 + 0.9 \times 6.5\bigr\} = \max\{5, 5.85\} = 5.85$$

注意:$s_B$ 的最优动作从 $a_1$ 变成了 $a_2$!因为在 $k=2$ 时,回到 $s_A$$V=6.5$)比直接去 $s_C$$V=0$)更划算。

迭代 $k=3$

$$V_3(s_A) = \max\{2 + 0.9 \times 5.85,\; -1 + 0\} = \max\{7.265, -1\} = 7.265$$
$$V_3(s_B) = \max\{5 + 0,\; 0 + 0.9 \times 7.265\} = \max\{5, 6.539\} = 6.539$$

完整收敛表格

$k$$V_k(s_A)$$V_k(s_B)$$s_A$ 最优动作$s_B$ 最优动作
00.0000.000
12.0005.000$a_1$$a_1$
26.5005.850$a_1$$a_2$
37.2656.539$a_1$$a_2$
47.8857.097$a_1$$a_2$
58.3877.547$a_1$$a_2$
.........$a_1$$a_2$
$\infty$$\approx 15.3$$\approx 13.8$$a_1$$a_2$

关键观察

策略在第 2 轮就稳定了$s_A$ 始终选 $a_1$$s_B$ 从第 2 轮起选 $a_2$)。但价值函数还需要更多轮才能收敛到精确值。这说明策略往往比价值函数更早稳定。

最终最优策略:$s_A \xrightarrow{a_1} s_B \xrightarrow{a_2} s_A \xrightarrow{a_1} s_B \cdots$ 这是一个循环!每次循环获得奖励 $2 + 0 = 2$,折扣后总价值 $\frac{2}{1-0.9^2} = \frac{2}{0.19} \approx 10.5$。实际上更精确的计算需要考虑 $\gamma^2$ 因子。

策略迭代 vs 价值迭代
维度策略迭代价值迭代
核心思路评估→改进循环直接逼近 $V^*$
每步操作多次迭代求 $V_\pi$(内循环)一次 Bellman 最优备份
收敛速度外循环少(3-4轮),内循环多总迭代次数可能更多,但每步简单
中间输出每轮都给出明确的策略最后才提取策略
适用场景策略空间较小时更高效更通用,实现更简单

在实践中,价值迭代因为实现简单且不需要内循环,往往更常用。策略迭代在状态空间较小时收敛更快。

下一步

有模型方法的前提是已知 $P(s'|s,a)$$R(s,a)$。但现实中这些通常是未知的。下一节,我们来看如何在没有模型的情况下学习 → 模块 03:无模型方法

参考来源