资讯动态

强化学习数学原理精读:从网格世界到Actor-Critic的完整指南

发布时间:2026/10/17 20:35:59 来源:尧图企业网站定制
简介《强化学习的数学原理》是西湖大学赵世钰教授撰写的英文专著面向具备一定数学基础、希望从底层原理理解强化学习的学习者与研究者。全书从零出发结合大量例子循序渐进地揭示强化学习本质章节涵盖基础概念、状态值与贝尔曼方程、最优状态值与贝尔曼最优方程、值迭代与策略迭代、蒙特卡洛方法、随机近似、时间差分方法、值函数近似、策略梯度方法及演员-评论家方法附录还讨论序列收敛性。资源包为1个PDF文件约18.9MB内容完整、目录清晰便于按章节系统研读。目前已有843人学习下载。通过阅读读者可掌握网格世界、状态转移、策略、奖励、轨迹与回报、马尔可夫决策过程等核心概念理解贝尔曼方程的矩阵向量形式、闭式解与迭代解并进一步把握从状态值到动作值、从策略评估到策略优化的数学脉络为算法设计与分析打下坚实基础。1. 从翻车到通透为什么我建议你死磕这本《强化学习的数学原理》很多人学强化学习是从跑通 Stable-Baselines3 的 PPO 开始的我也不例外。但真到了要改 reward 函数、调 entropy 系数、或者解释为什么 Q-learning 在某个环境里死活不收敛的时候那种“知其然不知其所以然”的无力感就来了。如果你也卡在这个阶段手里这本《强化学习的数学原理》就是那个能帮你把地基重新打一遍的东西。它不是教你调包的速查手册而是一本从数学角度、用网格世界这一个例子贯穿始终把贝尔曼方程、值迭代、策略梯度这些概念一层层剥开的英文专著。全书十章加四个附录从基本概念一路推到 Actor-Critic适合已经会跑代码但想搞懂“为什么这么设计”的从业者也适合被数学符号劝退过、想找一本能真正读进去的教材的读者。2. 网格世界与 MDP把强化学习塞进一个 5x5 的格子里2.1 为什么选网格世界作为贯穿全书的例子这本书最聪明的地方是它没有一上来就甩公式而是先给你一个网格世界。一个 5x5 的格子智能体从起点出发目标是走到终点每走一步有奖励或惩罚。就这么个简单到可以用手算的东西把状态、动作、状态转移、策略、奖励、轨迹、回报、episode 这些概念全串起来了。我一开始觉得这太小儿科但读到后面才发现贝尔曼方程、值迭代、蒙特卡洛、时间差分所有算法在这个网格世界上都能用同一套数据跑出结果对比起来极其直观。这种“一个例子吃透全书”的写法比那些每章换一个环境的教材友好太多。2.2 状态转移与策略的数学表达在网格世界里状态就是格子的坐标动作就是上下左右。状态转移概率 p(s|s,a) 描述的是在状态 s 执行动作 a 后跳到 s 的概率。这本书没有回避数学但它的处理方式很克制先给直觉再给公式最后用网格世界的具体数字算一遍。策略 π(a|s) 是一个概率分布表示在状态 s 下选动作 a 的概率。确定性策略是它的特例。我一般会建议读者在这里停下来自己用 Python 写一个 5x5 的网格手动定义转移和奖励然后随机采样几条轨迹感受一下“策略决定轨迹分布”这件事。代码不用复杂二十行就够import numpy as np # 5x5 网格状态编号 0-24动作 0上,1下,2左,3右 n_states, n_actions 25, 4 P np.zeros((n_states, n_actions, n_states)) R np.zeros((n_states, n_actions)) for s in range(n_states): row, col divmod(s, 5) for a in range(n_actions): if a 0: nr, nc max(row-1, 0), col elif a 1: nr, nc min(row1, 4), col elif a 2: nr, nc row, max(col-1, 0) else: nr, nc row, min(col1, 4) ns nr * 5 nc P[s, a, ns] 1.0 # 确定性转移 R[s, a] -1.0 if ns ! 24 else 0.0 # 每步 -1终点 0 # 均匀随机策略 pi np.ones((n_states, n_actions)) / n_actions # 采样一条轨迹 s, traj 0, [] for _ in range(20): a np.random.choice(n_actions, ppi[s]) traj.append((s, a, R[s, a])) s np.random.choice(n_states, pP[s, a]) if s 24: break print(traj)这段代码里 P 是转移张量R 是即时奖励pi 是策略。跑一遍就能看到轨迹长什么样回报怎么累加。参数上唯一需要注意的是转移的确定性——这里为了简单设成了 1.0实际环境里可能是概率分布改 P[s,a,ns] 的值就行。2.3 回报、折扣因子与 episode 的边界回报 G_t 是从 t 时刻开始的累计折扣奖励折扣因子 γ 控制智能体有多“短视”。这本书用了一个动机示例来说明为什么需要折扣如果任务没有终止状态不折扣的回报可能发散。episode 则是一次完整的交互过程从初始状态到终止状态。网格世界里 episode 就是走到终点或撞墙。我见过不少人在实际项目里把 γ 设成 0.99 却说不清为什么这本书第二章会告诉你γ 不仅影响数值稳定性还决定了最优策略的形状——γ 越小策略越倾向于就近拿奖励。这个结论在后面的最优策略影响因素一节里还会展开。3. 贝尔曼方程与值迭代从闭式解到收敛性证明3.1 状态值与贝尔曼方程的矩阵形式状态值 v_π(s) 是从 s 出发、遵循策略 π 的期望回报。贝尔曼方程把它写成递归形式v_π(s) Σ_a π(a|s) Σ_{s,r} p(s,r|s,a)[r γ v_π(s)]。这本书的第二章花了大量篇幅推导这个方程然后给出矩阵-向量形式 v r_π γ P_π v。这个形式的好处是闭式解直接就是 v (I - γ P_π)^{-1} r_π。我第一次看到这个式子的时候有点懵后来用网格世界算了一遍才明白P_π 是策略诱导的转移矩阵r_π 是策略诱导的期望奖励整个方程就是一个线性系统。闭式解在状态数少的时候能用但状态一多矩阵求逆就不现实了所以才有迭代解。3.2 迭代解与收敛条件迭代解就是不断用贝尔曼方程更新 v_{k1} r_π γ P_π v_k直到 v 变化小于阈值。这本书证明了当 γ 1 时这个迭代是压缩映射必然收敛到唯一不动点。我一般会建议读者自己写一个循环验证一下gamma 0.9 v np.zeros(n_states) for k in range(1000): v_new np.zeros(n_states) for s in range(n_states): for a in range(n_actions): v_new[s] pi[s, a] * (R[s, a] gamma * np.dot(P[s, a], v)) if np.max(np.abs(v_new - v)) 1e-6: print(f收敛于第 {k} 次迭代) break v v_new print(v.reshape(5, 5))这里 gamma 是关键参数越接近 1 收敛越慢。阈值 1e-6 是精度控制实际项目里可以根据状态值量级调整。跑完打印出来的 5x5 矩阵就是每个格子的状态值能直观看到离终点越近值越高。3.3 从状态值到动作值动作值 q_π(s,a) 是在状态 s 执行动作 a 后再遵循 π 的期望回报。这本书从状态值自然过渡到动作值并给出贝尔曼方程在动作值下的形式。动作值的重要性在于它直接告诉你在某个状态下哪个动作更好不需要知道转移概率就能比较。这个性质在后面蒙特卡洛和时间差分方法里会被反复用到。我读到这里的时候才真正理解为什么 Q-learning 学的是 Q 而不是 V——因为 Q 可以直接指导决策而 V 还需要模型才能选动作。4. 避坑与排查读这本数学书时最容易翻车的五个地方4.1 跳过第一章直接看算法现象很多人觉得自己“懂”强化学习直接从第四章值迭代开始看结果看到矩阵形式就卡住了。原因第一章的网格世界和 MDP 定义是后面所有符号的基础跳过之后 p(s|s,a)、π(a|s)、v_π(s) 这些记号的含义全靠猜。解决老老实实把第一章的网格世界手算一遍把状态转移和回报的数值写出来后面所有公式都能对应上。4.2 把折扣因子当成纯超参数现象调参时把 γ 从 0.99 改成 0.9发现策略变得极其短视甚至不往终点走了。原因γ 在数学上决定了贝尔曼算子的压缩程度也决定了最优策略的形状。γ 太小远期奖励被压得几乎为零智能体只盯着眼前。解决先根据任务的时间尺度估算一个合理的 γ比如每步奖励量级和 episode 长度再在这个附近微调不要盲目搜。4.3 混淆 on-policy 和 off-policy 的更新目标现象用 Sarsa 的代码去实现 Q-learning结果学出来的策略和预期不符。原因Sarsa 用实际执行的动作更新Q-learning 用 max 动作更新两者的贝尔曼备份目标不同。这本书第七章专门用一节讲 off-policy vs on-policy读的时候要对照代码看更新公式。解决在代码里把 target 的计算单独拎出来确认用的是 a 还是 argmax Q再跑网格世界验证。4.4 忽略随机近似的前提条件现象学习率设成常数前期收敛很快后期一直在最优值附近震荡。原因第六章的 Robbins-Monro 算法要求学习率满足 Σα ∞ 且 Σα² ∞常数学习率不满足第二个条件。解决用 α_k 1/k 或分段衰减实际项目里常用线性衰减到一个小常数兼顾收敛速度和稳定性。4.5 值函数近似时直接套用表格方法的直觉现象用神经网络近似 Q 值后发现训练极不稳定甚至发散。原因第八章会讲函数近似引入了泛化误差表格方法里的收敛保证不再成立。解决先在小网格上用线性近似跑通确认目标函数和更新公式没问题再换神经网络同时加上目标网络和经验回放。5. 从蒙特卡洛到 Actor-Critic一条不用模型也能走通的路5.1 蒙特卡洛方法的无模型本质第五章的蒙特卡洛方法是我认为全书最“解渴”的一章。它从策略迭代出发把其中需要模型的部分计算期望替换成采样平均从而得到无模型算法。MC Basic 是最简单的版本直接用完整 episode 的回报估计动作值然后做策略改进。这本书用网格世界展示了 MC Basic 如何一步步逼近最优策略但同时也指出它的样本效率极低。MC Exploring Starts 和 MC ε-Greedy 分别从“更高效利用样本”和“去掉探索起点假设”两个方向改进。我读这一章的时候最大的收获是无模型不是魔法它只是把期望换成了样本均值代价是方差。5.2 时间差分与自举第七章的时间差分方法把蒙特卡洛的采样和动态规划的自举结合起来了。TD 用 r γ v(s) 作为目标而不是等 episode 结束再用完整回报。这本书详细分析了 TD 的收敛性并给出了 Sarsa、n-step Sarsa、Q-learning 的统一视角。我一般会建议读者在这里对比三个算法的更新公式Sarsa 用实际动作Q-learning 用 max 动作n-step Sarsa 介于两者之间。在网格世界上跑一遍观察 Q 值的变化轨迹比看十遍公式都管用。5.3 策略梯度与 Actor-Critic 的衔接第九章的策略梯度方法把策略参数化直接对目标函数求梯度。这本书从度量定义出发推导了折扣和未折扣情况下的梯度然后给出 REINFORCE 算法。第十章在此基础上引入值函数作为基线得到 Actor-Critic。A2C、off-policy actor-critic、确定性策略梯度这些在实际项目里常见的算法在这本书里都有清晰的数学推导。我读到这里才真正理解为什么 A2C 里 advantage 要用 Q - V而不是直接用 Q——因为基线不变性保证了梯度期望不变但方差更小。5.4 附录的收敛性证明怎么读附录 C 的序列收敛性对理解随机近似和时间差分的收敛至关重要。这本书把确定性序列和随机序列的收敛分开讲Dvoretzky 定理和 Robbins-Monro 定理的证明都在这里。我一开始跳过附录直接看正文结果第七章的收敛分析看得云里雾里。后来回头补了附录 C才发现正文里很多“可以证明”的地方证明过程都在附录里。建议读第七章之前先把附录 C 的前两节过一遍不需要完全吃透但至少知道随机序列收敛的条件长什么样。6. 把这本书用起来我的三遍阅读法和一个验证习惯这本书我读了三遍每一遍的方法都不一样。第一遍是通读不纠结证明重点看每章的动机示例和网格世界的结果把十章的逻辑链串起来基本概念 → 贝尔曼方程 → 最优贝尔曼方程 → 值迭代/策略迭代 → 蒙特卡洛 → 随机近似 → 时间差分 → 值函数近似 → 策略梯度 → Actor-Critic。第二遍是动手每读一个算法就在网格世界上用 Python 实现一遍不调库纯手写。第三遍是补数学把附录 C 和每章灰色框里的证明挑出来看重点搞懂压缩映射、随机逼近、梯度推导这三块。我一般会建议读者在读完第四章之后自己做一个对比实验用值迭代、策略迭代、截断策略迭代三种方法解同一个网格世界记录收敛所需的迭代次数和最终策略。这个实验能让你直观感受到三种算法的差异——值迭代每轮只更新一次值函数策略迭代每轮要把值函数算到收敛截断策略迭代则在两者之间取一个截断步数。参数上唯一要调的是截断步数设成 1 就退化成值迭代设成无穷大就是策略迭代。还有一个习惯我坚持了很久每学完一个算法就把它和前面学过的算法放在同一个网格世界上跑用同一套初始值和参数对比 Q 值或策略的差异。比如学完 Q-learning 之后把它和 Sarsa 放在一起跑观察 on-policy 和 off-policy 在探索策略不同时的表现差异。这种对比比单独看公式有效得多因为差异会直接体现在数值上。从那以后我每次读新的强化学习算法都强制自己先在网格世界上手写一遍再去看库里的实现。这个习惯帮我避开了很多“看起来懂了但一写就错”的坑。希望这本《强化学习的数学原理》也能帮你把地基打牢后面不管换什么算法、什么框架都能一眼看穿它的数学骨架。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