WarpSAC 算法:经验一秒刷几万条,为数据稀缺设计的保守技巧该拆几件?
数据一秒刷出几万条之后,为"经验稀缺"打造的稳定器还该全开吗?
想象一间训练室换了设备。过去 off-policy 强化学习跑在单环境加 CPU 回放上,一个小时的训练只攒得下几十万条经验,样本稀缺到每条都要物尽其用。今天 GPU 并行仿真把上百个环境同时铺开,一次训练要吞下约 5×10⁷ 步环境交互,经验以每秒数万条的速度涌进回放池。同样的算力,换来的经验多了一个数量级。数据不再是瓶颈,可训练配方还是老配方。这篇论文问的就是:当"数据稀缺"这个前提不再成立,当年为它量身定做的保守技巧,还该不该整体保留?
为什么数据富余会让旧稳定器"全开"成问题?最直接的一层答案藏在前提里:这套全开处方本身就是按稀缺时代写出来的,每个默认值都预设了数据少。论文用"数据体制"这个词指代训练时经验数据的富余程度,它是判断算法设计前提的那把尺子。WarpSAC 把当前的训练条件分成两档:CPU-scale 是单环境加 CPU 回放,回放池 10⁶ 条、batch 512、总步数约 10⁶;GPU-parallel 是 1024 个并行环境加 GPU 回放,回放池 10⁷ 条、batch 2048、总步数约 5×10⁷,数量级差了一整档。而绝大多数算法的默认配方,仍是数据稀缺时代传下来的那一套。要求全开旧稳定器,等于默认训练还站在数据稀缺的那一档上,可越来越多的新任务已经站在了富余的那一档。前提错位,处方自然跟着错位。

图注:WarpSAC 论文 Figure 1 的全景图。左列是真实与仿真环境里的 Unitree G1 走行截图,中间是 Unitree-G1-Flat 的样本效率与训练墙钟时间两条曲线,右列是 CPU-scale 与 GPU-parallel 两档体制下的归一化学习曲线汇总。它只负责交代大局,不读具体数值。WarpSAC
第二层答案更本质:问题出在瓶颈换了位置,全开处方的代价跟着换了边。论文摘要里有一句关键的判断:当经验从稀缺转为富余,瓶颈会从"获得足够的数据覆盖"变成"在海量数据里拟合并利用高价值行为"。训练目标没有变,但敌人换了 WarpSAC。随之被压斜的,是探索与利用的天平:数据稀缺时,算法的主要矛盾是覆盖不足,策略必须主动探索,把没见过的地方都摸一遍;数据富余后,覆盖不再是问题,难的是从海量经验里挑出值得学的部分,把有限的更新预算花在高价值行为上。为前者设计的技巧偏爱保守,为后者设计的技巧应该偏爱精准。两种体制要的东西方向相反,这决定了为稀缺准备的全套保守件,在富余体制下可能从良药变成枷锁。
第三层答案落在时间上:这个问题现在非回答不可,是因为"数据富余"已经从纸面设想变成铺开的工程现实。GPU 并行仿真框架近两年密集开源,Isaac Lab、MuJoCo Playground、mjlab 这类框架用单卡 GPU 就把训练压到分钟到小时级 Isaac Lab Playground mjlab。此前的 FlashSAC(WarpSAC 的直接前作与基线)已经证明 off-policy RL 可以吃下大数据吞吐,并把全部稳定化手段默认全开:Unitree G1 的平地行走训练从 PPO 的约 3 小时压到约 20 分钟,粗糙楼梯攀爬从约 20 小时压到约 4 小时 FlashSAC。"数据体制正在改变"是被工程反复验证过的事实,可这份"全开"处方是否还配得上新体制,没人逐一验过。而 WarpSAC 要做的,正是把"默认全开"拿回实验室,拆开检验每一件到底值不值。
为"数据稀缺"而生的稳定器:没有它们训练会崩,可它们本身也保守
先把共同底座说清楚。WarpSAC 和 FlashSAC 都长在 SAC 这棵树上:SAC 是最大熵的 off-policy actor-critic,优化回报与策略熵之和,让策略保持随机、避免过早收敛 SAC。熵奖励的直觉是给"尝试"本身发工资,策略因此不会早早锁死在某条路线上。它的训练循环是标准的"采集、回放、更新"三步:策略与环境交互,把每条转移写进回放缓冲池,再从池里随机采样 batch 来更新两个 Q 网络和策略,目标网络用指数滑动平均缓慢跟进。off-policy 的妙处在于历史经验可以反复利用,样本利用率高;代价是池子里的数据来自不同时期的策略,分布一直在漂移,这正是后面一切稳定器的战场。
骨架里其实还有第三件稳定器,目标网络。自举更新里,如果让刚更新的 Q 网络同时当自己的老师,目标会追着学生跑,训练容易振荡;把一份旧参数的快照冻在原地、用指数滑动平均慢慢跟进,相当于给学习配了一把稳定的标尺。它是几乎所有 off-policy 方法的共用底料,论文这次没有把它纳入拆轴的对象,但它同样是"为稳定而设计的保守件"。
这个骨架里嵌着两类"稳定器",都是为数据稀缺时代设计的。
第一类是 clipped double-Q(裁剪双 Q)。它出自 TD3:两个独立初始化的 Q 网络,目标值取两者中的较小者 TD3。动机是一条冷静的因果链。函数近似误差会让 Q 值系统性高估,被高估的动作又被下一轮策略更新进一步强化,形成恶性循环。数据越少,估值越要外推到没见过的状态动作对上,高估越严重。取 min 是故意引入一个保守偏置,因为低估比高估安全,被低估的动作不会被策略放大。min 算子还有一个统计直觉:一组随机估计的期望最小值会随方差增大而减小,所以取最小值天然偏向那些估计得稳的状态动作对。它牺牲的是一点点低估,换来估值曲线不被高估的假象带偏。这是教科书级的保守设计。
第二类是参数归一化。以 SimBa 为代表的研究把归一化从"训练技巧"升级成"网络结构的一部分":RSNorm 层、残差前馈块、末尾的 Post-LN 三件套直接嵌进 actor 和 critic 网络,约束特征的尺度,让大模型在非平稳数据上不被早期的坏样本带偏 SimBa。SimBa 的解释是它把网络初始化约束到偏好简单函数的族里,训练分布不断漂移时依然保得住泛化。CrossQ+WN 从有效学习率的角度补了一句:高频更新下权重范数疯长,每一步实际移动的步长会缩水,把权重锁在单位球上等于把学习率钉住 CrossQ+WN。到了 FlashSAC 手里,这类 norm 约束连同分布型 critic 一起塞进 actor/critic 共用的 backbone,一套"全开处方"就此定型 FlashSAC。

