随机逼近:强化学习价值迭代与SGD收敛的数学基石

发布时间:2026/10/6 9:02:39
随机逼近:强化学习价值迭代与SGD收敛的数学基石 翻到《强化学习的数学原理》第六章你大概率会对着“随机逼近”这四个字犯嘀咕前面好不容易把马尔可夫决策过程、贝尔曼方程、策略迭代这些硬骨头啃下来怎么又冒出来一个数学味道这么重的概念。很多模型调参经验丰富、代码跑得很溜的朋友都会本能想跳过这一章。我劝你别跳。TD算法为什么能把价值函数越估越准Q-learning 在表格型设置里为什么几乎必然收敛SGD 为什么往往要配一个递减的学习率这些问题的答案全都收在这一章里。随机逼近Stochastic ApproximationSA要回答的问题其实特别朴素当我们手上没有目标函数的解析式只有一个带噪声的观测器该怎么通过一次次带噪声的试错迭代逼近那个隐藏在噪声后面的正确答案。放到强化学习的语境里它就是给价值估计、策略参数更新提供数学底座的“地基”。只要你把这一章的思维框架吃透后面再看深度强化学习里五花八门的改进算法会踏实很多至少不会被“更新公式里的这一项为什么这样写”卡住。1. 随机逼近到底在解决什么问题一个比大数定律更动态的估计问题1.1 先别管数学想一个“摸黑走平衡点”的场景假设你被关在一个漆黑的大房间里地面是倾斜的你手里没有灯唯一知道的信息是每次你站在某个位置工作人员会大声告诉你“你现在偏了往左”或者“往右”。但这位工作人员本身眼神也不好他给的判断每次都会带随机误差。房间的坡度曲线你完全看不见你只能靠一次次“移动、听反馈、再移动”来找到一个能站稳的平衡点——这就是一个典型的随机逼近过程。传统数值优化会假设你能算出坡度曲线在某一点的精确值哪怕算得累至少方向是对的。随机逼近面对的处境恶劣得多反馈不是精确的是有噪声的甚至目标函数本身都是未知的。你唯一能依靠的是“多次噪声反馈平均起来能反映真实方向”这个统计性质。所以随机逼近的核心不是“如何在无噪声情况下求根”而是“如何在只有带噪声观测的情况下设计一个更新规则让它依然能收敛到正确的解”。这个视角一旦建立你会发现整个强化学习就是在这种处境下反复训练智能体奖励是带噪声的状态转移是随机的价值估计只能从样本里一点点磨出来没有哪个环节给你精确梯度。这也是为什么随机逼近这一章放在数学原理教材里看起来抽象实际上是整个学科的“题眼”。1.2 强化学习里遍地都是这种“隐藏方程”再往深处说一步。强化学习的基础方程是贝尔曼方程写出来就是 V R γPV。如果状态空间有限且已知转移矩阵 P 和奖励期望 R这就是一个线性方程组直接用矩阵求逆或迭代法解就行。但真实场景里P 和 R 你都不知道你只能从智能体和环境交互的样本里通过一局一局的数据去逼近这个方程的解。TD 更新的经典写法是 V(s) ← V(s) α [r γV(s) − V(s)]。方括号里的 r γV(s) − V(s)通常被叫做TD误差。从随机逼近的角度看r γV(s) 就是对“真实期望回报”的一次带噪声采样TD误差的期望如果等于零说明当前的 V 就是贝尔曼方程的解。我们要找的正是让这个带噪声的期望等于零的参数点而不是某个样本上恰好为零的点。这和第一节里的场景是同构的屋子里看不见坡度曲线对应我们不知道真实的价值函数工作人员带随机误差的反馈对应每次采样得到的TD误差不断移动找平衡点对应反复用TD更新修正V值。理解了随机逼近你就理解了为什么TD算法里的“目标值”可以用一个含噪声的估计去替代真实值还依然能够收敛。1.3 随机逼近这个名字拆开看随机、逼近、递推“随机”指的是整个过程中出现的反馈含有随机噪声这个噪声可能来自环境、可能来自采样、也可能来自函数近似。“逼近”指的是我们不指望一步到位而是通过设计合适的步长和方向在一个迭代过程中逐步逼近某个目标值。“递推”则体现在算法结构上每一步只用当前参数和最新观测算出一个新参数不保留历史数据不需要重新解全局问题。这三点加在一起就让随机逼近成了强化学习里几乎所有迭代算法的公共数学框架。TD、Q-learning、Sarsa、策略梯度底层都能看成是某个随机逼近过程的具体实例。而且要注意随机逼近并不要求观测噪声服从正态分布只要它满足一定的矩条件比如方差有界收敛性就有保证这一点给了实际算法很大的自由度——环境反馈哪怕很诡异只要方差控制住理论就不会崩。2. Robbins-Monro 与 Kiefer-Wolfowitz随机逼近的两张入场券2.1 Robbins-Monro 算法所有随机迭代算法的老前辈随机逼近最早登上历史舞台靠的是 Robbins 和 Monro 在1951年提出的算法通常直接叫 RM 算法。它解决的是这样一个问题有一个回归函数 M(θ)我们无法直接计算它的值只能观测到 Y M(θ) 噪声目标是想找到 θ* 使得 M(θ*) b。RM 算法的迭代式长得非常朴素θ_{t1} θ_t α_t (b − Y_t)每次拿到一个带噪声的观测值 Y_t就把 b 和它的差当成修正信号朝着“误差减少”的方向迈一小步。步子的大小由 α_t 控制。RM 算法给出的收敛条件也成了后来所有随机逼近方法共享的“宪章”步长序列必须满足 ∑α_t ∞ 且 ∑α_t² ∞两个条件缺一个都不行。说人话就是步长不能衰减得太快否则你永远到不了真解因为总修正量不够步长又必须平方可加否则噪声引起的抖动永远消不掉参数会在真解附近一直“打摆子”。这个双条件的直觉特别重要后面我在第三节单独展开。RM 算法在强化学习里的价值不只是历史地位高更在于你随手写出的一个随机梯度更新本质上都是在跑RM迭代。2.2 Kiefer-Wolfowitz 算法没有导数时的笨办法也有用1952年Kiefer 和 Wolfowitz 提出了另一个经典算法通常叫 KW 算法。它解决的问题比 RM 更“恶劣”你连“目标函数在这一点是增还是减”都不知道只能靠两个邻近点上的带噪声观测值差出一个近似梯度来。KW 的做法是选一个差分尺度 δ_t然后用 [Y(θ_t δ_t) − Y(θ_t − δ_t)] / (2δ_t) 去近似真实导数再把这个近似导数代入到类似 RM 的更新式中。它相当于在没有精确梯度信息的情况下用“双侧采样”硬生生构造出一个梯度估计。这个思路在今天看并没有过时仿真优化、黑盒优化里大量无梯度方法依然是这种思想的现代版本。对强化学习来说KW 的直接应用场景不算多因为绝大多数深度强化学习算法都有解析梯度可算。但 KW 的意义在于它证明了随机逼近这个框架的韧性——即使反馈信息被破坏到只剩下噪声观测只要步长和差分尺度取合适的配合收敛性依然可以保证。理解了这点你看一些策略梯度论文里用样本平均近似梯度甚至用进化策略时就不会觉得这是旁门左道它本质上还是随机逼近家族的一员。2.3 两个算法放一起看它们共用的三个支柱把 RM 和 KW 摆在一起能看到非常明显的共同骨架这个骨架后来成了强化学习所有价值迭代算法的模板。第一个支柱是“目标函数加噪声观测”。无论是价值估计还是策略优化你都不拥有精确的函数值或梯度只能拿到样本或轨迹。第二个支柱是“误差信号驱动更新”。把观测值和目标值的差拿来作为修正量RM用的是 b − Y_tKW用的是差分近似梯度TD用的则是 TD误差本质都是误差信号。第三个支柱是“步长序列调节收敛”。步长大小直接决定了你是在收敛、是在震荡还是在发散。顺便说一句我阅读这一章时最大的收获就是把“更新公式”看成由三件独立的东西拼起来的目标是什么、观测是什么、步长怎么走。很多论文里看上去很新的算法拆开之后无非是把这三样东西中的某一件换了个包装。比如重要性采样只是改变了观测的分布double Q-learning 只是换了一种构造目标值的方式但它们都没有跳出这个框架。3. 收敛条件背后的直觉步长为什么不能随便选3.1 两条铁律步长衰减得“足够慢”又“足够快”随机逼近最容易被忽略、也最容易在实操中翻车的就是步长序列的选择。先看教科书标准答案步长 α_t 必须满足两条一是总和趋于无穷二是平方和收敛即 ∑α_t ∞、∑α_t² ∞。第一条解释的是“能达到”。如果步长衰减得太快比如 α_t 1/t²总修正量有限初始估计离真解哪怕差十万八千里后半程也没有力气继续走最终会停在一个远离正确值的点。第二条解释的是“能停住”。如果步长是常数或衰减太慢随机噪声带来的修正量不会在时间平均中消失参数会一直在真解附近震荡方差永远不归零。打个比方你要在狂风里走到一面墙风会随机把你往各种方向推。迈步必须有大有小但整体步子不能消失否则走不到墙同时步子又必须逐渐变小否则最后哪怕站到墙边还是会被风推来推去站不稳。这两个条件看上去矛盾实际上给出了一个极窄的设计窗口而 1/t 这种调和步长恰好同时满足两条。3.2 常数步长不是错误而是选择了“跟踪”而非“收敛”很多实际算法并不用衰减步长而是用一个固定的 α比如不少深度强化学习实现里学习率在整个训练过程中保持不变顶多配个 warmup。这在数学上叫“常数步长”严格说不满足平方和收敛条件参数不会收敛到某个点而是收敛到一个围绕真解的稳态分布。常数步长的妙处在于“能追踪”。当环境或策略随时间变化时真解本身会漂移衰减步长追得太慢常数步长反而能持续跟踪变化。所以不要一看到代码里学习率不衰减就觉得不专业要先问一个问题你是想让模型收敛到一个静止的目标还是想让它在非平稳环境里保持跟踪能力。这个取舍本身就是随机逼近思想带来的工程判断力。3.3 实际工程里的主流步长幂律衰减与自适应最常见的做法是 α_t c / t^pp 取 0.5 到 1 之间。理论上 p1 是最经典的调和衰减但实际你会发现它到后期步子太小如果初始误差较大收敛得像蜗牛。我习惯取 p0.6 到 0.8既能保证平方和收敛后期又保留一些活性。比如估计一个均值的小实验我用 α_t 0.2 / t^0.6起始值设成10真实均值只有0.3实验跑几千步也能顺利拉回来。如果用 p1.0从同样起点起步后期基本挪不动轨迹会一直被“钉”在半路上。深度学习里的 Adam 这类自适应优化器其实就是在用梯度二阶矩估计动态调节每个方向的步长梯度震荡大的方向步长自动变小梯度稳定的方向步长更大。但底层依然要遵守随机逼近的总原则这也是为什么几乎每个深度学习框架在训练后期都有人建议用余弦退火或指数衰减本质就是让步长满足收敛条件。3.4 噪声方差与有偏观测收敛到哪才是真正的考验步长只是“能不能到”噪声性质决定了“到了哪里”。随机逼近理论里噪声通常要求是零均值的即 E[Y_t | θ_t] M(θ_t)。如果观测本身有偏比如因为经验回放里的样本分布和当前策略不匹配那么即使步长选得再好算法也会收敛到另外一个“被偏差污染”的点。这在强化学习中是个大坑。TD 算法用的自举目标 r γV(s′) 本身就包含当前估计 V一旦V偏离真值目标也跟着偏这种偏差不是传统随机逼近里那种零均值噪声而是系统性偏差。这就是为什么会出现 double Q-learning、TD(λ)、离线强化学习里的各种保守惩罚项。本质上大家都在试图修正“观测的有偏性”让随机逼近过程逼近的目标重新回到真解上。你看论文时如果看到一类算法专门处理过估计问题第一反应应该是它在处理 SA 框架中的有偏观测而不是在发明新理论。4. 随机逼近如何牵出 TD 学习、Q-Learning 与 SGD4.1 把 TD 更新改写成一个随机逼近问题TD 算法这个名称英文全称是 Temporal Difference中文叫时间差分它和随机逼近的关系密切到可以说是“直系亲属”。表格型 TD(0) 的更新式是V(s_t) ← V(s_t) α_t (r_t γV(s_{t1}) − V(s_t))现在用随机逼近的语言把它重写一遍。我们想解的是贝尔曼期望方程也就是让 V(s) 等于 r(s) γ∑ P(s′|s, π)V(s′)。但因为 P 和 r 未知我们只能用一次转移样本 r_t γV(s_{t1}) 作为这个期望的含噪估计。TD误差 δ_t r_t γV(s_{t1}) − V(s_t) 的期望为0对应的恰好就是贝尔曼方程在该状态下成立的条件。所以 TD(0) 的迭代式就是在为每一个状态运行一个随机逼近过程目标值是由下一次回报和下一个状态估计共同构成的随机观测更新方向则是用观测值和当前估计的差去修正 V。这个视角直接告诉了你为什么 TD 能收敛只要步长按 RM 条件衰减且每个状态被访问无穷多次随机逼近的收敛定理就自动生效。4.2 Q-learning 也长着一张随机逼近的脸再来看 Q-learning 的经典更新Q(s_t, a_t) ← Q(s_t, a_t) α_t [r_t γ max_a′ Q(s_{t1}, a′) − Q(s_t, a_t)]你把它和 TD(0) 并排放在一起会发现没有本质区别只是估计对象从 V 换成了 Q目标值里的下一步从 π(s′) 换成了 max over actions。后一个变化带来过估计问题但就随机逼近框架而言更新仍然是在用含噪观测逼近某个不动点。Q-learning 可以离线更新可以从经验回放里反复采样也没有破坏 SA 的底层逻辑因为只要采样的分布合理每一步的修正量期望仍然指向正确的不动点。这也是为什么很多经验丰富的研究者看到新算法时会先问“你在更新什么目标值”。随机逼近的框架就像一张检查表目标值是否无偏、步长是否收敛、观测噪声方差是否有界三个问题问下来一个算法值不值得深入读心里基本就有数了。4.3 SGD 其实也是 RM 算法的一个特例你可能会觉得随机逼近只存在于表格型强化学习的世界里深度强化学习里都是 SGD 的天下两者难道不是两套体系吗其实 SGD 就是随机逼近的嫡系后代。考虑一个监督学习问题我们要最小化总体损失 L(θ) E[ℓ(θ; X)]。真实梯度 ∇L(θ) 通常无法计算因为我们没有总体分布但我们可以采样一个 mini-batch用 ∇ℓ(θ; X_i) 作为梯度的无偏估计。于是参数更新写成θ_{t1} θ_t − α_t ∇ℓ(θ_t; X_i)这就是随机梯度下降。把它套进RM框架里看目标函数 M(θ) ∇L(θ)观测 Y_t ∇ℓ(θ_t; X_i)要找的根是 M(θ*) 0。梯度估计要求在采样条件下无偏这正好对应随机逼近里的零均值噪声条件步长衰减满足 ∑α_t ∞ 且 ∑α_t² ∞正是 SGD 收敛的经典条件。所以你再去看深度学习里的学习率调度会发现背后的理论不是神经网络自己发明的而是从随机逼近这个更老的数学分支里长出来的。理解这层关系对调试深度强化学习特别有用很多人说 DQN 训练不稳定第一反应是网络结构问题其实很多时候只是学习率调度没有满足最基本的随机逼近条件。4.4 从离线到因果强化学习为什么底层还是这一章这几年强化学习有几个热门方向绕不开这一章。比如离线强化学习里IQL 这类方法强调只用数据集里的数据做价值估计不和环境交互。它依然要在每个状态上做一个带噪观测的迭代逼近只是“观测”的来源从在线经验换成了离线样本如果离线数据分布覆盖不全观测就会出现严重偏差所以 IQL 才要引入分位数回归这类工具去削弱偏差。还有一些前沿工作把因果推断工具嵌入强化学习流程用因果图去改变状态表征或奖励分解。不管是改变信息流、调整目标值还是重构回报最终参数更新仍然要满足那个最底层的迭代结构。因果结构带来的收益是“让观测更接近真实目标”减少有偏性而不是凭空推翻随机逼近的框架。听到别人讨论 CRL 时你如果能用这一章的视角去想会更容易抓住它真正改的是哪个环节。5. 新手学习随机逼近的排雷经验与一个收敛小实验5.1 一个最小的复现实验用 RM 算法估计均值理论学习再多都不如自己跑一个小实验理解深刻。这里给一个最简单的例子用一个RM迭代去估计一个分布的均值。虽然直接用样本均值就能做但这个代码能让你看到随机逼近的收敛行为和步长感受野。import numpy as np import matplotlib.pyplot as plt mu 0.3 # 真实均值隐藏目标 theta 10.0 # 故意设一个极端初始值 alpha0 0.2 # 初始步长 trace [] for t in range(1, 5000): alpha alpha0 / (t ** 0.6) # 幂律衰减p0.6 Y np.random.randn() mu # 带噪声观测 theta theta alpha * (Y - theta) # RM式更新 trace.append(theta) plt.plot(trace) plt.axhline(mu, colorr, linestyle--, labeltrue mean) plt.legend() plt.title(RM estimation of mean) plt.show()跑出来你会看到一个很直观的现象参数从10一路往下冲前几百步快速逼近0.3附近后面开始缩在小范围内波动波动范围随时间慢慢变窄。你如果改动两个参数会立刻观察到对应的理论结论把 p 改成 0.2轨迹会一直抖个不停因为你违反平方和收敛条件把初始步长 α0 改到5前几步可能直接冲过头但后续还是会被拉回来这能直观看到自矫正能力。我强烈建议你试一下常数步长版本比如固定 α0.1。轨迹会在0.3附近来回震荡幅度不会消失这正好对应前面说的“跟踪而非收敛”模式。这个实验虽然幼稚但把随机逼近最核心的直觉全部呈现了出来。5.2 我踩过的坑和排查速查表这一章学完到真正上手有几个坑几乎人人都会踩一遍。我把它们整理成一张速查表供你排查代码或推导时使用。现象可能原因建议解法训练后期参数持续大幅震荡步长衰减指数 p 过大或过小不满足平方和条件改用 p0.6 到 0.8 的幂律衰减或余弦退火初始离目标很远但后期拉不回来步长衰减太快比如直接用 1/t²把指数降到 (0.5, 1] 区间内前期可用常数步长热身目标值看着总是偏高或偏低不消除观测本身有偏目标值构造不干净检查是否有自举偏差考虑 double estimator 或保守惩罚项更新顺序写错导致样本重叠在一个 episode 里把状态更新顺序当成了梯度方向严格按时间先后构造 TD 目标先算目标值再更新参数常数步长下参数始终在目标附近转圈这不是bug是常数步长的稳态行为若要收敛必须换成衰减步长若要跟踪环境变化则保留同一个样本反复更新后过拟合到一个点经验回放改变了观测分布偏差没有被平均掉使用重要采样权重或调整回放采样比例这一节的坑多数不是算法理论做不到而是在实现时混淆了“理论迭代步骤”和“工程采样方式”两者的边界。随机逼近定理假设每一步拿到的是按潜在分布独立采样的观测一旦你用回放机制反复用同一条数据独立性就破坏了收敛性需要重新评估。5.3 这份直觉怎么用在读论文上我自己读强化学习论文时现在养成了一个固定流程拿到一个新算法先用随机逼近的三段式拆解它。第一段是识别它要逼近什么目标值是贝尔曼期望方程的解还是最优贝尔曼方程的解第二段是看它的观测是怎么构造的用的是在线样本、离线样本还是多个估计器的组合第三段是看步长是怎么衰减的用了哪个学习率调度。拆完之后这个算法的大部分“奇怪设计”都会自己解释清楚。比如 target network 是为了让目标值在一段时间内更稳定降低观测的自举偏差和方差replay buffer 是为了打破样本相关性让观测尽量接近独立同分布。这些措施单独看都是工程经验放进随机逼近框架里看就是一步一步在修复那些伤害收敛性的条件让 SA 的收敛定理有兑现的前提。5.4 最后分享一个我个人的偏方如果你也打算啃随机逼近这一章我的建议是先别看完整证明先去把 RM 算法和 TD 更新的对应关系写明白。拿一张纸列出 RM 迭代里的每一项然后在旁边把 TD 更新的每一项抄下来自己往上对应谁是 b谁是 Y_t谁是 θ_t谁是 α_t。只要这一张对应表你能独立画出来这一章至少一半的内容你已经转化成自己的东西了。我当年这么做的时候最惊讶的是发现 TD 的“目标值”本身就带有当前估计的影子它会让我一开始觉得循环论证——用估计去更新估计。但随机逼近理论恰恰说明了这种自举式的含噪观测在步长衰减的条件下依然能收敛。这个反常识的结论只有自己推一遍才能真正接受。你把这个过程做完一遍再看其它随机迭代算法时基本上会形成一种肌肉记忆看到更新公式脑子里自动浮现出目标、观测、步长三个格子往里面填就是了。