简介《强化学习的数学原理》是西湖大学赵世钰教授撰写的英文专著面向具备线性代数、概率论与优化基础的研究生及算法工程师系统解决强化学习理论理解不深、公式推导不清、算法本质难把握等核心痛点。全书从网格世界等直观示例切入严格推导贝尔曼方程、值迭代、策略梯度、Actor-Critic等关键方法并在附录中严谨论证序列收敛性兼顾数学严谨性与教学可读性。资源为单文件PDF18.9MB内容完整覆盖10章主体附录含大量图示、矩阵向量形式表达、闭式与迭代解法对比及QA环节便于精读推演与课后自查。目前已有845人学习下载适合希望夯实RL数学根基、深入理解算法收敛性与设计逻辑的进阶学习者。1. 强化学习的数学原理不是“调参玄学”而是你手里的“决策说明书”你有没有试过教一个完全没接触过编程的朋友写个“自动走迷宫”的小程序他可能很快能画出格子、标出起点终点但一问“那它怎么知道该往左还是往右走”他就卡住了——不是不会写 if 语句而是根本没想清楚“知道”这件事到底靠什么建立《强化学习的数学原理》这本书就是专门来回答这个“靠什么”的。它不教你用哪个库、跑哪个开源项目、调哪三个超参数让准确率涨 0.3%它从第一页开始就带着你拆解当一个智能体比如迷宫里的小机器人在环境中一步步试探、犯错、拿奖励、记教训时背后支撑它“越试越聪明”的那套逻辑到底是怎么被写成数学语言的它讲的不是“黑匣子怎么输出结果”而是“黑匣子内部的齿轮怎么咬合”。比如为什么我们非得用“折扣回报”而不是简单加总所有奖励贝尔曼方程那个看着像绕口令的等式其实是在说一句大白话“一个状态的好坏等于它立刻拿到的奖励加上它下一步最可能去的那个状态的好坏打个折”——而这本书会带你亲手推一遍这句话怎么变成公式、又怎么变成可计算的数字。它适合谁✅ 完全没听过“MDP”“策略梯度”“TD误差”的零基础同学✅ 跟着教程跑通了 DQN 小游戏但看到论文里一行偏导数就头皮发紧的实践者✅ 学过概率论和线性代数但不确定这些知识怎么“派上用场”的本科生/转行者。它不要求你会写 PyTorch但要求你愿意拿起笔在草稿纸上把一个 3×3 网格世界的状态转移概率列成矩阵它不回避数学符号但每个符号出现前一定先给你一个格子图、一次模拟轨迹、一个手算的小例子。这不是一本“速成手册”而是一份陪你从“我试试看”走到“我明白了”的学习地图——而这张地图的起点就藏在第一章那个最朴素的网格世界里。2. 先搞懂一个概念强化学习到底在解决什么问题强化学习不是“AI 自己学”而是“人给 AI 定规则AI 在规则里找最优解”。这个“规则”就是环境“最优解”就是策略。要真正看懂这本书得先放下“AI 很神奇”的预设回到最原始的交互现场一个智能体Agent在一个环境Environment里通过不断做动作Action观察状态State变化获得奖励Reward最终学会一套“在什么情况下该做什么”的行为逻辑。这整套闭环就是强化学习要建模的对象。2.1 从网格世界出发一个能画在纸上的“小宇宙”书里第一章开篇就扔给你一个 4×3 的网格世界图 1.1。它只有 12 个格子其中一个是起点S一个是终点G还有两个是陷阱X。智能体每次只能上下左右移动一格动作空间 A {↑, ↓, ←, →}但移动不一定成功——比如在边缘格子往墙外走就会原地不动。每走一步它得到 -1 分掉进陷阱得 -100 分到达终点得 10 分。目标用最少步数、最高总分走到 G。提示别急着想“怎么编程实现”先在纸上画出来。标出每个格子的坐标手动模拟三次从 S 出发随机选方向走记录每一步的 state、action、reward、next_state。你会发现即使规则极简路径选择也立刻变得不 trivial——有些路看似近但靠近陷阱有些路绕远却稳赚不赔。这种“当前选择影响未来收益”的张力就是强化学习存在的全部理由。这个小世界就是全书所有数学工具的“试验田”。后面每一章的公式、算法、证明都会回到这里用它解释贝尔曼方程怎么算一个格子的“价值”用它演示值迭代如何一步步更新整个网格的价值表用它对比蒙特卡洛和时间差分在采样效率上的差异。它不是玩具而是锚点——当你被一堆符号绕晕时只要回到这个 4×3 的格子一切就重新有了坐标。2.2 四个核心要素State、Action、Reward、Policy缺一不可强化学习的骨架由四个基本概念撑起。它们不是抽象术语而是对上述网格世界中真实发生事件的精准翻译State状态环境在某一刻的完整快照。在网格世界里就是一个坐标 (i,j)在下棋中是当前棋盘所有棋子的位置在自动驾驶里是车辆位置、速度、周围车距、红绿灯状态等传感器数据的组合。关键点状态必须包含所有影响未来决策的信息。如果只告诉智能体“我在第2行”却不告诉它“左边是墙”那它就无法判断←是否安全——这个“不完整”的描述就不构成合法状态。Action动作智能体能主动执行的操作。在网格世界里是四个方向在推荐系统里是“推给用户哪条视频”在机器人控制里是“关节扭矩大小”。注意动作必须是环境能响应的。你不能在网格世界里定义动作 “瞬移”因为环境没有这个接口。Reward奖励环境对动作的即时反馈。它是强化学习唯一的“老师”。-1 分告诉你“这步没用”10 分告诉你“到终点了”-100 分是严厉警告。但奖励设计是门手艺如果只给终点10中间全0智能体可能永远学不会“避开陷阱”因为它没收到任何关于“靠近陷阱很危险”的信号。书中 1.5 节专门用表格对比了不同奖励设计对学习效果的影响。Policy策略状态到动作的映射规则。可以是确定性的π(s) ↑也可以是随机的π(↑|s)0.7, π(→|s)0.3。它是智能体的“大脑”也是我们最终想优化的目标。注意策略不是固定程序而是可学习的函数。值迭代、策略梯度等所有算法本质都是在寻找一个能让长期奖励期望值最大的策略。这四个要素串起来就是一条轨迹Trajectorys₀ → a₀ → r₁ → s₁ → a₁ → r₂ → s₂ → … → sₜ。而一次从起点到终点或掉陷阱/超时的完整轨迹就是一个Episode回合。所有强化学习算法都在这条轨迹产生的数据上做文章。2.3 马尔可夫决策过程MDP给“决策”装上数学保险栓你可能会问既然状态包含了所有信息那下一个状态 s₁是不是只取决于当前状态 s₀ 和动作 a₀比如在网格世界站在 (2,2) 格子选↑下一格一定是 (1,2)跟昨天吃了什么、上一步怎么来的都没关系——这就是马尔可夫性Markov Property。MDP 就是把这种“无记忆依赖”形式化它定义了一个五元组 (S, A, P, R, γ)其中S状态集合如 {(1,1), (1,2), ..., (4,3)}A动作集合{↑, ↓, ←, →}P状态转移概率函数P(s′|s,a) 表示在 s 执行 a 后到达 s′ 的概率。在确定性网格世界里这个值要么是 0 要么是 1在有滑动风险的冰面世界里它可能是 P((2,2)|(2,1),→)0.880% 成功20% 原地打滑。R奖励函数R(s,a,s′) 表示在 s 执行 a 到达 s′ 时获得的奖励。也可简写为 R(s,a)假设奖励只与当前状态动作有关。γ折扣因子0≤γ1用来权衡“眼前利益”和“长远收益”。γ0 只看下一步γ0.99 就像一个很有耐心的投资者。提示γ 不是随便选的超参数书中 2.2 节用一个两步决策的例子直白说明如果 γ 太小如 0.1智能体宁愿拿眼前 -1 分也不愿冒险走两步去拿 10 分如果 γ 太大如 0.999它可能为了一分之差在陷阱边缘反复试探。γ 的选择本质上是在“规避风险”和“追求最优”之间划一条线。MDP 的意义是把模糊的“智能决策”转化成一个可建模、可求解、可证明的数学对象。后续所有算法——值迭代、Q-learning、策略梯度——都是在 MDP 框架下针对不同假设是否知道 P 和 R能否重置环境设计的求解器。它不是束缚而是护栏确保你在探索“怎么聪明”之前先确认“聪明”本身有清晰的定义。2.4 常见问题排查新手最容易卡在哪儿刚接触 MDP 描述时几乎所有人都会踩这几个坑我第一次手推贝尔曼方程时也翻过车现象列出状态转移概率 P(s′|s,a) 时发现某一行加起来不等于 1。原因漏掉了“原地不动”的情况。比如在 (1,1)左上角执行 ←按规则应该卡在原地但你只写了 P((1,1)|(1,1),←)0忘了补上 P((1,1)|(1,1),←)1。解决对每个 (s,a) 组合强制检查 ∑_{s′∈S} P(s′|s,a) 1。不等于 1回头重读环境规则找那个“失败后去哪”的默认分支。现象计算某个状态的期望奖励时结果是个负数但直觉上它离终点很近应该“值钱”。原因混淆了 R(s,a,s′) 和 R(s,a)。在网格世界R(s,a,s′) 只在 s′ 是终点或陷阱时非零其他时候无论你从哪来、往哪去走一步就是 -1。如果你错误地把 R(s,a,s′) 当成“到达 s′ 的奖励”就会漏掉这 -1。解决严格按定义写R(s,a,s′) -1 对所有普通转移10s′G-100s′X。然后在贝尔曼方程里它自然会出现在求和项里。现象看到“策略 π 是一个函数”就试图用 if-else 写死所有状态的动作结果代码巨长且无法泛化。原因把“策略”误解为“查表指令”而忽略了它本质是一个可参数化的函数族。π(a|s) 可以是 softmax(wᵀϕ(s))可以是神经网络输出的概率分布。查表只是最原始的实现方式。解决先用表格实现第 4 章理解逻辑再过渡到函数近似第 8 章。记住策略的终极形态是能压缩成几个参数的数学表达式不是一张铺满内存的巨表。现象读到“episode 是一次完整交互”就认为必须从起点跑到终点才算一个 episode导致在无限状态空间里卡死。原因忽略了 episode 的终止条件可以人为设定。在连续控制任务如机械臂中常设最大步数 T1000到步就截断在对话系统中用户说“再见”就是 episode 结束。解决明确你的任务中 episode 的边界是什么。书里所有网格世界例子都用“到达 G 或 X 或步数超限”三条件终止这是最安全的起点。3. 贝尔曼方程把“值多少钱”翻译成可计算的数学语言如果说 MDP 是强化学习的宪法那贝尔曼方程就是它的基本法。它不做任何新规定只是把“状态价值”这个直觉概念用数学语言严谨地“翻译”出来。很多新手觉得它绕是因为没意识到它根本不是发明新东西而是在给“常识”写定义。比如我们说“站在起点 S 的价值是 5”这句话到底意味着什么贝尔曼方程就负责把这个“5”拆解成S 这一步拿的奖励加上从 S 能去的所有地方的价值按概率加权再打个折。3.1 状态价值 Vπ(s)不是“此刻多好”而是“未来有多稳”先明确一个关键区分状态价值State ValueVπ(s)和动作价值Action ValueQπ(s,a)。前者问“如果我现在在状态 s并一直按策略 π 行动我未来能拿到多少总奖励期望值”后者问“如果我现在在状态 s先强行做动作 a之后再按策略 π 行动我能拿到多少总奖励期望值”在网格世界里Vπ(S) 告诉你从起点出发按当前策略走平均能得多少分Qπ(S,↑) 告诉你从起点先往上走一步之后再按策略走平均能得多少分。显然Qπ 包含了更细粒度的决策信息——它直接告诉你“↑ 这步值不值”。书中 2.3 节定义 Vπ(s) Eπ[Gₜ | Sₜs]其中 Gₜ 是从时刻 t 开始的折扣回报Gₜ Rₜ₊₁ γRₜ₊₂ γ²Rₜ₊₃ ...。这个定义本身很抽象但结合网格世界就立刻落地假设策略 π 规定在 S 总是↑那么 G₀ 就是 R₁第一步奖励 γ·R₂第二步奖励 γ²·R₃ ...直到到达 G 或 X。Vπ(S) 就是所有可能轨迹的 G₀ 的平均值。提示初学者常误以为 Vπ(s) 是“最优路径的回报”。错它是按当前策略 π 所有可能路径的期望回报。如果 π 是随机乱走Vπ(S) 可能是负几百如果 π 是最优策略Vπ(S) 才接近理论最大值。Vπ 是策略的“体检报告”不是“冠军证书”。3.2 贝尔曼方程一个状态的价值等于它“当下所得”加“未来所期”现在把 Vπ(s) 的定义展开。根据全期望公式我们可以把“从 s 开始的期望回报”拆成两部分当下所得在 s 执行动作 a按 π 选择立刻拿到的奖励 R(s,a,s′)未来所期到达新状态 s′ 后从 s′ 开始继续按 π 行动的期望回报即 Vπ(s′)。把这两部分用概率加权、再乘上折扣因子 γ就得到贝尔曼方程的核心形式Vπ(s) Σₐ π(a|s) · Σₛ′ P(s′|s,a) · [ R(s,a,s′) γ · Vπ(s′) ]这个公式看起来复杂但回到网格世界它就是一句大白话“起点 S 的价值 选↑的概率×[↑成功到 (1,2) 的概率×-1 γ×Vπ(1,2) ↑失败卡在 S 的概率×-1 γ×Vπ(S)]选↓的概率×[... ] ... ”它把一个全局的、似乎需要穷尽所有路径才能算的价值转化成了一个局部的、只和邻居状态有关的方程。这意味着只要我知道所有邻居 s′ 的 Vπ(s′)我就能算出 s 的 Vπ(s)。而所有邻居的 Vπ又依赖于它们的邻居……最终整个网格的价值被锁在一个相互关联的方程组里。3.3 矩阵-向量形式把 12 个方程打包成一次运算对 4×3 网格世界我们有 12 个状态对应 12 个贝尔曼方程。手工解太慢但用线性代数可以秒杀。书中 2.6 节把它写成Vπ Rπ γ · Pπ · Vπ其中Vπ 是 12×1 的列向量每个元素是 Vπ(sᵢ)Rπ 是 12×1 的列向量Rπ(i) Σₐ π(a|sᵢ) · Σₛ′ P(s′|sᵢ,a) · R(sᵢ,a,s′)即状态 sᵢ 的期望即时奖励Pπ 是 12×12 的矩阵Pπ(i,j) Σₐ π(a|sᵢ) · P(sⱼ|sᵢ,a)即从 sᵢ 按 π 行动后到达 sⱼ 的总概率。这个式子移项一下(I - γ·Pπ) · Vπ Rπ立刻变成标准线性方程组 Axb。只要矩阵 (I - γ·Pπ) 可逆γ1 时总成立就能用np.linalg.solve(A, b)一次性解出所有 Vπ(s)。这就是“闭式解”2.7.1 节——它不迭代不采样纯数学暴力破解。提示这个矩阵解法只适用于“小规模、已知模型”的场景如书中的网格世界。一旦状态空间变大比如围棋的 10¹⁷⁰ 个状态矩阵就存不下更别说求逆了。这时就必须用“迭代解”2.7.2 节从任意初始 V⁰ 开始反复代入 V^{k1}(s) Σₐ π(a|s) Σₛ′ P(s′|s,a)[R(s,a,s′)γ·Vᵏ(s′)]直到收敛。这就像用望远镜一点点校准焦距虽然慢但内存友好。3.4 从 Vπ 到 Qπ价值的“显微镜”视角Vπ(s) 告诉你“在 s 这里整体好不好”但没告诉你“具体哪一步动作最好”。Qπ(s,a) 就是这个显微镜。书中 2.8 节给出其定义Qπ(s,a) Σₛ′ P(s′|s,a) · [ R(s,a,s′) γ · Σₐ′ π(a′|s′) · Qπ(s′,a′) ]这个式子和 Vπ 的贝尔曼方程神似区别在于Vπ 对动作 a 求了期望Σₐ π(a|s)而 Qπ 把 a 固定下来只对下一状态 s′ 和后续动作 a′ 求期望。它揭示了一个关键事实Qπ(s,a) 的值不仅取决于 (s,a) 这一对还取决于 s′ 上所有可能动作的 Qπ 值的加权平均。为什么这很重要因为最优策略 π* 的定义就是让每个 s 的 Qπ*(s,a) 最大的那个 a。即π*(s) argmaxₐ Qπ*(s,a)。所以一旦我们算出了 Qπ*(s,a)最优策略就呼之欲出——不需要再设计复杂的搜索直接查表取最大值即可。第 3 章的贝尔曼最优方程BOE就是把“argmax”塞进 Qπ 的贝尔曼方程里得到Q(s,a) Σₛ′ P(s′|s,a) · [ R(s,a,s′) γ · maxₐ′ Q(s′,a′) ]**这个方程不再依赖策略 π只依赖环境本身P,R它的解 Q* 就是“上帝视角”的终极价值表。后续所有算法值迭代、Q-learning的目标就是逼近这个 Q*。3.5 常见问题排查算贝尔曼方程时哪些细节会悄悄毁掉结果贝尔曼方程是强化学习的基石但新手在手算或编码时常因几个“小数点级”的疏忽导致结果全盘崩溃现象用矩阵法解 Vπ得到的值全是 NaN 或无穷大。原因γ 设成了 1.0。此时 (I - γ·Pπ) 的行列式为 0矩阵奇异无法求逆。数学上γ1 意味着“永不打折”在有环的环境中如网格世界里可能来回走回报 Gₜ 可能发散无限循环拿 -1 分。解决γ 必须严格小于 1。书中所有例子用 γ0.9实践中0.95~0.99 是安全区间。检查代码gamma 0.99不是gamma 1。现象迭代法计算 Vπ数值震荡不收敛或者收敛到明显错误的值如所有 Vπ(s) 都是 -1000。原因忘记在每次迭代中用旧的 Vᵏ 计算新的 Vᵏ⁺¹而不是边算边覆盖。错误写法V[s] ... gamma * V[next_s]此时 V[next_s] 已被更新正确写法V_new[s] ... gamma * V_old[next_s]一轮算完再整体赋值。解决始终维护两个数组V_old和V_new。书中 2.7.2 节伪代码明确写出V_{k1}(s) ← ... V_k(s)箭头表示“读旧值写新值”。现象计算 Qπ(s,a) 时结果比 Vπ(s) 还小违反直觉因为 Qπ 应该是 Vπ 的“细化”。原因混淆了 Qπ 的定义域。Qπ(s,a) 是“先做 a再按 π”而 Vπ(s) 是“直接按 π”。如果 π(s) 恰好不是 a那么 Qπ(s,a) 可能很差比如在 Sπ 规定↑但你算 Qπ(S,←)就是往墙里撞。解决验证时只比较 Qπ(s, π(s)) 和 Vπ(s)二者应相等由定义可证。若不等检查 P 和 R 的索引是否错位。现象矩阵 Pπ 的维度不对12×12 的矩阵乘出来不是 12×1而是报错。原因Pπ 的构建逻辑错误。Pπ(i,j) 应该是“从状态 i 出发按 π 行动到达状态 j 的概率”。新手常写成 Pπ(i,j) P(sⱼ|sᵢ, aᵢ)即固定了每个 sᵢ 的动作 aᵢ但 π 是概率分布必须对所有 a 求和Pπ(i,j) Σₐ π(a|sᵢ) · P(sⱼ|sᵢ,a)。解决用双重循环外层遍历 sᵢ内层遍历所有 a累加 π(a|sᵢ)*P(sⱼ|sᵢ,a) 到 Pπ[i][j]。打印 Pπ 的几行手动验算每行之和是否为 14. 值迭代与策略迭代两种逼近“上帝视角”的实战路径有了贝尔曼方程我们知道“最优价值 Q* 应该满足什么”但怎么找到它值迭代Value Iteration和策略迭代Policy Iteration就是两条经典路径。它们不是竞争关系而是同一目标下的两种工程策略值迭代像一个谨慎的勘探者一步步逼近 Q*策略迭代像一个果敢的建筑师先搭个粗糙框架策略再精雕细琢改进策略。书中第 4 章用网格世界全程演示你会发现它们最终抵达的是同一个山顶只是脚印不同。4.1 值迭代用“最大值”代替“期望值”直接攻向 Q*值迭代的核心思想极其朴素既然最优 Q满足 Q(s,a) Σₛ′ P(s′|s,a)[R(s,a,s′)γ·maxₐ′ Q*(s′,a′)]那我就用当前最好的 Qᵏ 来估计右边的 maxₐ′ Q*(s′,a′)然后更新 Qᵏ⁺¹**。伪代码4.1.1 节就三行Initialize Q⁰(s,a) arbitrarily Repeat until convergence: For each s,a: Q^{k1}(s,a) ← Σₛ′ P(s′|s,a) [ R(s,a,s′) γ · maxₐ′ Qᵏ(s′,a′) ]注意关键点右边用的是maxₐ′ Qᵏ(s′,a′)不是Σₐ′ π(a′|s′) Qᵏ(s′,a′)。这意味着值迭代完全不依赖任何策略 π它直接在价值空间里“爬山”每一步都贪婪地朝当前能看到的最高点max迈进。这带来两个好处1无需初始化策略2更新方向永远指向最优不会陷入局部陷阱。在网格世界里实操初始化所有 Q⁰(s,a)0。第一轮对每个 (s,a)计算它一步能到的所有 s′ 的maxₐ′ Q⁰(s′,a′)此时全为 0所以 Q¹(s,a) ≈ R(s,a,s′)。那些能直达 G 的动作如 G 左边格子的 →Q¹ 就是 10能直达 X 的就是 -100其他都是 -1。第二轮Q² 就会考虑“-1 γ·10”这样的组合价值开始向 G 渗透……十轮之后Q¹⁰ 的数值已经清晰勾勒出通往终点的“价值梯度”。提示值迭代的收敛性由“收缩映射”保证3.3.3 节。直观理解每次更新Qᵏ 和 Q* 的差距至少缩小 γ 倍。所以误差界是 ||Qᵏ - Q*|| ≤ γᵏ / (1-γ) · ||Q⁰ - Q¹||。想快速收敛提高 γ但别到 1想稳定多迭代几轮。书中 4.1.2 节用一个 2 状态 MDP 手算 5 步误差从 10 降到 0.001非常震撼。4.2 策略迭代先“大胆假设”再“小心求证”策略迭代则换了一种思路它承认“直接算 Q* 太难”于是分两步走策略评估Policy Evaluation给定一个策略 πᵏ精确计算它的价值 Vπᵏ用贝尔曼方程迭代或矩阵法策略提升Policy Improvement基于 Vπᵏ构造一个更好的策略 πᵏ⁺¹对每个 s选能让 Qπᵏ(s,a) 最大的 a即 πᵏ⁺¹(s) argmaxₐ Σₛ′ P(s′|s,a)[R(s,a,s′)γ·Vπᵏ(s′)]。这个过程4.2.1 节保证πᵏ⁺¹ 严格优于 πᵏ除非 πᵏ 已是最优。因为对每个 s新策略选的动作其 Q 值 ≥ 旧策略所有动作的 Q 值平均即 Vπᵏ(s)所以 Vπᵏ⁺¹(s) ≥ Vπᵏ(s)且至少在一个 s 严格大于。在网格世界策略迭代往往比值迭代更快收敛。比如初始策略 π⁰ 是随机的每个 s 等概率选四个方向。策略评估后发现 S 的 Vπ⁰(S) 是 -50乱走太惨策略提升时对 S 计算 Qπ⁰(S,↑)、Qπ⁰(S,↓)… 发现 ↑ 的 Q 值最高-1 0.9×Vπ⁰(1,2) 其他于是 π¹(S)↑。几轮之后策略就稳定在最优路径上。提示策略迭代的“评估”步骤可以用迭代法慢但省内存或矩阵法快但需存矩阵。书中 4.2.2 节给出元素级实现强调V_{k1}(s) ← Σₐ πᵏ(a|s) Σₛ′ P(s′|s,a)[R(s,a,s′)γ·V_k(s′)]再次提醒用V_k不是V_{k1}。4.3 截断策略迭代工程人的“够用就好”哲学纯策略迭代有个软肋策略评估要等 Vπᵏ 完全收敛误差 ε这在大规模问题中耗时太久。截断策略迭代Truncated Policy Iteration4.3 节就是对此的务实妥协策略评估只做固定次数如 1~3 次迭代就停止并进入策略提升。它牺牲了“理论最优性”换来了“实践高效性”。这背后是深刻的工程洞察我们并不需要 Vπᵏ 的精确值只需要它足够好能让我们选出一个比 πᵏ 更好的策略 πᵏ⁺¹ 即可。实验表明4.3.1 节做 1 次评估 1 次提升效果往往接近完整策略迭代但速度提升数倍。这正是深度强化学习中“Actor-Critic”架构的雏形Critic价值网络只做粗略评估Actor策略网络据此快速更新。在代码中实现截断策略迭代只需把策略评估的 while 循环改成 for 循环for i in range(3):。书中 4.3.2 节的算法框图清晰标注了这个“截断点”。4.4 常见问题排查值迭代 vs 策略迭代选错就像选错登山路线新手常纠结“该用哪个”其实答案很简单从小规模、已知模型的问题起步用策略迭代收敛快、易调试从大规模、未知模型的问题起步用值迭代结构简单、易扩展。但实操中几个细节决定成败现象值迭代的 Q 值在后期震荡不收敛。原因γ 太大如 0.999且状态空间有环导致数值误差累积放大。或者maxₐ′ Qᵏ(s′,a′)计算时多个 a′ 的 Qᵏ 值非常接近浮点精度下取 max 不稳定。解决降低 γ0.9~0.95或在 max 前加小扰动maxₐ′ (Qᵏ(s′,a′) eps * np.random.randn())或改用“soft-max”近似 max。现象策略迭代的策略提升后Vπᵏ⁺¹(s) 反而比 Vπᵏ(s) 小。原因策略提升时计算argmaxₐ Qπᵏ(s,a)用的是近似 Vπᵏ未完全收敛而 Qπᵏ(s,a) Σₛ′ P(s′|s,a)[R(s,a,s′)γ·Vπᵏ(s′)]。如果 Vπᵏ 误差大Q 估计就错选的 a 就未必真好。解决确保策略评估足够充分误差 0.01或改用“ε-greedy 提升”以 1-ε 概率选 maxε 概率随机增加鲁棒性。现象截断策略迭代收敛到次优策略且无法改进。原因截断次数太少如只做 1 次评估Vπᵏ 太粗糙导致策略提升选错了方向。解决动态调整截断次数初期多些3~5 次后期少些1~2 次或监控 Vπᵏ 的变化率下降慢时自动增加评估轮数。现象两种算法在相同网格世界算出的最优动作不一致。原因最优策略不唯一在某些状态多个动作的 Q* 值相等如对称路径。算法随机性如 max 时遇到并列会导致不同选择。这不是 bug而是 MDP 的固有性质。解决接受多解性或在 argmax 时加入确定性规则如“并列时选编号最小的动作”。5. 从“知道模型”到“不知道模型”蒙特卡洛与时间差分的破壁之旅前面四章的算法值迭代、策略迭代都有一个隐藏前提我们知道环境的完整模型——即 P(s′|s,a) 和 R(s,a,s′) 的所有数值。这在网格世界里可行我们亲手定义了规则但在真实世界中这相当于要求 AI 先把物理定律、所有传感器噪声、人类反应模式全部写成公式——显然不现实。第 5 章蒙特卡洛和第 7 章时间差分本文还有配套的精品资源点击获取