图注:SimBa 提出的网络架构:左侧 RSNorm 层处理观测,中间串接多个带 pre-LayerNorm 的残差前馈块,末尾 Post-LN 之后才接 actor/critic 头。归一化不是加在损失函数上的开关,而是网络结构本身的一部分。SimBa
稳定器有价值吗?当然有,没有它们,actor-critic 在数据少的时候会崩。但这里有个值得停下来想一想的细节:这些稳定器全都自带"保守"的基因。取 min 主动压低估计,归一化主动压缩表达空间。数据稀缺时,保守是生存所需。可当数据变得富余,同样的保守会不会从良药变成枷锁?这正是下一节的实验要回答的。
数据富余后,哪些稳定器从良药变成了枷锁:拆开三根轴的受控实验
验证"稳定器是否取决于数据体制",最怕糊成一团的对照实验。如果只比较"SWD 有"和"SWD 无",你永远说不清收益来自回放加权还是别的组件。WarpSAC 的做法是拆轴,把论证可信度的支点立在这里:固定 FlashSAC 的 backbone、优化器、网络结构,只独立旋转三根轴。回放端在 uniform 采样和 SWD 之间切换;参数归一化开或关;critic 在单 Q 和双 Q 之间切换。三根轴各转各的,再拿到两档数据体制里各测一遍 WarpSAC。
只在一个体制里做消融是不够的。一个稳定器完全可能在窄覆盖下是良药、在宽覆盖下是枷锁,单体制实验只会得出"它有效"或"它无效"的片面结论。论文同时测两档,才把"体制依赖"这件事本身测了出来。
换个角度说,如果直接拿"加满组件的 WarpSAC"和"缺斤少两的 FlashSAC"对撞,两者差了三件事,赢了也不知道赢在哪。拆轴的意义就是把归因做干净,每一件稳定器的功过都单独过堂。
结果浮现出一张干净的模式表。
| 实验轴 | CPU-scale 数据受限 | GPU-parallel 数据充足 | 结论 |
|---|---|---|---|
| 参数归一化 | 开着最强,帮价值拟合 | 关掉持平甚至更强 | 体制依赖 |
| clipped double-Q | 保留 | 高吞吐操作可放松(ManiSkill 上单 Q 最强) | 体制依赖 |
| SWD 回放加权 | 稳定提升 | 稳定提升或持平 | 体制无关 |
参数归一化是体制依赖的。在窄覆盖的 CPU 任务上,开着它是最稳的配置;但在 IsaacLab、MuJoCo Playground、MJLab 这些 GPU-parallel 基准上,关掉它与开着持平甚至更强。论文给出的解释是:覆盖足够宽之后,归一化压缩特征动态范围的副作用压过了稳定收益,反而限制了价值拟合。
clipped double-Q 在数据充足的高吞吐操作任务上可以松绑。最典型的证据在 ManiSkill 基准:换用单 Q 并关掉归一化的 WarpSAC-A 拿到了最强最终回报。论文把这一结果解读为"数据充足时,critic 的悲观偏置已经没有存在的必要"。
SWD 是唯一体制无关的组件,两档体制下都稳定提升。尤其当网络容量受限时,它的收益最大。容量实验里,在单残差块的配置下,SWD 把 humanoid-run 的最终回报从 209.93 拉到 467.39,翻了一倍以上;残差块增多后,收益在已饱和的任务上收窄,但在更难的 HumanoidBench 任务上仍然可见 WarpSAC。把这些数字连起来,论文实际验证到的事实是:SWD 的收益与网络容量、任务难度存在交互,容量越小收益越大,容量增大后收益收窄但不消失。至于背后为什么,论文提出了一个解释方向:容量受限时函数近似器难以均匀消化整个回放池,把采样权重压到与当前策略更相关的样本上,更新效率就高了。但这一步只是论文给出的可能机制,容量实验本身测的是最终回报,并没有直接验证这条内部因果链,解读时不能把它当成既定事实。

