让真机强化学习从“难用”走向“可复现”的强化学习框架 ----(4)算法篇(DrQ vs VICE)

发布时间:2026/7/20 19:02:27
让真机强化学习从“难用”走向“可复现”的强化学习框架 ----(4)算法篇(DrQ vs VICE) 0x00 概要本篇主要介绍 DrQ 和 VICE机器人必须通过像素看世界DrQ 解决了视觉特征提取的泛化难题。VICE 解决了真实世界没有代码奖励的问题让机器人拥有了成就感。SERL-DrQ-VICE注本系列的最终目标是“通过一系列相关项目/算法的解读来深入学习/分析/反推 LWDLearning while Deploying这篇论文的机理和可能实现”。之所以从SERL入手是因为 SERLHIL-SERLSOP没有开源都是罗剑岚博士的一系列论文可以从中管窥作者的思路脉络。本文依然是从工程/论文进行反推还请读者不吝指出问题多谢。0x01 奖励与自动化从手写 reward 到 learned reward真实机器人任务的 reward specification 是 SERL 重点解决的问题之一。某些任务可以用机器人状态直接定义例如 PCB 插入可以根据末端或物体位置设计奖励在这种情况下奖励函数可以由一个二元分类器提供该分类器接收状态观测 s 并输出一个二元” 事件”e发生的概率对应于任务的成功完成。奖励随后由 r(s) log p(e|s) 给出。但多数任务需要从图像中判断是否完成。比如电缆是否正确卡入槽位“物体是否被放到正确 bin 里”往往需要视觉判定手工设计一个好的奖励函数本身就是一个耗时且需要领域专长的任务。SERL 支持三类奖励方式手写奖励适用于状态足以判断成功的任务二分类成功判别器用成功/失败图像训练 classifierVICE把 reward classifier 与 RL 过程结合在训练中利用策略产生的负样本更新分类器SERL-reward1.1 Success Classifier用少量图像训练自动裁判用户可以采集少量成功与失败图片训练一个轻量视觉分类器。该分类器在训练过程中输出成功概率或二值 reward。即人只需要定义成功 / 失败样本之后系统就能自动在训练中判断 reward。这就是自动裁判Success Classifier:Success Classifier 是离线训练专用是简单的端到端结构架构 基于轻量级视觉分类器利用少量正负样本图像快速预训练。职责 在训练过程中实现 Reward 自动化使系统具备无人值守的自我优化能力。流程: 先收集正/负样本 pkl → BCE loss 训练 ResNet-10 冻结 MLP head → 保存 checkpoint → 加载到 env wrapper 中作为固定奖励函数这里需要注意SERL 不是完全不需要 reward而是提供了工具让 reward specification 更容易、更自动化。SERL 的目标不是消除 reward 设计而是降低 reward engineering 的成本。1.2 VICE把奖励分类器也纳入训练VICE 将奖励学习看成类似 GAN 的过程策略像 generator不断产生新样本reward classifier 像 discriminator判断哪些状态是成功事件。这样随着策略分布变化classifier 可以用策略产生的新负样本继续训练避免只在初始数据上过拟合。这种设计让奖励系统能够自适应策略的进化。初始阶段classifier 在人类标注的样本上训练随着策略能力的提升classifier 可以从策略产生的经验中学习更细粒度的成功模式实现奖励的持续改进。VICE 是在线训练 支持 return_encoded / classify_encoded 模式serl-main/serl_launcher/serl_launcher/agents/continuous/vice.pyVICEAgent 继承自 DrQAgent, 分类器嵌入 agent 内部, 与 RL 训练交替在线更新额外正则化: Mixup Label Smoothing Gradient Penalty0x02 DrQ vs VICE在具身智能和强化学习的语境下DrQ 和 VICE 是两套针对不同痛点的经典 Agent代理架构。简单来说DrQ 是为了 “看得更清”而 VICE 是为了 “罚得更准”。VICE上帝之眼解决是否到达通过分类器提供平滑、客观的奖励信号。视觉鲁棒性DrQ随机裁剪对 s 和s′使用不同偏移强迫网络学习物理特征而非像素坐标。共享编码器Actor 和 Critic 共用 ResNet-10加速特征收敛。这样可以视觉与硬件包装眼手合一。2.1 DrQ Agent (Data-regularized Q-learning)用途解决 “从图像直接学习动作Pixel-to-Action” 时的样本效率和泛化问题。它的痛点 如果直接把原始图片丢给 RL 模型机器人很容易 “只看局部”或者因为光线变了一点就完全不会动了。核心特色图像增强Data Augmentation 一致性。做法机器人每看到一张图DrQ 会在后台生成它的几个 “微调版”比如随机裁剪 4 个像素、稍微改变亮度。Q-Learning的一致性 DrQ 强制要求模型对这几张 “微调版” 照片预测出的 Q 值必须是一样的。优点极强的稳定性 DrQ 像是在训练时给机器人戴上了各种滤镜强迫模型学会看透事物的本质特征。极高的样本效率 即使数据量很少通过图像增强模型也能学到稳健的特征。2.2 VICE Agent (Variational Inverse Control with Events)用途 解决 “自动定义奖励Reward” 的问题特别是针对那些难以用数值描述的 “事件”。它的痛点 你怎么告诉机器人 “盖子盖紧了”你很难写代码去算角度。核心特色反向学习Inverse RL 事件判定。做法 开发者给机器人看一堆 “成功的快照”。比如 20 张盖好盖子的照片。VICE 会通过这些照片训练一个判别器Classifier。特色奖励 在机器人自己尝试时VICE 会根据它当前的画面 “多像” 那堆成功快照自动产生一个 θ 到 1 之间的分值。优点零代码定义 Reward 只要有成功的照片你就拥有了奖励函数。“事件” 驱动 它的逻辑是 “我只要结果那个状态”非常适合解决那些结果明确但过程复杂的任务如扣上纽扣。2.3 Agent体系在 SERL 中SACAgent 是核心基类。2.3.1 SACAgent 核心机制SACAgent 核心机制 功能critic_loss_fn() Clipped Double Q ensemble min 可选 entropy backuppolicy_loss_fn() 标准 SAC actor 目标Q−a⋅logπtemperature_loss_fn() Lagrange 乘子自动调温update_high_utd() 关键优化UTD ratio 多次 critic 更新 1 次 actor 更新用 jax.lax.scan 实现 JIT 内循环update() 支持选择性更新子网络networks_to_update 参数2.3.2 继承体系DrQAgent 和 VICEAgent 是 SACAgent 的子类。这意味着它复用了 SAC 的所有稳定机制双 Q、熵自动调节只是在输入端加了一层图像处理逻辑。DrQAgent 增强 (drq.py)对 observations 和 next_observations 做 random crop 数据增强支持 3 种编码器small (4 层 CNN)、resnet从零训练、resnet-pretrainedImageNet 预训练 ResNet-10 冻结 可训练 pooling headVICEAgent 奖励学习 (vice.py)用 Binary Classifier 替代手工奖励函数训练技巧Mixup Label Smoothing Gradient Penalty防 GAN 模式崩塌推理时sigmoid(logit) 0.5 → reward1, 否则 reward0SACAgent (sac.py:21)├─ create_pixels() → 像素输入共享/独立编码器└─ create_states() → 状态输入无编码器└─ DrQAgent (drq.py:23) 继承 SACAgent├─ create_drq() → 支持 small/resnet/resnet-pretrained 编码器├─ data_augmentation_fn() → 随机裁剪增强├─ update_high_utd() → 高 UTD 比率训练关键优化└─ update_critics() → 仅更新 Critic└─ VICEAgent (vice.py:26) 继承 DrQAgent├─ create_vice() → 额外 VICE 分类器网络├─ update_vice() → BCE Mixup Label Smoothing 梯度惩罚├─ vice_reward() → 用分类器替代手工奖励└─ update_high_utd() → 用 VICE 奖励替换环境奖励2.4 深度对比表特性 DrQ Agent VICE Agent主要任务 视觉表征学习把图看透。 奖励函数生成把分打准。核心技术 随机裁剪、平移Augmentation。 基于正负样本的对抗学习 / 判别。解决的难题 图像噪声、过拟合、泛化差。 奖励函数难写、信号稀疏。在 SERL 里的位置 作为视觉主干Backbone的增强。 作为自动裁判Reward Classifier的原型。0x03 DrQ让视觉 RL 更稳健真实机器人通常使用图像观测。如果直接用像素训练视觉过拟合会非常严重。DrQ 的核心是对图像做数据增强例如 random crop让策略不要记住某个固定像素位置而是学到更鲁棒的视觉特征。SERL 的 DrQAgent 在 SAC 基础上增加了图像增强和视觉编码器支持。3.1 数据增强的作用DrQ 最重要的特性是 random crop 数据增强。这在真实机器人环境中尤为关键视觉正则化阻止模型记住绝对像素位置强迫其学习鲁棒的空间特征对真实世界的适应性真实环境中光照、背景、物体位置都会有微小变化数据增强让模型对此具备天然的泛化能力特色解释为什么 DrQ 在 SERL 中不可或缺像素级鲁棒性如果没有 DrQ 的数据增强机械臂只要位置偏了一点或者光照变了一下RL 就会失败。DrQ 通过随机裁剪让网络学会关注物体本身而不是物体在图像中的绝对坐标。极致的性能在 update_high_utd中可以看到 DrQ 是在进行高 UTD 更新之前先做一次数据增强。细节由于 batched_random_crop 是在 JAX 内部实现的它运行在 GPU 上。相比于在 CPU 上做增强再传给 GPU这节省了巨大的数据传输开销。论文实验中使用了 ImageNet 预训练 ResNet-10 作为视觉 backbone并连接到 MLP。观测包含相机图像和机器人本体信息例如末端位姿、速度、力、力矩等。3.2 视觉编码器体系3.2.1 EncodingWrapper特征融合 设计EncodingWrapper 是 SERL 处理视觉和本体感知输入的核心封装多图像键支持dict of encoders帧堆叠处理rearrange(image, “T H W C - H W (T C)”) 和 rearrange(image, “B T H W C - B H W (T C)”)本体感知融合Dense → LayerNorm → tanh → concatstop_gradient 支持允许冻结视觉编码器将视觉像素与本体感知关节角度拼接。视觉告诉你物体在哪本体感知告诉你手在哪。眼手合一是精细操作的前提。编码器选项SmallEncoder4 层 Conv (32→64→128→256) Spatial Softmax bottleneckResNet-10 (from scratch)10 层 ResNet Spatial Learned EmbeddingsPreTrained ResNet-10ImageNet 预训练冻结 可训练 pooling headSpatial Softmax / Spatial Learned Embeddings 是一个关键设计它们将卷积特征图转为空间坐标的加权期望保留空间信息同时大幅降维。这比全局池化更能保留空间位置信息对机器人视觉任务至关重要。3.2.2 视觉 - 本体感知 Fusion 详解在 SERL 中观测数据结构如下observations {“image1”: (T, H, W, C), # 相机1图像帧栈“image2”: (T, H, W, C), # 相机2图像帧栈“state”: (T, D), # 本体感受 (tcp_pose, tcp_vel, gripper, force, torque)}EncodingWrapper 的处理流程如下SERL-EncodingWrapperLate Fusion 设计视觉和本体感受各自独立编码最后拼接。这不是 Early Fusion而是有深刻的设计考量模态异质性图像是 2D 空间信号适合卷积state 是 1D 向量适合全连接梯度隔离Late Fusion 允许对视觉编码器做 stop_gradient冻结视觉特征只训练本体感受分支本体感受的 LayerNorm tanhstate 的各维度量纲差异大位置 vs 速度 vs 力归一化到统一尺度限制范围避免梯度爆炸3.2.3 多任务接口条件代码中预留了但未使用的多任务接口功能 状态GCEncodingWrapper Goal-Conditioned: obs goal 图像 fusion 代码存在但未被任何 Agent 使用LCEncodingWrapper Language-Conditioned: obs 语言指令 fusion 代码存在但未被任何 Agent 使用这些接口为未来的多任务学习或条件策略扩展预留了空间。3.3 算法实现3.3.1 DrQAgent 网络架构由于 DrQAgent 继承 SACAgent其网络架构基本相同但有以下关键差异特性 SACAgent DrQAgentActor架构 编码器MLP[256,256] 相同Critic架构 编码器Ensemble MLP[256,256]×2 相同数据增强 无 随机裁剪(4像素填充)训练稳定性 标准SAC 增强提高泛化3.3.2 编码器选择DrQAgent 支持多种编码器类型SmallEncoder轻量级4层卷积网络ResNet-10中等深度ResNetResNet-10-PretrainedImageNet预训练的ResNet-103.3.3 async_drq_sim.py代码细节以 async_drq_sim.py 为例SERL 的训练流程是典型的异步 actor-learner 架构Learner 初始化创建 TrainerServer注册 replay buffer等待数据填充Actor 初始化创建 TrainerClient连接 LearnerActor 循环采样动作前 N 步随机之后用策略env.step() → 收集 transition → data_store.insert()定期 client.update() → 推送数据定期 evaluate() → 发送 stats4. Learner 循环