强化学习数学原理:从贝尔曼方程到Q-learning的收敛本质 简介《强化学习的数学原理》是西湖大学赵世钰教授撰写的英文专著面向具备一定数学基础、希望从零系统理解强化学习本质的读者。全书以数学推导为主线结合大量例子循序渐进地展开涵盖基础概念、状态值与贝尔曼方程、最优状态值与贝尔曼最优方程、值迭代与策略迭代、蒙特卡洛方法、随机近似、时间差分方法、值函数近似、策略梯度方法及演员-评论家方法附录还讨论了序列收敛性。开篇以网格世界为例讲解状态、动作、状态转移、策略、奖励、轨迹与回报并引出马尔可夫决策过程随后深入贝尔曼方程的矩阵向量形式、闭式解与迭代解以及从状态值到动作值的扩展。资源包为1个PDF文件约18.9MB内容完整、目录清晰便于按章节检索与系统研读。目前已有843人学习下载适合希望夯实强化学习数学根基、对照公式推导与实例深入理解算法原理的读者。1. 强化学习的数学原理为什么“奖励最大化”能写成方程很多人第一次接触强化学习脑子里蹦出来的画面是智能体在环境里乱撞撞对了给颗糖撞错了挨顿打撞着撞着就学会了。这个画面不算错但它解释不了一件事为什么同样是“试错”有的算法收敛有的算法震荡有的算法直接发散到无穷大答案不在代码里在数学里。有一本英文专著把这件事从根上讲透了——它从最基础的网格世界出发用状态值、贝尔曼方程、随机近似、时间差分这一整套数学工具把“奖励最大化”这个模糊目标翻译成可求解的方程。搞懂这套原理你再看 Q-learning、策略梯度、Actor-Critic就不再是背公式而是看它们在解同一个方程的不同变形。这本书的章节编排本身就是一条推理链第 1 章建立 MDP 语言第 2 章定义状态值并导出贝尔曼方程第 3 章引入最优性方程第 4 章给出求解算法第 5 到第 7 章解决“没有模型怎么办”第 8 到第 10 章解决“状态太多怎么办”。每一章都在回答上一章留下的缺口。下面按这条链拆开讲。2. 贝尔曼方程一个状态的价值为什么等于即时奖励加未来折扣2.1 从回报到状态值折扣因子到底在防什么先看一个最朴素的设定网格世界。智能体在格子里走走到目标格得正奖励掉进陷阱格得负奖励每走一步消耗一点时间成本。如果只看即时奖励智能体会原地打转——因为每一步的即时奖励都一样。所以必须引入回报return也就是从当前时刻开始把未来所有奖励加起来。但“所有未来奖励”有个问题如果任务没有终止这个和是无穷大。折扣因子 γ 就是用来压住这个无穷大的。γ 取 0.9 意味着 10 步之后的奖励只值原来的 0.35100 步之后几乎为零。常见的实现思路是让 γ 严格小于 1这样无穷级数收敛状态值才有定义。状态值 vπ(s) 的定义就是从状态 s 出发按照策略 π 走能拿到的折扣回报的期望。注意两个关键词——“按照策略 π”和“期望”。前者说明状态值依赖于策略换策略就换一套值后者说明环境有随机性同一个状态出发可能走到不同结局所以要取期望。2.2 贝尔曼方程把无穷求和变成递归直接算期望要展开整条轨迹不现实。贝尔曼方程做了一件事把“从 s 出发的未来回报”拆成“这一步的即时奖励”加上“下一步状态的折扣价值”。写成式子就是vπ(s) Σ_a π(a|s) Σ_{s,r} p(s,r|s,a) [ r γ vπ(s) ]这个式子的意义在于它把一个无穷时间的问题变成了一个递归问题。你不需要知道整条轨迹只需要知道当前状态的即时奖励和下一状态的值的加权平均。这就是动态规划的核心思想。矩阵-向量形式更简洁vπ rπ γ Pπ vπ其中 vπ 是所有状态值组成的向量rπ 是即时奖励的期望向量Pπ 是状态转移矩阵。这个形式直接给出了闭式解vπ (I - γPπ)^{-1} rπ。但实际中状态数可能上万矩阵求逆代价太高所以更常用迭代解v_{k1} rπ γ Pπ v_k反复迭代直到收敛。2.3 从状态值到动作值为什么需要多一层状态值回答的是“这个状态好不好”但智能体需要的是“在这个状态下做哪个动作好”。动作值 qπ(s,a) 就是干这个的在状态 s 先执行动作 a之后再按策略 π 走能拿到的期望回报。它和状态值的关系是 qπ(s,a) r(s,a) γ Σ_{s} p(s|s,a) vπ(s)。这层转换很关键。因为策略改进需要比较不同动作的好坏而状态值只给了状态的整体评价没法直接比较动作。动作值把动作维度单独拎出来才能做“选最大”的操作。第 3 章的贝尔曼最优方程就是在这个基础上把“按策略加权平均”换成“取最大值”从而定义最优值。3. 贝尔曼最优方程为什么“取最大”能保证收敛3.1 最优状态值与最优策略的关系最优状态值 v*(s) 的定义是在所有可能的策略里从 s 出发能拿到的最大期望回报。对应的策略叫最优策略 π*。这里有一个反直觉的结论最优策略可能不止一个但它们共享同一套最优状态值。也就是说v* 是唯一的但 π* 不唯一。贝尔曼最优方程BOE写出来是v*(s) max_a [ r(s,a) γ Σ_{s} p(s|s,a) v*(s) ]和普通贝尔曼方程的区别就在那个 max。普通方程是对动作做加权平均权重是策略 π最优方程是直接选最大的那个动作。这个 max 操作是非线性的所以 BOE 没有闭式解只能迭代求。3.2 压缩映射为什么迭代一定能收敛BOE 的迭代形式是 v_{k1} max_a [ r γ P v_k ]。要证明这个迭代收敛需要用到压缩映射定理。核心逻辑是定义在 BOE 右侧的算子 T 是一个 γ-压缩映射即对任意两个值向量 v 和 v有 ||Tv - Tv|| ≤ γ ||v - v||。因为 γ 1每迭代一次两个向量的距离就缩小到原来的 γ 倍最终必然收敛到唯一的不动点。这个证明不是数学装饰。它直接告诉你两件事第一γ 必须小于 1否则压缩性不成立迭代可能发散第二收敛速度由 γ 决定γ 越接近 1收敛越慢。常见的实现思路是在训练初期用较小的 γ 加速收敛后期再调大以考虑更长期的回报。3.3 影响最优策略的因素最优策略不是固定不变的它受三个因素影响奖励设置、折扣因子、环境动态。奖励设置决定了什么行为被鼓励折扣因子决定了智能体有多“短视”环境动态决定了动作的后果有多确定。书中用网格世界的例子展示了改变奖励位置或调整 γ最优策略的路径会明显变化。这也解释了为什么调参在强化学习里这么玄学——你改的不是一个数字而是整个最优解的形状。4. 值迭代与策略迭代两种求解 BOE 的路径4.1 值迭代直接迭代最优方程值迭代的思路最直接把 BOE 的迭代形式跑起来。每一步对每个状态计算所有动作的 r γ Σ p v(s)取最大值更新 v(s)。伪代码大致是# 值迭代核心循环 for k in range(max_iter): delta 0 for s in states: old_v V[s] # 对每个动作计算 q 值取最大 V[s] max(sum(p * (r gamma * V[s_next]) for p, s_next, r in transitions[s][a]) for a in actions) delta max(delta, abs(old_v - V[s])) if delta threshold: # 收敛判据 break这段代码里transitions[s][a]是状态 s 下执行动作 a 的所有可能转移每条转移包含概率 p、下一状态 s_next 和即时奖励 r。max操作对应 BOE 里的最大化。收敛判据用值变化的最大值 delta小于阈值就停。值迭代的特点是每轮只做一次“取最大”不涉及策略的显式表示。它直接逼近最优值最后再从最优值里提取最优策略每个状态选 q 值最大的动作。4.2 策略迭代先评估再改进策略迭代走的是另一条路先固定一个策略算它的状态值策略评估然后根据状态值改进策略策略改进反复交替。策略评估用的是普通贝尔曼方程可以迭代求解策略改进就是每个状态选 q 值最大的动作。策略迭代的收敛通常比值迭代快因为每次策略改进都是一次大的跳跃。但每轮策略评估本身可能要迭代很多次所以单轮代价更高。常见的实现思路是在策略评估时设一个较小的迭代上限不追求完全收敛这就是截断策略迭代。4.3 截断策略迭代统一两种算法截断策略迭代的核心观察是值迭代和策略迭代其实是同一个框架的两个极端。值迭代相当于策略评估只做一次就改进策略迭代相当于策略评估做到完全收敛再改进。中间的任何截断次数都对应一种合法的算法。这个统一视角很有价值因为它解释了为什么实际中很多算法介于两者之间——它们在计算资源和收敛速度之间做权衡。5. 无模型方法没有环境模型时怎么估值5.1 蒙特卡洛用采样代替期望前面所有方法都假设知道 p(s,r|s,a)也就是环境模型。但现实中这个模型往往未知。蒙特卡洛方法用采样替代期望从状态 s 出发按策略跑完一整条轨迹把实际拿到的折扣回报算出来作为 vπ(s) 的一个样本。跑很多次取平均就逼近了期望。MC Basic 算法就是把策略迭代里的策略评估换成蒙特卡洛采样。但这里有个坑如果某个状态从来没被访问过它的值就估不出来。所以需要探索起始exploring starts保证每个状态-动作对都有机会被选为起点。实际中这个条件很难满足于是有了 ε-greedy 策略以 ε 的概率随机选动作保证所有动作都有非零概率被尝试。5.2 随机近似为什么学习率要递减蒙特卡洛用平均来估值但平均需要存所有样本。随机近似方法改成增量式更新每来一个样本就把当前估计往样本方向挪一点。Robbins-Monro 算法给出了这种更新的收敛条件学习率 α_k 必须满足 Σ α_k ∞ 且 Σ α_k² ∞。前者保证能走到目标后者保证不会震荡过头。常见的实现思路是让学习率随时间递减比如 α_k 1/k。这解释了为什么很多强化学习算法在训练后期要调小学习率——不是为了“精细调优”而是数学上收敛的必要条件。5.3 时间差分一步到位的学习时间差分TD方法结合了蒙特卡洛和动态规划的优点不需要等整条轨迹结束也不需要环境模型。TD 更新的核心是用“即时奖励 下一状态的估计值”作为目标替代蒙特卡洛里的实际回报。写成式子就是V(s) ← V(s) α [ r γ V(s) - V(s) ]方括号里的东西叫 TD 误差。Sarsa 把 TD 用到动作值上Q-learning 则把下一状态的值换成最大动作值从而实现 off-policy 学习。Q-learning 的更新是# Q-learning 单步更新 # s: 当前状态, a: 当前动作, r: 即时奖励 # s_next: 下一状态, alpha: 学习率, gamma: 折扣因子 q_current Q[s][a] q_target r gamma * max(Q[s_next]) # 取最大off-policy Q[s][a] alpha * (q_target - q_current)注意max(Q[s_next])这一项它用的是下一状态的最优动作值而不是实际执行的动作值。这就是 off-policy 的含义——学习的是最优策略但行为策略可以是探索性的。Sarsa 则用实际执行的下一动作值属于 on-policy。6. 避坑与排查强化学习实现中的常见翻车点6.1 值函数发散先查 γ 和学习率现象训练过程中值函数越来越大最终变成 NaN。原因通常是 γ 太接近 1 或者学习率太大导致 TD 更新不满足压缩条件。解决把 γ 降到 0.95 以下学习率降到 1e-3 量级观察是否稳定。6.2 策略不收敛检查探索是否充分现象策略在几个动作之间反复跳变始终不稳定。原因通常是 ε-greedy 的 ε 太小某些动作长期没被尝试导致 q 值估计偏差大。解决初期用较大的 ε如 0.3后期逐步衰减到 0.01。6.3 奖励稀疏考虑奖励塑形或分层现象智能体在很长一段时间内拿不到任何正奖励值函数全是零。原因是在稀疏奖励任务中随机探索很难碰到目标。解决加入中间奖励奖励塑形或者用分层强化学习把任务拆成子目标。6.4 函数近似不稳定检查目标网络和回放缓冲区现象用神经网络近似 Q 值时训练损失震荡甚至发散。原因是 TD 目标本身在变网络在追一个移动的目标。解决引入目标网络定期同步参数和经验回放打乱样本相关性这是 DQN 的两个关键技巧。6.5 策略梯度方差大用基线或优势函数现象REINFORCE 的梯度估计方差极大训练极慢。原因是回报的绝对值波动大。解决减去一个基线如状态值得到优势函数 A(s,a) q(s,a) - v(s)保持梯度期望不变但大幅降低方差。7. 从表格到函数值函数近似的设计取舍当状态空间连续或巨大时表格存储不再可行必须用函数近似。这一步的取舍很关键线性近似简单但表达能力有限神经网络表达能力强但训练不稳定。书中第 8 章详细分析了目标函数的选择、优化算法的差异以及半梯度下降为什么在某些条件下会发散。一个核心矛盾是函数近似引入了泛化但也引入了偏差。表格方法中每个状态的值是独立的更新一个不影响另一个函数近似中更新一个状态会影响邻近状态的值。这种耦合既带来了效率也带来了不稳定性。常见的缓解手段包括使用目标网络冻结 TD 目标、限制学习率、使用梯度裁剪。策略梯度方法走了另一条路不估计值函数直接对策略参数求梯度。REINFORCE 用蒙特卡洛采样估计梯度Actor-Critic 则用值函数作为基线来降低方差。确定性策略梯度进一步把随机策略换成确定性策略在连续动作空间中更高效。从那以后我每次实现一个新的强化学习算法都强制走一遍这个检查链先确认 γ 和 α 是否满足收敛条件再确认探索是否充分最后确认函数近似是否引入了不稳定的耦合。这套流程帮我省下了大量调试时间。希望帮到你。本文还有配套的精品资源点击获取