图注:CPU-scale 容量消融图。四个任务分别在 1、2、3 个残差块的配置下对比 WarpSAC-L(深色柱)与 FlashSAC(浅色柱)的最终回报,两者只在回放加权上有差别。单块时差距最大,块数增多后差距收窄。WarpSAC
注意这三条结论摆在一起的分量:没有一个稳定器是普适的。"默认全开"的处方假设所有稳定器在任何体制下都该存在,这张表却说每个稳定器都有自己的适用区间。还有一层意思值得点破:这张表不是说 norm 有害、双 Q 无用,在 CPU 侧它们依然是正收益。它说的是收益的符号和大小随体制移动,而"默认全开"把 GPU 侧的负收益也一并吞了进去。该拆的,恰好是在富余体制下变成枷锁的那几件。判断它该不该开,先看你站在哪一档。
答案不是再发明一件稳定器,而是按数据体制开关已有的件:WarpSAC 家族
先看体制无关的那个组件。SWD(Sample Weight Decay,样本权重衰减)是回放缓冲池内部的采样加权:每条样本按年龄线性衰减权重,样本越老权重越低,权重下限 w_min 保证老样本不会被彻底丢光。用公式写就是 w_t(i) = max(w_min, 1 − A_t(i)/T_decay),其中 A_t(i) 是样本在采样时刻的年龄。直觉上可以把 SWD 想成新闻推送的时间衰减:刚发生的事最相关,曝光最多;几天前的旧闻还在,但推送概率随时间线性下滑,而 w_min 就像读者保留的常读频道,保证极其老但可能重要的样本不被完全遗忘。WarpSAC 用它的理由是:把采样权重压在新样本上,把学习的误差预算集中到与当前策略相关的转移上,等效于在不改 update-to-data 比值的情况下抬高了有效更新频率 WarpSAC。update-to-data 比值就是每收集多少条数据才做一次梯度更新,它没变,但每次更新吃进去的样本更有营养了。
SWD 本身不是新发明,它来自同组研究者此前的工作,原始动机是缓解训练中后段的可塑性损失。要注意,原论文在 Humanoid Run 上报告 UTD=5 时收益最大,提升 30.1%,跨算法综合区间 13.7% 到 30.1%,这些数字属于 SWD 自己的论文,不能安到 WarpSAC 头上 SWD 原始论文。WarpSAC 把它搬过来,重新解读成了 exploitation 导向的采样策略。
衰减的方向对不对,也被验证过。把权重反过来、给老样本更高权重(叫 SWA),性能、梯度幅值、可塑性指标三个面板全线下滑。这证明"越新越值钱"的衰减方向才是关键,不是随便加权就行 SWD 原始论文。

