前阵子刷到某篇2025年NIPS(NeurIPS)方向的论文标题,我盯着看了很久。不是因为标题长,而是因为它把三个我这两年特别关心的关键词叠在了一起:Non-Stationary Reinforcement Learning、Optimal Regret Bounds、Low-Rank Structured Variation。做强化学习的同行应该都有体会,非平稳环境一直是理论和工程中间最难受的地带——真实场景里到处都是,理论结果却长期又少又钝。这篇工作从标题判断,是想用“低秩结构变化”这个几何假设,把变化环境的复杂度真正压下去,从而拿到最优的遗憾界。这篇文章我会把它拆成四块来聊:它到底在解决什么问题、核心方法应该怎么理解、如果我想复现和做实验该怎么入手、以及这类研究里最常见的坑。无论你是刚进RL方向的学生,还是在工业界做在线决策的工程师,这篇笔记应该都能帮你省下不少翻论文的时间。
1. 它到底在解决什么问题
1.1 非平稳强化学习为什么“难”在根子上
标准强化学习假设环境是一个固定的马尔可夫决策过程(MDP),转移概率 P 和奖励函数 r 从头到尾不变。这个假设在实验室基准里没问题,但真实系统几乎都不满足:推荐系统里用户口味随热点漂移,广告竞价的出价环境随季节波动,机器人作业中部件磨损让动态模型缓慢偏移。环境一旦变化,之前学到的策略就开始失灵,算法必须持续跟踪。
难在哪儿?RL本身就要解决探索与利用的权衡,非平稳又加了一层“检测与适应”的负担。算法没法提前知道环境变没变,只能靠在线观测去估计。而任何检测都有延迟和误判:你把噪声当成变化,白白重启一轮就要浪费大量样本;你把真实变化当成噪声,策略就一直基于过时模型在跑,遗憾持续累积。这个“探索、利用、适应”的三向权衡,是非平稳RL问题的核心难点,也是为什么它比静态RL难出一个数量级。
形式化地说,通常设定是有限时域情节式MDP,每个情节长度 H,状态数 S、动作数 A,总共跑 K 个情节。算法在每个情节 k 面对的是当前这一集的 P_k 和 r_k,遗憾定义为所有情节中“最优策略能拿到的累计价值”与“算法实际拿到的累计价值”之差。如果环境可以任意快地变化且没有任何结构约束,任何算法的遗憾都必然是线性的,所以所有理论研究都必须引入某种“变化是受控的”假设。
1.2 现有方法的遗憾与瓶颈
主流的非平稳RL算法可以分成三大类:滑动窗口、折扣因子、变点检测重启。它们的遗憾界通常写成 \tilde{O}(V^{1/3} T^{2/3}) 的量级(T = KH 是总步数),或者依赖于分段数量。这里的 V 是总变化量(total variation budget),把所有情节之间转移概率和奖励的变化幅度累加起来,用来约束环境“动得有多快”。
问题恰恰出在这个 V 上。V 是在完整的参数空间里度量的,一个 tabular MDP 有 S^2 A H 量级的转移参数,哪怕真实环境只有很少的几个隐藏因子在动,只要这些变化落在高维参数空间里,V 就被撑得很大。举个例子:一个真实系统只有 5 个隐因子在漂移,但它落在 10000 维的参数空间里,那么用 V 去刻画复杂度,理论界依然很悲观,尽管实际变化在结构上非常简单。
这就是现有方法的瓶颈——变化度量太“粗”,没有利用变化自身的结构。滑动窗口这类方法本质上是在赌“环境这段时间没变”,但很多场景里环境一直在变,只是变得有规律、有方向。如果没有更细的度量,理论分析就永远被高维参数空间卡住。
1.3 低秩结构变化:一个很自然但没被做透的切入点
低秩结构变化的直觉非常朴素:变化的方向很少。环境的动态参数虽然高维,但真正在动的方向可能只有 r 个。你可以想象一段 1920×1080 的视频,每秒 60 帧,如果镜头固定不动、只有一个人物在走动,那么整段视频对应的数据矩阵秩就很低。环境变化也是同理——高维空间里的低维漂移。
这个假设不只是数学上方便,很多真实场景确实符合。推荐系统的隐因子模型本身秩就不高,用户偏好的漂移往往集中在少数几个隐方向上;机器人关节磨损集中在末端执行器的主运动子空间里;市场环境的周期性波动也经常落在少数几个主导模态上。所以这篇论文的定位就很清楚了:用低秩结构把“有效变化量”从全维度的 V 压到与秩 r 相关的量级,从而拿到更紧的遗憾界,而且在某种最优性准则下是紧的。
2. 核心方法与理论贡献拆解
2.1 问题设定与数学框架
先约定符号。常见的设定是情节式 tabular MDP:状态空间大小 S,动作空间大小 A,每个情节步数 H,总共 K 个情节。环境在每个情节 k 有自己的一套转移核 P_k 和奖励函数 r_k,相邻情节之间允许变化。总变化量通常定义为相邻转移核与奖励差异的累加,比如:
V = \sum_{k=1}^{K-1} \left( |P_{k+1} - P_k|1 + |r{k+1} - r_k|_\infty \right)
因为标题里直接写了 low-rank structured variation,可以推断论文在这个 V 之外,还定义了一个“低秩变化预算”之类的量。也就是说,作者不是单纯约束“变化的总幅度”,而是约束“变化所在的空间维度”。这个区分是全部理论结果的源头。
遗憾的定义也要说清楚。R(K) = \sum_{k=1}^K (V_k^* - V_k^{\text{alg}}),其中 V_k^* 是在已知第 k 个情节真实环境时最优策略的期望价值,V_k^{\text{alg}} 是算法在第 k 个情节实际拿到的期望价值。理论目标通常是证明一个高概率上界:以至少 1-\delta 的概率,R(K) 不超过某个关于 S、A、H、K、V、r 的函数。
2.2 低秩变化的数学建模方式
从文献里常见的建模方式看,低秩变化主要有两种写法。第一种是秩约束形式:把每个情节之间的变化向量堆起来,\Delta_k = \text{vec}(P_k - P_{k-1}),然后考虑矩阵 \Delta = [\Delta_1, \ldots, \Delta_K] \in \mathbb{R}^{d \times K},其中 d = S^2 A H 是转移参数维度。假设这个矩阵的秩不超过 r。这种写法的好处是可以用矩阵谱范数、核范数这些成熟工具做分析,坏处是它要求整个变化轨迹落在某个全局低秩子空间里,不允许子空间本身随时间漂移。
第二种是子空间漂移形式:假设存在 r 个基向量 u_1, \ldots, u_r,每个情节的变化都可以写成 \Delta_k = \sum_{i=1}^r \beta_{k,i} u_i 的组合,而且这个基本身可以缓慢演化。这种建模更贴近“低维流形漂移”的现实,但分析难度更大,因为基的估计误差会随时间累积。
从“Structured Variation”这个措辞判断,这篇论文很可能采用了第一种或者两种的混合。真正细节要等全文放出,但可以确定分析框架的核心对象一定是“变化矩阵”的秩或核范数,而不是简单地把所有变化逐元素相加。这也解释了为什么能拿到比 \tilde{O}(V^{1/3} T^{2/3}) 更好的界:有效复杂度从“高维空间中的总变化”变成了“低维轨迹的规模”。
2.3 算法设计的主干思路
这类论文的算法一般是 UCRL 家族的正统后裔:乐观原则加置信集。核心循环是“用历史数据构造当前模型的置信集,在置信集内找最优策略,执行并收集数据,更新置信集”。静态版本就是经典的 UCRL2,非平稳版本额外加了“遗忘机制”来淡化旧数据的影响。
低秩版本的增量模块可以拆成三步:
第一,在线估计变化量。维护当前窗口内的模型估计,对相邻窗口的模型差值做奇异值分解(SVD),把特征值明显偏大的方向当作“活跃变化方向”。这一步的作用是判断环境往哪些方向动了,而不是只判断“动没动”。
第二,用投影后的低秩结构构造更紧的置信集。既然知道变化集中在 r 个方向,那么对模型不确定性的度量就不必覆盖整个参数空间,只需覆盖 r 维子空间及其正交补的估计误差。这比普通滑动窗口的置信集要小得多。
第三,再把“低秩变化预算”而不是“全参数变化量”代入遗憾分析。因为有效参数维度大幅下降,每一步估计的方差更小,最终遗憾中就会出现秩项 r 和“低秩变化量”的组合,而不是被 V 支配。
用一种生活化的方式理解:普通滑动窗口假设“环境在这段时间没变”,变化检测假设“环境会变但会停下来”,而低秩方法假设“环境一直在变,但只在少数几个方向上变”。后者对真实环境的刻画更柔性,所以能在同样甚至更差的信噪比条件下拿到更好的理论保证。
2.4 “最优遗憾界”到底意味着什么
“Optimal Regret Bounds”不是随便说的,它在学术语境里有明确含义:上界与某个理论下界匹配,通常至多相差对数因子。也就是说,作者不仅要证明自己的算法好,还要证明在同样的假设族下不存在本质更好的算法。
读这类论文时我会重点做三个对照检查。第一,上界中对 V、r、S、A、H 的依赖是否同时紧。很多文章对某个参数依赖是紧的,但对另一个参数却松得离谱,这时“最优”要打折扣。第二,下界是否在同一套假设下建立。有些文章上界在低秩变化假设下证明,下界却用一个更松的模型,这属于不对称比较。第三,变差预算的定义是否与上界完全一致。total variation、path-length、low-rank budget 这三种度量在不同论文里经常混用,一字之差结论就不一样。这三个检查也是我希望大家读完本文后能自己上手做的事。
3. 从论文到代码:复现与实验的实操笔记
3.1 实验环境怎么构造才合理
理论论文的实验经常被诟病为自说自话,但构造一个能区分算法优劣的非平稳环境其实很有讲究。我的做法分四步。
第一步,生成一个基础MDP (P_0, r_0)。可以用随机生成,也可以手工设计几个有明显结构的状态簇。
第二步,确定低秩变化方向。生成一个随机高斯矩阵,取它的 SVD 前 r 个奇异向量作为变化基 u_1, \ldots, u_r。标准化保证每个基向量的范数可控。
第三步,让变化沿着这些方向走。每个情节 k 的转移扰动写成 \delta_k = \sum_{i=1}^r \alpha_{k,i} u_i,其中 \alpha_{k,i} 控制变化速度和幅度。把扰动加到 P_0 上之后,必须把转移矩阵每行重新投影回概率单纯形,否则会出现负概率或行和不为 1 的非法矩阵。
第四步,记录真实的 V 和 r。画“遗憾 vs 变化预算”曲线时必须知道真实值,不然没法解释结果。
关键是还要做一个对照组:保持总扰动预算相同,但让变化方向从 r 增加到接近满秩。在满秩对照组里,低秩方法的假设失效,算法应该退化成某种普通非平稳算法。只有这种对照实验,才能真正看出低秩假设的贡献。
3.2 基线与评估协议
我建议至少跑四类基线:静态 UCRL2 作为下界参考;滑动窗口 UCRL,窗口大小 W 走网格搜索;变点检测加重启的 UCRL 变体;折扣因子 \gamma 调参的 Discounted UCRL。如果论文作者公开了代码,直接复用原作者实现最省事,但要注意把所有算法的调参预算对齐,否则比较不公平。
评估指标方面,累计遗憾 vs 情节数 K 是标配。我会额外记录三个东西:不同 V_B 下的最终遗憾值、单次实验的运行时间与内存、以及秩估计的误差。第三点很多人忽略,但它直接反映算法的中间模块是否正常工作。随机种子至少 10 个,报告均值加减标准差,图上用误差条,不用单次轨迹。
3.3 实现中的四个关键细节
第一个细节是秩 r 怎么给。理论界通常假设 r 已知,但工程上你不知道。实现时务必做一个开关:已知秩模式用真实 r,未知秩模式用奇异值阈值法估计——把奇异值从大到小排,保留累计能量占比超过某个阈值(比如 90%)的方向。还要意识到,当变化幅度很小时,估计秩会严重偏大,因为噪声的奇异值也不小。
第二个细节是概率单纯形投影。转移矩阵每一行必须是一个合法的概率分布。最粗暴的做法是 clip 到 [0,1] 再按行归一化,但这样会引入偏差。严格一点用欧氏投影到单纯形,标准算法二十几行就能实现,建议写成单独的函数并加单元测试。
第三个细节是置信半径的缩放。论文里的置信集半径通常带巨大的对数因子和常数,直接照抄可能导致算法过于保守,后悔值全被探索吃掉。我的经验是先按论文原式实现一遍,再对半径的缩放系数做 0.1 到 10 的网格搜索,观察趋势是否稳定。
第四个细节是数值稳定性。转移概率估计中出现零概率会让对数爆掉;SVD 在矩阵行数巨大时速度堪忧。全程用双精度,所有概率计算加 1e-12 的 epsilon,对大 d 的 SVD 考虑用随机化 SVD 加速。
3.4 实验结果的解读方式
画图时我常用两张图。第一张是 log-log 坐标下的累计遗憾 vs 情节数,看斜率。如果上界是次线性,图上斜率应接近 0.5 或 0.33 之类的理论值;斜率接近 1 说明算法实际上没在适应,只是碰巧没爆。第二张是固定 K 下遗憾 vs 变化预算 V_B,看增长趋势。能看清斜率是否符合理论预测。
读自己的结果时警惕三件事。第一,小规模实验的理论收敛性没保证,别用 100 个情节的图去断言“最优”。第二,单条曲线的波动可能来自随机性,必须看多条种子的分布。第三,低秩方法在满秩对照组里表现变差是正常的,那恰恰说明它正确吃到了假设红利,关键看它在低秩环境里是不是真的显著优于基线。
4. 常见问题与避坑指南实录
4.1 变化预算 V 在实践中根本不知道
理论里 V_B 当作已知常数,实际场景中没人给你标好“这周环境总共动了多少”。工程上常见的替代方案有三种:每个情节用最近两个窗口的模型估计值差来估计变化量;根据估计变化量自适应调整窗口长度;用隐马尔可夫式的变点检测器在检测到突变时强制重启。代价是估计误差会叠加进总遗憾,通常多出 \sqrt{K} 量级的额外项。所以工程落地时,别指望理论界的常数值,要给自适应模块留出余量。
4.2 低秩假设失真时的鲁棒性表现
真实环境不会完美满足任何数学假设。我建议实验里加一组 hybrid 测试:\Delta_k = low-rank \text{ term} + \epsilon \cdot full-rank \text{ noise},然后观察算法表现随 \epsilon 的变化。当 \epsilon 从 0 增大,低秩算法会逐渐退化成普通滑动窗口算法,这种平滑退化是值得追求的鲁棒性。如果 \epsilon 很小算法就崩了,说明实现里的秩估计太脆,或者置信集过度依赖低秩假设。
这个实验不仅在研究里有说服力,工程选型时也很有用:它告诉你这套方法对假设偏差的容忍度到底有多少,值不值得为此放弃更鲁棒的经典方法。
4.3 复现理论文章的三个经典坑
第一个坑是常数与事件概率。高概率界里的 \log(1/\delta) 取值随便写的话,置信集可能过紧或过松。我踩过最深的坑是置信集宣称以 0.95 概率覆盖真实模型,但因为联合事件没处理好,实际覆盖概率只有 0.5。排查方法很简单:在代码里记录每个情节真实模型是否落在置信集内,最后算覆盖率。
第二个坑是联合界失效。理论证明通常同时开了好几个高概率事件,实验里如果实现没对齐这些事件,某些随机种子会表现特别差,方差大得离谱。看到这种结果别急着调参,先检查是不是事件没对齐。
第三个坑是底层函数实现错误。SVD、单纯形投影、二分搜索这类子程序出 bug 时是不报错的,只会让结果莫名变差。我习惯每个子函数都写一个对照旧实现的冒烟测试,跑通了再上完整实验。
4.4 快速判断一篇非平稳RL论文值不值得细读
读这类论文前我会问自己三个问题。第一,变化度量是什么?V、path-length、分段数、低秩预算——度量越细,结果越强,但也越容易过拟合到度量定义上。第二,上界和下界是否在同一模型下?上界漂亮但下界用简化模型,这种“最优性”参考价值减半。第三,假设有没有实际验证?纯理论不放实验可以理解,但如果放了,要看环境是否真的低秩、基线调参是否公平。这三个问题能过滤掉相当一部分看似惊艳实则注水的文章。
5. 我的一些个人体会与后续思考
从读博到现在,我一路看着在线学习和强化学习的理论工具从静态走向非平稳。这个领域近几年的进化轨迹很清晰:从“假设环境分段恒定”到“用总变化量约束环境”,再到“刻画变化的结构”。低秩变化假设在我看来是这条路上一个很重要的拐点,因为它在现实可解释性与数学可处理性之间找到了平衡点——它不像分段恒定那样苛刻,又不像纯总变化量那样粗放。
如果你对这个方向感兴趣,我给三条建议。第一,先用 toy environment 建立直觉,别一上来啃满页的引理,把“什么场景下低秩假设成立”想清楚比背证明有用得多。第二,把秩估计当作一个独立的小研究问题来对待,很多应用落地卡在的不是主算法,而是秩估计算法在噪声下的稳定性。第三,盯紧作者后续放出的代码,这类理论文章的参考实现里通常藏着大量论文没写清楚的工程细节。
最后再分享一个我在复现过程中的小技巧:永远把“Oracle 版本”跑出来。自己实现的方法先给它喂真实的变化方向,看遗憾上界能不能达到理论预测;再切换到纯在线估计。如果 Oracle 版本都达不到预测,说明主算法或环境生成器有问题;如果 Oracle 版本很好但在线版本崩掉,问题一定出在变化估计模块。这个二分定位法,能给你省下大量的排查时间。