简介《强化学习的数学原理》是西湖大学赵世钰教授撰写的英文专著面向具备一定数学基础、希望从零系统理解强化学习本质的读者。全书以数学推导为主线结合大量例子循序渐进地展开涵盖基础概念、状态值与贝尔曼方程、最优状态值与贝尔曼最优方程、值迭代与策略迭代、蒙特卡洛方法、随机近似、时间差分方法、值函数近似、策略梯度方法及演员-评论家方法附录还讨论了序列收敛性。第一章借助网格世界例子讲解状态、动作、状态转移、策略、奖励、轨迹与回报并引出马尔可夫决策过程后续章节则围绕贝尔曼方程、矩阵向量形式、闭式解与迭代解、从状态值到动作值等核心内容深入剖析。资源包为1个PDF文件约18.9MB结构完整、目录清晰便于按章节检索学习。目前已有843人学习下载适合希望夯实强化学习数学基础、理解算法背后原理并用于设计与分析的读者。1. 强化学习数学原理一张从贝尔曼方程到 Actor-Critic 的知识地图很多人学强化学习卡在同一个地方代码能跑但说不清为什么能收敛。策略梯度推导里突然冒出一个基线Q-learning 里突然出现 max 操作值迭代和策略迭代到底差在哪——这些如果只靠调库永远是一笔糊涂账。这份《强化学习的数学原理》笔记梳理下来最大的价值就是把这条从「基础概念」到「Actor-Critic」的链路用数学语言重新串了一遍。全书十章加附录前半部分讲基本工具后半部分讲算法方法中间用「有模型到无模型」「表格到函数」两条主线贯穿。适合已经跑过几个 Demo、但想回头补数学地基的人也适合正在复习备考、需要一份体系化提纲的人。下面按知识地图、核心模块、易错点、复习清单四层展开。2. 基础概念与贝尔曼方程状态值到底在算什么2.1 网格世界所有概念的试验场全书用一个网格世界任务贯穿始终这不是偷懒而是刻意设计。网格世界足够简单状态、动作、转移、奖励都能可视化但又不失 MDP 的一般性。梳理下来会发现强化学习里几乎所有反直觉的地方都能在这个小格子里找到对应。核心要素可以这样对照记忆概念在网格世界中的含义数学符号状态智能体所在格子s动作上下左右移动a状态转移移动后到达的格子p(s|s,a)策略每个格子选方向的规则π(a|s)奖励到达目标格子的反馈r回报从某时刻起累计折扣奖励G_tEpisode从起点到终点的一轮τ这里最容易忽略的是「轨迹、回报、Episode」三者的关系。轨迹是一串状态动作序列回报是轨迹上的折扣累加Episode 是产生轨迹的一次完整交互。很多人把回报和奖励混用导致后面贝尔曼方程里的期望符号理解错位。2.2 贝尔曼方程状态值的递归结构状态值 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π。但实际中矩阵求逆代价太高所以迭代解才是重点v_{k1} rπ γPπ v_k收敛条件是 γ 1 或策略最终到达吸收态。从状态值到动作值的扩展也在这里完成。动作值 qπ(s,a) 表示先执行动作 a、再遵循策略 π 的期望回报。两者的关系是 vπ(s) Σ_a π(a|s) qπ(s,a)而 qπ(s,a) Σ_{s,r} p(s,r|s,a)[r γ vπ(s)]。这个互相表示的关系是后面所有算法的地基。提示贝尔曼方程有两种用法——策略评估时用它算给定策略的值策略改进时用它比较不同动作的值。复习时先分清「评估」和「改进」两个场景再去看算法。3. 最优性与迭代算法值迭代和策略迭代的分岔路3.1 贝尔曼最优方程max 操作带来的非线性最优状态值 v*(s) 是所有策略中能取得的最大状态值。贝尔曼最优方程BOE把贝尔曼方程里的期望换成了 maxv*(s) max_a Σ_{s,r} p(s,r|s,a) [ r γ v*(s) ]这个 max 是整本书的分水岭。贝尔曼方程是线性的可以直接解BOE 是非线性的因为 max 不能提到求和外面。压缩映射定理在这里登场用来证明 BOE 有唯一解且迭代法能收敛。梳理下来会发现压缩映射的证明思路是先证明右边关于 v 是压缩的再用 Banach 不动点定理保证唯一性和收敛性。影响最优策略的因素也在这里讨论折扣因子 γ 改变会直接影响策略的激进程度γ 越接近 1智能体越看重长期回报奖励设计则决定了哪些状态被赋予高值。这两点在调参时是血泪经验——γ 设错策略可能完全跑偏。3.2 值迭代与策略迭代两种收敛路径值迭代和策略迭代是求解 BOE 的两条路对比项值迭代策略迭代每轮操作更新值函数一次完整策略评估 策略改进收敛速度每轮计算少轮数多每轮计算多轮数少核心公式v_{k1} max_a ...π greedy(vπ)适用场景状态空间大、单轮成本敏感状态空间小、评估可精确求解值迭代的逐元素形式是 v_{k1}(s) max_a Σ p(r γ v_k(s))实现时对每个状态遍历所有动作取最大值。策略迭代则分两步先用贝尔曼方程迭代到收敛得到 vπ再对每个状态取 argmax 得到新策略循环直到策略不变。截断策略迭代是两者的统一视角。值迭代相当于策略评估只做一步策略迭代相当于策略评估做到收敛中间的任何截断次数都对应一种算法。这个视角能解释为什么值迭代和策略迭代都能收敛到最优——它们只是评估精度的不同取舍。注意策略迭代里策略改进的贪心选择如果遇到多个动作值相同的情况要固定一个选择规则否则可能陷入策略震荡。4. 无模型方法蒙特卡洛与时间差分的分工4.1 蒙特卡洛用完整轨迹估计值蒙特卡洛方法的核心思想是用采样代替模型。MC Basic 直接把策略迭代中的策略评估换成用完整轨迹的回报均值来估计动作值qπ(s,a) ≈ (1/N) Σ_{i1}^{N} G_i(s,a)这里 G_i 是第 i 条轨迹中在 (s,a) 之后的折扣回报。MC Basic 的缺点是必须等 Episode 结束才能更新且对每个状态动作对都要采样足够多次。MC Exploring Starts 通过利用样本更高效来改进一条轨迹经过的所有状态动作对都可以用来更新而不只是起点。MC ε-Greedy 则解决了探索起点的问题用 ε 概率随机选动作、1-ε 概率选贪心动作保证所有动作都有被选中的可能。ε-greedy 的探索与利用权衡是这一章的重点。ε 太大策略接近随机收敛慢ε 太小可能漏掉更优动作。实践中常用衰减的 ε早期多探索后期多利用。4.2 随机近似与时间差分从 MC 到 TD 的桥梁随机近似是连接蒙特卡洛和时间差分的数学工具。Robbins-Monro 算法给出了求根问题的迭代形式w_{k1} w_k - α_k * g(w_k, η_k)其中 g 是带噪声的观测α_k 是步长。收敛条件是 Σα_k ∞ 且 Σα_k² ∞。这个条件在 TD 学习里反复出现是判断算法能否收敛的依据。Dvoretzky 定理则把收敛条件推广到更一般的形式SGD 是它在优化中的特例。时间差分方法的核心是用自举bootstrapping代替完整轨迹。TD 学习状态值的更新是v(s_t) ← v(s_t) α [ r_{t1} γ v(s_{t1}) - v(s_t) ]括号里是 TD 误差。Sarsa 把同样的思路用到动作值上更新式是 q(s_t,a_t) ← q(s_t,a_t) α [ r_{t1} γ q(s_{t1},a_{t1}) - q(s_t,a_t) ]。n-step Sarsa 则在 MC 和 TD 之间做插值n1 是 Sarsan→∞ 是 MC。Q-learning 是最重要的异策略算法更新式是q(s_t,a_t) ← q(s_t,a_t) α [ r_{t1} γ max_a q(s_{t1},a) - q(s_t,a_t) ]和 Sarsa 的区别在于Q-learning 用 max 操作学习的是最优动作值行为策略和目标策略可以不同。On-policy 和 Off-policy 的区别在这里必须分清Sarsa 是 on-policy因为它用实际执行的下一个动作来更新Q-learning 是 off-policy因为它用最大动作值来更新不管实际执行什么。# Q-learning 核心更新逻辑表格版 # q_table: 状态动作值表shape(num_states, num_actions) # alpha: 学习率gamma: 折扣因子epsilon: 探索率 for episode in range(num_episodes): s env.reset() done False while not done: # ε-greedy 选择动作 if random.random() epsilon: a env.action_space.sample() else: a np.argmax(q_table[s]) s_next, r, done, _ env.step(a) # Q-learning 更新用 max 操作off-policy td_target r gamma * np.max(q_table[s_next]) * (1 - done) q_table[s, a] alpha * (td_target - q_table[s, a]) s s_next这段代码里(1 - done)是关键终止状态没有后续值必须把自举项置零。np.max(q_table[s_next])对应 Q-learning 的 max 操作换成q_table[s_next, a_next]就是 Sarsa。参数方面alpha 通常取 0.1 到 0.01gamma 取 0.9 到 0.99epsilon 从 1.0 衰减到 0.05 左右。5. 函数近似与策略梯度从表格到神经网络5.1 值函数近似表格不够用之后表格方法的状态空间是离散且有限的一旦状态连续或维度高表格就存不下。值函数近似用参数化函数 v(s;w) 或 q(s,a;w) 来替代表格w 是参数向量。目标函数是均方误差J(w) E[(vπ(s) - v(s;w))²]优化用 SGD更新式是 w ← w α [ vπ(s) - v(s;w) ] ∇_w v(s;w)。但 vπ(s) 未知所以用 TD 目标 r γ v(s;w) 代替得到半梯度 TDw ← w α [ r γ v(s;w) - v(s;w) ] ∇_w v(s;w)叫「半梯度」是因为 TD 目标里也含 w但求导时只对当前估计求导忽略目标里的 w。这个近似在实践中效果足够好但理论上不保证收敛到全局最优。函数近似器的选择上线性近似 v(s;w) φ(s)^T w 有收敛保证但表达能力有限神经网络表达能力强但收敛性依赖调参。Deep Q-learning 用神经网络近似 q(s,a;w)并引入经验回放和目标网络来稳定训练。经验回放打破样本相关性目标网络固定 TD 目标一段时间这两个技巧是 DQN 能训起来的关键。5.2 策略梯度与 Actor-Critic直接优化策略策略梯度方法直接参数化策略 π(a|s;θ)优化目标是期望回报 J(θ)。策略梯度定理给出∇_θ J(θ) E[ ∇_θ ln π(a|s;θ) * qπ(s,a) ]REINFORCE 用完整轨迹的回报 G_t 代替 qπ(s,a)更新式是 θ ← θ α G_t ∇_θ ln π(a_t|s_t;θ)。这个式子的直观解释是回报高的动作增加其概率回报低的动作降低其概率。Actor-Critic 用值函数来估计 qπ(s,a)降低方差。最简单的 QAC 用 q(s,a;w) 作为 criticactor 用策略梯度更新。A2C 引入优势函数 A(s,a) q(s,a) - v(s)并证明减去基线 v(s) 不改变期望梯度但能显著降低方差。这个「基线不变性」是 A2C 的核心。Off-policy Actor-Critic 用重要性采样来纠正行为策略和目标策略的分布差异重要性权重是 π(a|s)/b(a|s)。确定性策略梯度DPG则直接输出确定性动作适用于连续动作空间更新式里对动作求导而不是对策略概率求导。方法策略类型值函数适用动作空间REINFORCE随机无离散/连续QAC随机q(s,a)离散A2C随机q(s,a) 或 v(s)离散/连续DPG确定性q(s,a)连续提示策略梯度里的 ln π 求导离散动作用 softmax 输出概率连续动作用高斯分布输出均值和方差。复习时把这两套输出层的梯度推导各走一遍比背公式有用。6. 易漏点与易错点复习时最容易翻车的五处6.1 易漏点一贝尔曼方程和贝尔曼最优方程的适用场景为什么漏两个方程形式相近只差一个 max复习时容易混着记。但贝尔曼方程用于策略评估给定策略 π贝尔曼最优方程用于找最优策略不依赖具体 π。怎么补每次写方程前先问自己——当前是评估还是改进评估用期望改进用 max。把这两个场景写在笔记最上面做题前先看一眼。6.2 易漏点二On-policy 和 Off-policy 的判断标准为什么漏Sarsa 和 Q-learning 的更新式只差一个 max但策略类型完全不同。判断标准不是看更新式里有没有 max而是看「行为策略」和「目标策略」是否相同。怎么补Sarsa 的行为策略和目标策略都是 ε-greedy所以是 on-policyQ-learning 的行为策略是 ε-greedy目标策略是 greedy所以是 off-policy。把这两个策略分别写出来对比比死记结论可靠。6.3 易漏点三TD 误差里的终止状态处理为什么漏代码实现时容易忘记终止状态没有后续值导致自举项错误地加上了 v(s_terminal)。怎么补在更新式里显式乘 (1 - done)或者在环境返回 doneTrue 时直接把 TD 目标设为 r。这个错误在调试时表现为值函数在终止状态附近异常增大检查时优先看终止状态的更新逻辑。6.4 易漏点四策略梯度里的基线不变性为什么漏减去基线 v(s) 后期望梯度不变这个结论需要推导才能确认。复习时容易只记结论不理解为什么。怎么补推导的关键是 E[ ∇_θ ln π(a|s;θ) * b(s) ] 0因为 Σ_a π(a|s;θ) 1对 θ 求导得 Σ_a ∇_θ π(a|s;θ) 0所以 Σ_a π(a|s;θ) ∇_θ ln π(a|s;θ) 0。把这个推导走一遍基线不变性就清楚了。6.5 易漏点五函数近似下的收敛性差异为什么漏表格方法有明确的收敛保证函数近似下收敛性依赖近似器类型。线性近似有收敛保证神经网络没有。怎么补复习时把「表格 vs 线性近似 vs 神经网络」的收敛性列成表标注每种情况下的保证条件。DQN 的经验回放和目标网络是为了稳定训练不是收敛保证这个区别要分清。7. 复习清单从知识地图到查漏补缺的落地方法复习这本书最有效的方式不是从头再读一遍而是按「概念 → 方程 → 算法 → 实现」四层做查漏补缺。下面是我自己走通一遍后整理的清单按顺序过每过一层标记一次。第一层概念自检。合上书能不能用自己的话解释状态值和动作值的区别、回报和奖励的区别、On-policy 和 Off-policy 的区别、值迭代和策略迭代的区别。这四个问题答不上来后面的方程推导都是空中楼阁。第二层方程默写。贝尔曼方程、贝尔曼最优方程、TD 更新式、Sarsa 更新式、Q-learning 更新式、策略梯度定理、A2C 的优势函数。默写时注意每个符号的含义特别是期望的下标和 max 的位置。第三层算法对比。把值迭代、策略迭代、MC Basic、MC Exploring Starts、MC ε-Greedy、Sarsa、n-step Sarsa、Q-learning、DQN、REINFORCE、QAC、A2C、DPG 列成一张表标注每个算法的输入、输出、更新目标、策略类型、是否需要模型。这张表能帮你快速定位每个算法在知识地图上的位置。第四层实现验证。选一个网格世界环境把 Q-learning 和 Sarsa 各实现一遍对比两者的学习曲线。再把 REINFORCE 和 A2C 在同一个环境上跑一遍观察方差差异。实现时重点检查终止状态处理、ε 衰减策略、学习率设置、网络初始化。复习层自检问题通过标准概念四个区别能否说清不看笔记能举例说明方程七个方程能否默写符号含义全部正确算法十三个算法能否对比表格填写完整实现四个算法能否跑通学习曲线符合预期最后一层是查漏补缺。把做错的题、推错的公式、调崩的参数单独记在一个本子上每隔一周翻一次。我自己的习惯是每次跑新算法之前强制走一遍「概念 → 方程 → 算法 → 实现」四层检查确认没有跳步再动手。这个习惯帮我省了很多调试时间——很多 bug 不是代码写错而是概念理解偏了。希望这份清单能帮到你。本文还有配套的精品资源点击获取