图注:SWD 原论文的反向验证图。三块面板分别是性能、梯度 L1 范数和 GraMa 可塑性指标,给老样本更高权重的 SWA 在三个面板上都明显更差,说明按年龄衰减的方向正确性是关键。SWD 原始论文
处方本身没有任何新组件,只是把上一章的实验结果翻译成开关:
| 算法 | 回放采样 | 参数归一化 | critic | 适用数据体制 |
|---|---|---|---|---|
| FlashSAC(baseline) | uniform | 开 | 双 Q | 全开处方 |
| WarpSAC-L | SWD | 开 | 双 Q | CPU-scale,数据受限 |
| WarpSAC-A | SWD | 关 | 单 Q | GPU 并行,数据充足 |
WarpSAC-L 给数据受限的 CPU 场景,SWD 常开,Norm 和双 Q 按旧经验保留。WarpSAC-A 给数据充足的 GPU 场景,SWD 常开,Norm 关掉、双 Q 换成单 Q。每个开关都直接来自受控实验的结论,一行新组件都没加。家族里所有变体共享同一套 backbone、优化器与日志管线,只动三根轴,所以变体之间的差异可以直接归因到对应的开关上,处方表里的每一格都有实验背书。实现上 SWD 也没有成为负担:CPU 端用 2000 桶近似采样,把单次采样耗时从 3.263 毫秒压到 0.959 毫秒,GPU 端跑精确版本也只花 1.751 毫秒。论文真正新增的,是"按数据体制配药"这个思路本身。
验证时刻:八个基准家族的成绩单,和一台 35 分钟落地的真机器人
评估的覆盖面本身就是论证的一部分。论文横跨八个 benchmark 家族:DMC、HumanoidBench、Gym-MuJoCo、MyoSuite 站在数据受限的 CPU 侧,MuJoCo Playground、MJLab、IsaacLab、ManiSkill 站在数据充足的 GPU 侧,一共 67 个任务。结论不是从一两个环境里抽出来的,而是横跨两档体制、多种任务形态的普遍模式 WarpSAC。
怎么判断学得快不快?论文用两类指标:normalized score-step AUC(归一化得分-步数 AUC)衡量每消耗一步环境交互学到多少分,wall-time AUC 换成每消耗一秒墙钟时间学到多少分。用 AUC 而不是终点分数,是因为要比的是学习效率曲线本身,不是谁最后多拿那一分。终点分数高可能是多跑了十万步换来的,AUC 高才是真的学得快 WarpSAC。
成绩单分两栏。CPU-scale 的 9 个环境上,WarpSAC 的归一化得分-步数 AUC 平均相对 FlashSAC 提升 4.5%;GPU-parallel 的 14 个环境上,同样的指标平均提升 23.1%。这个落差本身就是结论:数据越富余,配对处方的收益越大,正好印证"稳定器该随体制调整"的判断。两个数字都是 5 个随机种子下的均值,不是挑出来的最好一次 WarpSAC。
为什么 GPU 侧的提升反而更大?因为数据富余正是旧处方错配最严重的地方,稳定器在那里从良药变成枷锁,拆掉它们自然收益最大。论文的报告口径是 5 个随机种子,RL 训练方差大,单次运行说明不了问题,种子之间的稳定性才扛得住比较。
再看三个更接近真实用途的数。UnitreeG1TransportBox-v1 出自 ManiSkill 家族,是给 Unitree G1 人形机器人搬箱子的任务,WarpSAC-A 把成功率从 FlashSAC 的 19.8% 提到 96.4%。这不是"快几个百分点"的刷榜式提升,而是从基本不可用跨到工程可用。MuJoCo Playground 的 4 个任务上,WarpSAC 的平均归一化 wall-time AUC 提升 19.1%,这个数字所在的仿真平台就是 MuJoCo Playground Playground。
最重头的是真机部署。29 自由度的 Unitree G1 走平路,采用不对称 actor-critic:部署的策略读 98 维的 actor 观测,训练用的 critic 额外读 211 维的 privileged 观测,也就是训练时才能看到的完整状态信息。为了对比公平,PPO 基线还额外加了 bfloat16 与 torch.compile 的强化,不是拿裸实现来垫背。结果是在单卡 A800 上,WarpSAC 大约 35 分钟达到目标性能,FlashSAC 大约 55 分钟,墙钟时间缩短 36.4%。对工程师来说,这意味着同样的部署目标省下了超过三分之一的机时 WarpSAC。
图注:论文项目页的演示片段,真机 Unitree G1 的步态运行,对应正文"35 分钟落地真机器人"的部署验证环节。WarpSAC
把 35 分钟和 55 分钟画成曲线,能更直观地看到差距来源。

