简介:《强化学习的数学原理》是西湖大学赵世钰教授撰写的英文专著,面向具备线性代数、概率论与优化基础的研究生及算法工程师,系统解决强化学习理论理解不深、公式推导不清、算法本质难把握等核心痛点。全书从网格世界等直观示例切入,严格推导贝尔曼方程、值迭代、策略梯度、Actor-Critic等关键方法,并在附录中严谨论证序列收敛性,兼顾数学严谨性与教学可读性。资源为单文件PDF(18.9MB),内容完整覆盖10章主体+附录,含大量图示、矩阵向量形式表达、闭式解与迭代解对比、Q&A总结等特色设计,便于精读推演与课堂讲授参考。目前已有845人学习下载,适合希望夯实RL数学根基、深入理解算法收敛性与设计逻辑的进阶学习者。
1. 强化学习的数学原理:为什么一个“不写代码”的英文讲义,反而让无数人第一次看懂贝尔曼方程的来龙去脉?
你有没有过这种体验:反复读 Sutton 的《Reinforcement Learning: An Introduction》,看到 Bellman 方程那一节,公式推得滴水不漏,可合上书——脑子里只剩下一个模糊印象:“好像是个递归式?”;再打开 PyTorch 写 DQN,调参时 loss 曲线乱跳,想查是 reward scaling 没做对、还是 target network 更新频率太低、抑或 discount factor γ 设成了 0.999 导致 value collapse,却连“为什么 γ 影响收敛速度”都讲不出数学依据?这不是你数学差,而是绝大多数资料把“贝尔曼方程”当成了一个现成结论直接抛给你,没人告诉你它从哪来、为什么非得长成那样、更没人告诉你——它本质上是一道带约束的期望方程求解问题,而那个约束,正是马尔可夫性在数学上的精确投射。
赵世钰老师这本《Mathematical Foundations of Reinforcement Learning》的颠覆性,正在于此。它不教你torch.nn.Linear怎么搭网络,也不列gym.make('CartPole-v1')的 API,整本书用纯英文、零代码、全手绘网格世界示例,硬生生把 RL 的骨架一节一节拆开:从“智能体在格子上左移右移”这个最朴素的动作出发,推导出状态转移概率 P(s′|s,a) 是如何自然浮现的;从“走三步拿到 +1 奖励”这个直觉,严格定义出 return Gₜ = Rₜ₊₁ + γRₜ₊₂ + γ²Rₜ₊₃ + …;再把“长期回报的期望值”这个想法,用条件期望 E[·|Sₜ=s] 一层层套进去,最终让 Bellman 方程 V^π(s) = Σₐ π(a|s) Σₛ′ P(s′|s,a)[R(s,a,s′) + γV^π(s′)] 不是凭空出现的公式,而是你亲手推出来的必然结果。这不是“讲清楚”,这是把黑匣子焊死的盖子拧开,让你看见里面每个齿轮怎么咬合、每根弹簧怎么蓄力。当你真正理解为什么 V^π(s) 必须等于它下一时刻所有可能动作-状态组合的加权平均(权重是策略 π 和转移概率 P),你就不会再把 value iteration 当成一个玄学迭代过程——你会意识到,它本质是在解一个不动点方程,而它的收敛性,直接由 contraction mapping 定理担保。这本书的价值,不在于它多“新”,而在于它拒绝把数学当装饰,坚持让每一个符号都有其物理意义和推导路径。它解决的不是“怎么跑通一个 RL 算法”,而是“为什么 RL 能 work”这个根本问题。
2. 贝尔曼方程:为什么它不是递归定义,而是马尔可夫性在期望空间中的唯一数学表达?
贝尔曼方程常被简化为一句“当前状态价值等于即时奖励加上后续状态价值的折扣和”,但这句大白话掩盖了它背后最锋利的数学内核:它是马尔可夫决策过程(MDP)中,状态价值函数 V^π(s) 在给定策略 π 下,必须满足的、且唯一满足的函数方程。它不是人为设计的“好用技巧”,而是 MDP 结构强加给价值函数的刚性约束。要真正吃透它,必须回到两个基石:条件期望的链式分解,以及马尔可夫性对历史信息的彻底剥离。
2.1 条件期望的链式分解:从 Gₜ 的定义出发,拆解“未来回报”的数学结构
强化学习的目标,是最大化长期累积回报 Gₜ。它的标准定义是:
G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \cdots = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1}这个无穷级数本身没有给出任何计算路径。关键一步,是引入条件期望。我们关心的不是某一次 trajectory 的 Gₜ,而是智能体在状态 s 时,遵循策略 π 所能获得的平均未来回报,即 V^π(s) = E[Gₜ | Sₜ = s]。现在,对这个期望进行链式分解:
V^\pi(s) = \mathbb{E}[G_t \mid S_t = s] = \mathbb{E}\left[ R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \cdots \mid S_t = s \right]根据期望的线性性质,可以拆开:
= \mathbb{E}[R_{t+1} \mid S_t = s] + \gamma \mathbb{E}[R_{t+2} \mid S_t = s] + \gamma^2 \mathbb{E}[R_{t+3} \mid S_t = s] + \cdots但这样拆毫无意义,因为E[R_{t+2} | S_t = s]依赖于整个历史,无法计算。此时,马尔可夫性登场——它断言:P(S_{t+1}, R_{t+1} | S_t, A_t) = P(S_{t+1}, R_{t+1} | H_t),即下一状态和奖励只取决于当前状态和动作,与之前所有状态、动作、奖励完全无关。这意味着,我们可以将E[R_{t+2} | S_t = s]这种“隔代”期望,通过引入中间变量S_{t+1}和A_{t+1}来“落地”:
\mathbb{E}[R_{t+2} \mid S_t = s] = \mathbb{E}\left[ \mathbb{E}[R_{t+2} \mid S_{t+1}, A_{t+1}] \mid S_t = s \right]而E[R_{t+2} | S_{t+1}, A_{t+1}]正是环境定义的即时奖励函数R(s', a')的期望(通常简记为R(s', a'))。同理,G_{t+1}的期望E[G_{t+1} | S_{t+1} = s']就是V^π(s')。于是,整个链条被锚定在S_{t+1}上。
2.2 马尔可夫性如何“杀死”历史依赖,强制导出贝尔曼结构
将上述思想完整代入,我们得到:
V^\pi(s) = \mathbb{E}[G_t \mid S_t = s] \\ = \mathbb{E}\left[ R_{t+1} + \gamma G_{t+1} \mid S_t = s \right] \\ = \mathbb{E}\left[ \mathbb{E}[R_{t+1} + \gamma G_{t+1} \mid S_t = s, A_t] \mid S_t = s \right] \quad \text{(先对动作取期望)} \\ = \sum_{a} \pi(a \mid s) \cdot \mathbb{E}[R_{t+1} + \gamma G_{t+1} \mid S_t = s, A_t = a] \quad \text{(策略π给出动作概率)} \\ = \sum_{a} \pi(a \mid s) \cdot \mathbb{E}\left[ \mathbb{E}[R_{t+1} + \gamma G_{t+1} \mid S_t = s, A_t = a, S_{t+1}] \mid S_t = s, A_t = a \right] \quad \text{(再对下一状态取期望)} \\ = \sum_{a} \pi(a \mid s) \sum_{s'} P(s' \mid s, a) \cdot \mathbb{E}[R_{t+1} + \gamma G_{t+1} \mid S_t = s, A_t = a, S_{t+1} = s'] \\ = \sum_{a} \pi(a \mid s) \sum_{s'} P(s' \mid s, a) \cdot \left( R(s, a, s') + \gamma \cdot \mathbb{E}[G_{t+1} \mid S_{t+1} = s'] \right) \\ = \sum_{a} \pi(a \mid s) \sum_{s'} P(s' \mid s, a) \cdot \left( R(s, a, s') + \gamma V^\pi(s') \right)这就是完整的贝尔曼期望方程(Bellman Expectation Equation)。注意,每一步等号都不是“约定俗成”,而是由概率论公理(全期望公式)和 MDP 定义(马尔可夫性、奖励/转移函数定义)严格推出的。它揭示了一个冰冷的事实:如果你承认环境是 MDP,且你的策略是确定的(或随机的),那么任何合理的状态价值函数 V^π(s),都不可能逃避这个方程。它不是一个可选的“算法”,而是一个必要条件。这也是为什么后续所有算法(Value Iteration, Policy Iteration)的核心,都是在寻找这个方程的解。
2.3 矩阵-向量形式:把“函数方程”变成“线性系统”,看清收敛的本质
当状态空间 S 是有限的(比如一个 5x5 的网格世界,共 25 个状态),我们可以将 V^π(s) 视为一个 |S| 维列向量v^π。同样,将策略 π(a|s) 和转移概率 P(s'|s,a) 组合成一个 |S|×|S| 的矩阵P^π,其元素为:
(P^\pi)_{ss'} = \sum_{a} \pi(a \mid s) P(s' \mid s, a)这个矩阵P^π 被称为策略诱导的状态转移矩阵,它描述了在策略 π 下,从任意状态 s 出发,一步之后到达状态 s' 的总概率。同时,定义一个 |S| 维向量r^π,其第 s 个元素为:
(r^\pi)_s = \sum_{a} \pi(a \mid s) \sum_{s'} P(s' \mid s, a) R(s, a, s')它代表在状态 s 下,执行策略 π 所能得到的一步期望奖励。于是,整个贝尔曼方程可以被压缩为一个极其简洁的矩阵方程:
\mathbf{v}^\pi = \mathbf{r}^\pi + \gamma \mathbf{P}^\pi \mathbf{v}^\pi移项后得到:
(\mathbf{I} - \gamma \mathbf{P}^\pi) \mathbf{v}^\pi = \mathbf{r}^\pi这是一个标准的线性方程组!只要(I - γP^π)可逆,就有唯一解v^π = (I - γP^π)^{-1} r^π。而(I - γP^π)可逆的充要条件,正是γ ∈ [0, 1)。因为P^π是一个随机矩阵(每行和为 1),其谱半径 ρ(P^π) = 1,所以ρ(γP^π) = γ < 1,从而I - γP^π必然可逆。这个推导瞬间解释了两个关键现象:第一,为什么 discount factor γ 必须小于 1?因为只有 γ<1,才能保证(I - γP^π)可逆,从而保证 V^π 存在且唯一;第二,为什么 Value Iteration 的迭代v_{k+1} = r^π + γP^π v_k会收敛?因为它正是求解线性方程组的Jacobi 迭代法,而其收敛性由ρ(γP^π) = γ < 1严格保证。这不再是“经验之谈”,而是线性代数里关于迭代法收敛性的经典结论。
2.4 常见问题与避坑:那些让你在调试时抓狂的“贝尔曼陷阱”
提示:以下问题均来自真实教学反馈和开源项目 issue,绝非纸上谈兵。
现象:在实现 Value Iteration 时,发现
v_new[s]的更新顺序(按行扫描 vs 随机打乱)导致最终策略完全不同,甚至有时 policy 会震荡。
原因:你混淆了in-place update(原地更新)和two-array update(双数组更新)。标准的 Value Iteration 理论分析基于v_{k+1}(s) = max_a Σ_s' P(s'|s,a)[R(s,a,s') + γ v_k(s')],即v_{k+1}完全由v_k计算得出。如果你在循环中v[s] = ...直接覆盖了v[s],那么当计算v[s+1]时,它用到的v[s]已经是v_{k+1}的值,而非v_k的值。这破坏了理论假设,使算法变成了 Gauss-Seidel 迭代,虽然通常更快,但收敛性证明更复杂,且在某些 pathological MDP 中可能不收敛。
解决:严格使用两个数组v_old和v_new。每次迭代开始前,v_new = copy(v_old);计算完所有s后,再整体赋值v_old = v_new。这是确保你复现的是“教科书版” Value Iteration 的铁律。现象:在 grid world 中,设置
γ = 0.999,运行 Policy Iteration,发现v^π的数值巨大(如1e6级别),且策略在边界格子上行为诡异(本该走向目标,却原地打转)。
原因:这不是 bug,而是γ接近 1 时,v^π的尺度爆炸(scale explosion)现象。由闭式解v^π = (I - γP^π)^{-1} r^π可知,当γ → 1,(I - γP^π)趋近于奇异,其逆矩阵的范数急剧增大,导致v^π数值极大。这本身没问题,但当v^π大到浮点数精度无法区分v^π(s1)和v^π(s2)时(例如两者相差1e-10,但绝对值是1e6),argmax_a Q^π(s,a)就会因舍入误差而选错动作。
解决:永远对v^π或Q^π进行reward normalization。一种简单方法是,在每次 Policy Evaluation 后,将v^π减去其最小值min(v^π),使其最小值为 0;或者除以其最大值max(|v^π|),将其缩放到[-1, 1]。这不会改变最优策略(因为argmax对平移和正缩放不变),却能极大缓解数值不稳定。现象:在推导
Q^π(s,a)的贝尔曼方程时,你写出了Q^π(s,a) = Σ_s' P(s'|s,a)[R(s,a,s') + γ Σ_a' π(a'|s') Q^π(s',a')],但发现它和书中Q^π(s,a) = E[R_{t+1} + γ Q^π(S_{t+1}, A_{t+1}) | S_t=s, A_t=a]在形式上似乎不一致,怀疑自己推错了。
原因:这是对“期望”理解的常见误区。E[Q^π(S_{t+1}, A_{t+1}) | S_t=s, A_t=a]这个条件期望,其内部的A_{t+1}并非自由变量,而是由策略 π 决定的:A_{t+1} ~ π(·|S_{t+1})。因此,这个期望必须先对A_{t+1}取平均,再对S_{t+1}取平均,即E[·] = Σ_s' P(s'|s,a) * E[· | S_{t+1}=s'] = Σ_s' P(s'|s,a) * Σ_a' π(a'|s') Q^π(s',a')。你写的公式完全正确,只是它显式展开了期望的定义,而书中的写法是紧凑的记号。二者等价,没有矛盾。
解决:养成习惯,在遇到任何带策略 π 的期望时,立刻在脑中补全Σ_a' π(a'|s')这一项。这是打通 “value-based” 和 “policy-based” 方法的思维桥梁。
3. 贝尔曼最优方程:为什么“最优”不是全局搜索,而是局部贪婪与全局一致性的精妙平衡?
如果说贝尔曼期望方程(BEE)描述了“在某个固定策略 π 下,价值函数必须长什么样”,那么贝尔曼最优方程(BOE)则回答了更根本的问题:“所有可能策略中,最好的那个策略,其价值函数又必须满足什么?” 它的出现,标志着强化学习从“评估”(Evaluation)正式迈入“改进”(Improvement)阶段。而 BOE 的核心魔力,在于它用一个看似简单的max操作,将“全局最优性”这一宏大概念,压缩进了一个与 BEE 结构几乎完全相同的局部方程里。这并非巧合,而是动态规划(Dynamic Programming)思想的巅峰体现:最优策略的局部决策,必然是其全局最优性的直接反映。
3.1 从“策略改进”到“最优性原理”:为什么max是唯一合法的选项?
考虑一个直观场景:你在状态 s,面前有三个动作 a₁, a₂, a₃。执行 a₁ 后,你预期能获得的长期价值是q₁ = 10;执行 a₂ 后是q₂ = 15;执行 a₃ 后是q₃ = 8。那么,为了最大化总回报,你“显然”应该选 a₂。这个“显然”,就是最优性原理(Principle of Optimality)的朴素表达:一个最优策略所采取的首个动作,必须是所有可能动作中,能带来最高“动作价值”Q^*(s,a)的那个。Q^*(s,a)被定义为:在所有策略中,能从状态 s、动作 a 开始所能获得的最大期望回报。因此,V^*(s)—— 即从状态 s 开始的最优价值 —— 必然等于max_a Q^*(s,a)。而Q^*(s,a)本身,又由环境动态决定:Q^*(s,a) = Σ_s' P(s'|s,a)[R(s,a,s') + γ V^*(s')]。将二者结合,就得到了 BOE:
V^*(s) = \max_{a} Q^*(s, a) = \max_{a} \sum_{s'} P(s' \mid s, a) \left[ R(s, a, s') + \gamma V^*(s') \right]这个max操作,是 BOE 与 BEE 最本质的区别。BEE 中的Σ_a π(a|s)...是一个加权平均,它反映了策略 π 的“妥协”;而 BOE 中的max_a ...则是一种“决断”,它宣告:在最优策略下,智能体绝不会在任何一个状态 s 上,对任何次优动作分配哪怕一丝一毫的概率。这正是“最优”的残酷定义:它不容忍任何局部的次优选择。
3.2 收敛性保障:为什么 BOE 的右侧是一个“收缩映射”(Contraction Mapping)?
一个方程有解,不等于你能用迭代法找到它。BOE 的伟大之处,在于它的右侧操作符T^*(称为贝尔曼最优算子)具有收缩性(Contraction)。定义T^*作用于任意向量v上:
(T^* v)(s) = \max_{a} \sum_{s'} P(s' \mid s, a) \left[ R(s, a, s') + \gamma v(s') \right]收缩性意味着:对于任意两个向量u和v,它们经过T^*映射后的“距离”,严格小于它们原来的距离。这里,“距离”采用无穷范数||u - v||_∞ = max_s |u(s) - v(s)|。其证明的关键步骤如下:
|(T^* u)(s) - (T^* v)(s)| = \left| \max_{a} \sum_{s'} P(s' \mid s, a) \left[ R(s, a, s') + \gamma u(s') \right] - \max_{a} \sum_{s'} P(s' \mid s, a) \left[ R(s, a, s') + \gamma v(s') \right] \right|利用|max f(a) - max g(a)| ≤ max |f(a) - g(a)|这一不等式(可由反证法证明),可得:
\leq \max_{a} \left| \sum_{s'} P(s' \mid s, a) \gamma (u(s') - v(s')) \right| \leq \max_{a} \sum_{s'} P(s' \mid s, a) \gamma |u(s') - v(s')| \leq \gamma \max_{s'} |u(s') - v(s')| = \gamma ||u - v||_\infty因此,||T^* u - T^* v||_∞ ≤ γ ||u - v||_∞,且γ ∈ [0,1),故T^*是一个收缩映射。根据巴拿赫不动点定理(Banach Fixed-Point Theorem),T^*在完备度量空间(这里是R^{|S|})上有且仅有一个不动点,即V^*,并且迭代v_{k+1} = T^* v_k必然以指数速率收敛到V^*。这就是 Value Iteration 算法的全部理论根基。它告诉你,v_{k+1}(s) = max_a Σ_s' P(s'|s,a)[R(s,a,s') + γ v_k(s')]这个看起来像“暴力穷举”的更新,其背后是坚实的泛函分析支撑,其收敛性不是靠运气,而是由γ < 1这个数学事实铁板钉钉地保证的。
3.3 矩阵-向量形式的 BOE:为什么它不能写成v^* = r^* + γP^* v^*?
对比 BEE 的矩阵形式(I - γP^π)v^π = r^π,你可能会尝试为 BOE 写一个类似的线性方程。但这是徒劳的。原因在于max操作的非线性。P^π是一个固定的、由策略 π 决定的线性变换矩阵;而T^*中的max_a意味着,对于每一个状态 s,我们都在从|A|个不同的线性表达式(每个对应一个动作 a)中挑选最大的那个。这使得T^*成为一个分段线性(Piecewise Linear)的非线性算子。它无法被一个单一的、固定的矩阵P^*所表示。你可以想象一个二维空间,T^*的图像不是一条直线,而是由几条线段组成的“折线”,每一段对应一个最优动作的区域。这种非线性,正是最优控制问题比策略评估问题更难的根本原因。它也解释了为什么 Policy Iteration 会比 Value Iteration 更快:PI 将问题拆解为“Policy Evaluation(线性求解)+ Policy Improvement(局部max)”,而 VI 则试图在一个非线性算子下直接迭代。前者利用了线性部分的高效求解能力,后者则直面了非线性的全部挑战。
3.4 常见问题与避坑:那些在实现最优算法时踩过的“max”深坑
现象:在实现 Q-learning 时,发现
Q(s,a)的值在训练后期剧烈震荡,甚至发散,loss 曲线呈锯齿状,无法稳定。
原因:你很可能忽略了max操作带来的高方差。Q-learning 的更新规则是Q(s,a) ← Q(s,a) + α [R + γ max_{a'} Q(s',a') - Q(s,a)]。其中max_{a'} Q(s',a')是一个有偏估计:它总是倾向于高估Q^*(s',a')的真实值,因为max操作天然会选择当前估计中最大的那个,而这个最大值很可能是由噪声或过拟合造成的。这种现象被称为maximization bias。它在离散动作空间中尤为明显,是 Q-learning 的经典缺陷。
解决:采用Double Q-learning。其核心思想是“用一个网络选动作,用另一个网络评价值”。具体来说,维护两套 Q 网络Q_A和Q_B。更新Q_A时,先用Q_B选出最优动作a* = argmax_a Q_B(s',a),再用Q_A评估该动作的价值Q_A(s',a*);反之亦然。这样,argmax和evaluation由两个独立的估计完成,有效消除了max带来的系统性偏差。现象:在 grid world 中,最优策略
π^*(s)应该是确定性的(比如在某个格子,永远向右走),但你的 Policy Iteration 算法输出的π^*(s)却是一个概率分布,例如[0.99, 0.01, 0.0, 0.0],而不是[1.0, 0.0, 0.0, 0.0]。
原因:这是浮点数精度和argmax实现方式的副产品。在 Policy Improvement 步骤中,你写了π_new(a|s) = 1 if a == argmax_a Q^π(s,a) else 0。但argmax函数在多个Q值相等(或在浮点误差范围内相等)时,可能返回第一个索引,也可能返回随机索引。更糟的是,由于Q^π是通过迭代计算得到的,其数值本身带有微小误差,可能导致Q(s,a1)和Q(s,a2)的理论值相等,但计算值相差1e-15,从而让argmax错误地选中了a2。
解决:在argmax前,加入一个稳定性阈值(epsilon threshold)。例如,先计算max_q = max_a Q(s,a),然后找出所有满足Q(s,a) >= max_q - 1e-8的动作a,再从中随机均匀选择一个。这不仅能处理浮点误差,还能在存在多个真正最优动作时,生成一个合理的随机策略,避免算法因“抖动”而卡住。现象:你试图用 BOE 的矩阵形式
(I - γP^*)v^* = r^*来求解最优价值,但发现P^*根本无法定义,因为P^*依赖于v^*(哪个动作最优,取决于v^*),而v^*又依赖于P^*,陷入死循环。
原因:这暴露了对“最优策略诱导转移矩阵”概念的根本误解。P^π是良定义的,因为策略 π 是给定的;但P^*并不存在一个独立于v^*的定义。最优策略π^*本身就是一个函数π^*(s) = argmax_a Q^*(s,a),而Q^*又依赖于V^*。因此,P^*是V^*的一个隐函数,无法预先写出。任何试图绕过max操作、强行线性化的努力,都会失败。
解决:接受非线性的现实。要么使用 Value Iteration,老老实实做max迭代;要么使用 Policy Iteration,将“找max”(Policy Improvement)和“解线性方程”(Policy Evaluation)分开。这是动态规划的智慧,不是妥协。
4. 值迭代与策略迭代:为什么一个“慢”算法,反而比“快”算法更能暴露你对收敛性的无知?
Value Iteration(VI)和 Policy Iteration(PI)是求解 MDP 的两大经典动态规划(DP)算法。初学者常被一个表象迷惑:PI 通常只需几次迭代就能收敛,而 VI 可能需要上百次。于是,PI 被冠以“高效”之名,VI 则被视作“笨拙”的备选。这种看法,恰恰掩盖了二者最深刻的差异:PI 的“快”,是以 Policy Evaluation(PE)步骤的潜在高成本为代价的;而 VI 的“慢”,却因其每一步都清晰、可验证,成为检验你是否真正理解“收敛”本质的试金石。当你能亲手推导出 PI 中 PE 的迭代次数如何影响整体收敛性,或者能画出 VI 中||v_k - v^*||_∞随 k 指数衰减的曲线,你才算真正跨过了 RL 的第一道门槛。
4.1 Value Iteration:一次迭代,一次对“最优性”的逼近
VI 的算法骨架异常简洁:
- 初始化
v_0(s)为任意值(通常为 0)。 - 重复直到收敛:
v_{k+1}(s) = \max_{a} \sum_{s'} P(s' \mid s, a) \left[ R(s, a, s') + \gamma v_k(s') \right], \quad \forall s \in \mathcal{S} - 输出
v^* ≈ v_k,并提取最优策略π^*(s) = argmax_a Q^{v_k}(s,a)。
其核心,就是不断应用贝尔曼最优算子T^*。正如前文所述,T^*是一个收缩映射,因此v_k会以指数速率收敛到v^*。其误差界为:
||v_k - v^*||_\infty \leq \frac{\gamma^k}{1 - \gamma} ||v_1 - v_0||_\infty这个公式是 VI 的灵魂。它告诉你,k每增加 1,误差上限就乘以γ。如果γ = 0.9,那么k=10时,误差上限是初始误差的0.9^10 ≈ 0.35;k=50时,是0.9^50 ≈ 0.005。这就是“指数收敛”的力量。然而,这个漂亮的理论界,有一个致命的前提:你必须精确地计算出v_{k+1}(s)的每一个值。在现实中,P(s'|s,a)和R(s,a,s')往往是未知的(model-free 场景),或者状态空间巨大(continuous state),无法进行精确的求和。此时,VI 的“精确迭代”就变成了一个不可达的理想。它的价值,不在于工程实现,而在于提供了一个黄金标尺:任何 model-free 算法(如 Q-learning)的性能,都应该与这个标尺下的v_k进行比较,以衡量其“逼近最优”的效率。
4.2 Policy Iteration:两次迭代,一次对“评估-改进”循环的完整演绎
PI 的流程则更为“工程化”:
- 初始化一个任意策略
π_0。 - 重复直到策略稳定:
- Policy Evaluation (PE):求解
v^{π_i},即解v^{π_i} = r^{π_i} + γ P^{π_i} v^{π_i}。- 精确解法:直接求逆
v^{π_i} = (I - γ P^{π_i})^{-1} r^{π_i}。 - 迭代解法:
v_{j+1} = r^{π_i} + γ P^{π_i} v_j,直到||v_{j+1} - v_j|| < ε。
- 精确解法:直接求逆
- Policy Improvement (PI):对每个
s,令π_{i+1}(s) = argmax_a Q^{π_i}(s,a)。
- Policy Evaluation (PE):求解
PI 的魅力在于其二次收敛性(quadratic convergence)的潜力。理论上,如果 PE 步骤能精确求解v^{π_i},那么 PI 的策略序列π_0, π_1, π_2, ...会在有限步内(最多|A|^{|S|}步)达到最优策略π^*。这是因为每一次 Policy Improvement,都严格地、至少在一个状态上,提升了策略的价值(v^{π_{i+1}}(s) ≥ v^{π_i}(s),且至少存在一个s使得不等式严格成立)。这是一个单调上升的过程,而策略总数是有限的,故必终止。
4.3 截断策略迭代:在“精确”与“实用”之间,寻找那个恰到好处的平衡点
然而,“精确求解v^{π_i}”在实践中往往是奢侈的。求逆一个 `|S|×|S
本文还有配套的精品资源,点击获取