Human-gated DAgger 纠错数据
Human-gated DAgger(Dataset Aggregation)是一种让策略先自主执行、只在需要时请求人类示范的后训练数据流程。它的重点不是把所有人工操作都收集成示范,而是把“策略在什么状态下开始不可靠、人工怎样恢复、恢复后是否真的完成任务”记录成可回放的纠错样本。
本文把一次纠错看作原始 episode 的一个有边界片段:策略 rollout 是输入,人工接管和验证结果是新增标签,经过质量检查后才进入下一轮 post-training。Episode 与 Trajectory 的边界语义可参考 Episode 与 Trajectory 数据设计,VLA 的动作和评测契约可参考 VLA 模型与主流验证方法。
一次纠错如何发生
Section titled “一次纠错如何发生”1. 策略自主 rollout
Section titled “1. 策略自主 rollout”给定任务指令、初始场景和机器人状态,策略读取连续观测并输出动作。记录器不能只保存最终成功或失败,还要保存每个 step 的观测、原策略动作、策略版本、置信度(如果模型提供)和动作实际生效的时间。
输入至少包括:
- 任务条件:
task_id、语言指令、任务版本、成功条件和允许的终止条件。 - 环境与设备:场景 / 物体标识、机器人配置、相机和本体感觉流、控制器版本。
- 策略输出:
policy_version、候选动作或 action chunk、置信度、推理时间、控制频率和延迟。 - 运行上下文:
episode_id、统一时间戳、设备时钟映射、当前 split 和安全监控事件。
这里的 rollout 既可以是真实机器人闭环,也可以是 MuJoCo、Isaac Lab 等环境中的回放或仿真闭环。仿真中的失败标签可以帮助筛选难例,但不能直接替代真实执行中的延迟、遮挡、接触和操作者行为。
2. 人类接管由门控触发
Section titled “2. 人类接管由门控触发”门控(gate)在策略出现失败风险时请求人类介入,例如:
- 置信度低于任务或场景对应的阈值;
- 目标跟踪丢失、进度长期不变、动作偏离可行域;
- 即将碰撞、物体掉落或违反任务约束;
- 策略已经失败,需要进入恢复动作。
门控事件必须记录触发原因、触发时刻、预警时刻和人类真正接管时刻。如果系统有安全监控或急停,仍应把它作为独立事件保存;急停发生后未必存在可训练的人工纠正片段。
3. 绑定接管片段
Section titled “3. 绑定接管片段”人工接管不是一条脱离上下文的新演示。接管片段要通过 parent_episode_id、parent_step_id、handover_start 和 handover_end 绑定到原策略 rollout,并保留接管前后的观测窗口。这样训练器才能知道:人工动作是在策略已经偏离之后产生的修正,还是本来就属于正常示范。
时间对齐时,优先使用机器人或仿真器的单调设备时钟,而不是视频到达时间或界面事件时间。至少区分以下时间:
t_obs:观测采样或曝光结束时间;t_policy:策略读取观测并生成动作的时间;t_action_apply:控制器实际应用动作的时间;t_gate/t_handover:门控触发和人工控制生效时间。
保存时应说明动作对应当前观测还是未来观测,记录推理、传输和执行延迟,并用 alignment_error_ms、插值 / 重采样标记和丢帧区间做质量审计。不能用接管发生的墙上时钟覆盖原始设备时间轴。
4. 回填纠正动作
Section titled “4. 回填纠正动作”在 [handover_start, handover_end) 内,训练标签通常使用人工实际生效的动作;区间外仍保留原策略动作作为失败上下文,但默认不作为模仿学习监督。除非经过独立人工审核、可执行性验证和明确的专家标签认证,接管区间外的策略动作应标为 context_only 或 excluded。这样,已通过任务验收的 policy rollout 也不会被数据集消费者误读为专家目标。
建议以 action_source 或 label_mask 显式区分:
action_source[t] = policy | human | safety_controller | unknownlabel_mask[t] = trainable | context_only | excluded原始策略动作必须不可变地保留,人工动作作为版本化派生标签写入。若控制层对人工输入做了限幅、滤波或坐标转换,同时保存 human_command 与 applied_action,否则无法判断恢复效果来自操作者还是控制器。
回填后的样本应包含接管前的失败上下文、接管中的纠正动作、接管后的恢复结果和 episode 终止原因。成功恢复不等于整条 episode 的每个 step 都适合训练:传感器丢失、动作延迟过大或人工输入不完整的区间应单独标记。
纠错轨迹数据契约
Section titled “纠错轨迹数据契约”一个可回放的纠错记录至少应能回答“谁在何时、基于什么观测、用什么动作改变了什么结果”:
| 层级 | 建议字段 | 数据用途 |
|---|---|---|
| 身份与版本 | episode_id、parent_episode_id、parent_step_id、policy_version、schema_version |
将纠错片段绑定到原 episode 和触发前的父 step,区分策略轮次 |
| 观测与策略时序 | RGB / 深度、本体状态、语言指令、t_obs、t_policy |
t_obs 是观测采样 / 曝光结束时间,t_policy 是策略读取该观测并生成动作的时间 |
| 动作 | policy_action、human_command、applied_action、action_source |
对比错误动作与纠正动作 |
| 动作执行时序 | t_action_apply、t_handover |
t_action_apply 是控制器实际应用动作的时间;t_handover 是人工控制真正生效的时间,不能用界面点击时间替代 |
| 原因与边界 | gate_reason、t_gate、failure_type、handover_start/end、end_reason |
t_gate 标记门控触发;结合父 step 和接管边界切出有效纠错窗口 |
| 回放状态 | replay_status、控制器 / 环境版本、初始状态 |
检查纠正是否可复现 |
| 质量与授权 | 对齐误差、丢帧、碰撞风险、quality_flags、训练授权 |
决定是否准入及如何使用 |
replay_status 应区分“可在原环境重放”“只能查看原始视频”“重放结果不一致”和“未验证”。人工动作成功一次,也不能推断在不同初始状态或不同控制频率下必然安全。
聚合、训练与失败恢复
Section titled “聚合、训练与失败恢复”每轮 post-training 都应把新收集的纠错数据作为带版本的增量加入聚合数据,而不是覆盖上一轮标签。可保留如下血缘:
policy_vN rollout → gate events + failure windows → human correction labels → QC / replay verification → aggregated dataset_vN+1 → post-training → policy_vN+1DAgger 的价值在于补足策略访问到的状态分布:策略会把自己带到示范数据没有覆盖的偏离状态,人类纠正提供从这些状态恢复的动作。这样可以缓解共变量偏移(covariate shift),但只有当失败原因、状态上下文和修正窗口被保留时,数据才真正包含“如何恢复”的信息。
聚合器应先按 action_source=human、label_mask=trainable、接管区间完整、质量检查通过和 replay_training_authorized 筛选纠正动作,再按任务、失败类型和操作者做去重、配额或分层采样。[handover_start, handover_end) 之外的 policy_action 即使所在 rollout 最终成功,也必须保持 context_only / excluded,永远不能合并为模仿学习目标,除非另有独立的专家性认证记录。
聚合时要控制几个风险:
- 同一个 episode 的相邻窗口不能跨越接管边界或混淆
action_source; - 高频重复采样同一失败模式会放大单一场景、操作者或门控阈值的偏差;
- 人工动作与策略动作的表示、坐标系、控制频率和延迟必须一致,或明确提供转换版本;
- 失败片段可以用于恢复训练、负例建模或偏好比较,但不应无标记地混入成功示范。
质量控制与准入
Section titled “质量控制与准入”建议在 episode 级和接管片段级分别验收:
- 完整性:接管前后观测、策略动作、人类动作和结果都存在,ID 与时间戳单调且唯一。
- 对齐:检查观测—动作延迟、跨设备时钟偏差、插值比例、丢帧和控制器队列;异常区间标为
excluded,不要静默修正。 - 动作可执行性:验证单位、坐标系、关节限制、速度 / 加速度、夹爪方向、碰撞和急停事件。
- 标签一致性:人工接管边界与 UI、控制器和视频证据相符;
action_source不得把人工动作标成策略自主动作。 - 恢复结果:独立记录恢复成功、部分恢复、再次失败、超时和安全停止,任务结果与数据质量不能合并成一个布尔值。
- 审核与授权:记录操作者化名、审核状态、隐私处理和
replay_training_authorized;未授权样本只能留在受控评测或审计集合。
质量分数用于筛选和分层,不应把“动作像专家”自动等同于“任务成功”。对低质量但能解释失败的片段,可以保留为 context_only 或失败分析数据,避免为了提高通过率而丢失重要失败模式。
训练、评估与数据集边界
Section titled “训练、评估与数据集边界”训练可以使用什么
Section titled “训练可以使用什么”训练集可以使用通过准入的人工接管片段和验证过的纠正动作,但必须带来源和标签掩码。接管区间外的 policy_action 默认只能作为 context_only / excluded 的失败上下文,除非它有独立的专家性审核与可执行性验证;即使该 rollout 最终成功,也不能把它解释为专家目标。后训练报告至少拆分:可用于模仿监督的人工动作比例、仅作上下文的策略动作比例、按失败类型的纠正数量、恢复成功率和各轮新增数据的贡献。数据集消费者不应假设所有 action 都来自同一策略或同一控制器。
评估必须隔离什么
Section titled “评估必须隔离什么”holdout 必须按任务、场景 / 物体、操作者和时间段隔离;同一原始 episode 的接管前后窗口不能分到不同 split。若评估“未见操作者”或“未见失败模式”,对应操作者和失败模式也必须从训练聚合中排除。门控阈值、策略版本和人工可用性都要固定并记录,否则轮次之间不可比较。
评估至少分为:离线动作预测、纠正片段回放、仿真闭环、真实闭环和长程任务。除了总体成功率,还应报告首次失败位置、恢复成功率、人工接管率、急停 / 碰撞风险、任务时长、按场景和操作者的分桶结果。长程任务尤其要观察错误是否在多个子任务之间累积,不能只用单步动作误差替代端到端结果。
安全机制不能被简化
Section titled “安全机制不能被简化”Human-gated DAgger 的人工接管是数据采集和恢复机制,不是唯一安全机制。低层速度、力矩、关节和碰撞约束,独立的安全监控器,硬件急停,以及受训操作者的操作规程都应分别存在、分别记录。门控漏报、网络延迟或人工反应不及时都可能发生;“有人工在旁边”不能作为安全证明。
同样,纠错数据也不自动等于通用示范数据:它集中在策略已经遇到的状态分布,可能带有某个版本策略的偏差、某个操作者的恢复习惯和特定硬件的控制延迟。发布数据集时应明确它适合后训练、失败恢复和鲁棒性分析的范围,不要把纠错片段直接宣传为覆盖完整任务分布的预训练数据。
交付前检查清单
Section titled “交付前检查清单”- 能否从一个人工动作回溯到原策略观测、策略版本、父 episode 和原始文件?
- 能否按设备时钟重建门控、接管和动作生效顺序,并量化对齐误差?
- 能否区分策略动作、人类命令、控制器实际动作和安全控制器动作?
- holdout 是否同时隔离任务 / 场景、操作者、时间段和父 episode?
- 是否分别报告任务成功、恢复成功、人工接管、急停和数据质量?
- 是否明确哪些样本可训练、仅可回放、仅可评测或仅可审计?
Human-gated DAgger 的核心产物不是一段“人类接管视频”,而是带有失败上下文、时间边界、动作来源、回放状态和质量结论的可追溯纠错轨迹;只有经过 split 隔离和安全边界说明,它才适合进入下一轮后训练。