图注:Unitree-G1-Flat 的 sim-to-real 学习曲线。左面板是样本效率,右面板是墙钟时间,三条曲线对应 WarpSAC、FlashSAC 与 PPO,阴影是 5 个种子的标准差范围。WarpSAC
这组数字放到一起看,有一个共同的解读:在论文报告的任务与指标上,当数据体制切到富余档、按体制卸下保守组件,效率和成功表现是同时提高的,训练曲线整体往上抬了一档,连成功率这种"硬指标"也跟着翻身。至于稳定性,只能说在这些有限实验条件下没有观察到损失,单凭这几项指标并不足以把它证明成一般性结论。
方向之变:进步也可以来自"按体制卸下",以及这份处方还没答完的事
这篇论文值得记住的,不是某个具体数字,而是一个方向的转变。过去几年 off-policy RL 的进步叙事大多是"再加一个稳定器":FlashSAC 全开 norm 约束,SimBa 把归一化做成默认 backbone。WarpSAC 证明的是另一条路:大规模 off-policy RL 的进步,也可以来自按数据体制卸下保守组件。加组件和卸组件都是结构性的进步,关键看数据体制站在哪一边 WarpSAC。
对实践者,选型判断不复杂:数据少、走 CPU 训练,用 WarpSAC-L;数据富余、走 GPU 并行仿真,用 WarpSAC-A。拿到一个新任务,判断步骤其实只有两步,先看你的训练吃的是单环境 CPU 回放还是 GPU 并行仿真,再决定用哪个变体。但有一条明确的限定不能忘:WarpSAC-A 并非在每个高吞吐任务上都最优,论文明确指出它在 MJLab 的 rough-terrain G1 任务上不够稳定,critic 端的保守策略在 GPU-parallel 内部仍是任务相关的,不能无脑全用 WarpSAC。
这服药方也还有没答完的问题。其一,体制选择目前是离线的,先用哪个变体由目标环境预先决定;如果要做"先窄数据预训练、再并行 fine-tune"这类跨体制部署,论文自陈还缺一个在线自适应版本,自然的方向是把体制从二分变成连续信号,监控回放覆盖或价值外推程度,在线调节归一化强度与 critic 数量。其二,研究只旋转了三根轴,熵的温度、目标网络更新延迟、梯度裁剪、replay-ratio schedule 这些经典稳定器是否同样体制依赖,仍是开放问题。其三,SWD 的权重下限和衰减步数(CPU 用 80k、GPU 用 2k)都是经验值,论文没有给出选择准则。这套"按体制配药"的逻辑能否搬进 offline RL 和 on-policy 场景,也是留给后续的考题 WarpSAC。
把镜头拉远一点。"分钟级训练加零样本部署"的节奏并不是 WarpSAC 一家的口号。MuJoCo Playground 已经用四足 Go1、Berkeley Humanoid、LEAP Hand 灵巧手和 Franka 机械臂在真机上示范过:被踢一脚仍稳定行走、在湿滑表面跟踪指令、手里翻动方块 Playground。

图注:MuJoCo Playground 论文里的四组真机部署实拍:Go1 被踢后继续行走、Berkeley Humanoid 在湿滑表面跟踪角速度、LEAP Hand 翻动方块、Franka 旋转积木。它们展示的是整个生态的背景节奏,图中不是 WarpSAC 的成果。Playground
WarpSAC 的贡献,是把"训练配方"这一环也压进了这个节奏:食谱不再是一锅乱炖地加稳定器,而是看菜下碟、按数据体制配药。数据稀缺时,保守是美德;数据富余时,卸下保守才是美德。这份"按体制配药"的原则,比任何单一数字都更值得带走。
想深入可以读原文:WarpSAC: Towards the Pinnacle of Scalable Off-policy RL by Rethinking Exploration and Exploitation:arXiv:2608.24479
参考文献
- WarpSAC 论文:WarpSAC: Towards the Pinnacle of Scalable Off-policy RL by Rethinking Exploration and Exploitation
- FlashSAC:FlashSAC: Fast and Stable Off-Policy RL for High-Dimensional Robot Control
- SAC:Soft Actor-Critic: Off-Policy Maximum Entropy Deep RL with a Stochastic Actor
- SWD 原始论文:The Rank and Gradient Lost in Non-stationarity: Sample Weight Decay for Mitigating Plasticity Loss in RL
- TD3:Addressing Function Approximation Error in Actor-Critic Methods
- SimBa:SimBa: Simplicity Bias for Scaling Up Parameters in Deep Reinforcement Learning
- Isaac Lab:Isaac Lab: A GPU-Accelerated Simulation Framework for Multi-Modal Robot Learning
- MuJoCo Playground:MuJoCo Playground
- mjlab:mjlab: A Lightweight Framework for GPU-Accelerated Robot Learning
- CrossQ+WN:Scaling Off-Policy RL with Batch and Weight Normalization