为什么 ACT 擅长双手任务
ACT(Action Chunked Transformers)最初是专门为双手操作研究而开发的。 其核心见解——预测未来动作的序列(块)而不是单步动作可以减少复合错误——对于双手任务尤其有价值,其中一只手臂轨迹中的小错误可能会导致另一只手臂执行中的级联故障。
行动分块机制有效地为政策提供了规划范围。 ACT 不是在每个 50Hz 时间步执行单个联合命令,而是提前计划 100 个步骤并平滑执行。 对于切换任务,这意味着策略可以“看到”双臂向切换点的接近,作为计划序列的一部分,而不是独立地对每个帧做出反应。 根据经验,与双手数据集上的非分块方法相比,这使中间传输失败率降低了一半。
需要注意的是:ACT 假设数据集中的演示代表了 一致的策略。 如果不同的演示显示执行切换的根本不同方式(启动不同的手臂、不同的切换高度),则 CVAE 组件将难以编码单一风格。 您的 100 个演示应该全部执行相同的动作策略。
训练指挥部
--device cuda 如果您有 GPU,请标记。 云 GPU 选项(Lambda Labs、Vast.ai)所需硬件的运行费用约为 0.50-1.50 美元/小时。
阅读双手训练曲线
双手训练曲线与单臂训练曲线在一个重要方面有所不同:你有两个动作空间,策略必须学会协调它们。 留意损失曲线中的这些模式(在 TensorBoard 中查看: tensorboard --logdir ~/dk1-policies/):
L_reconstruction(整体动作损失)
应以 60,000 步从 ~3.0 减少到 0.4 以下。 40,000 步后高于 0.7 的平台表明数据集质量问题 - 切换时间或位置可能存在太大差异。
L_kl(CVAE 正则化)
从 0 附近开始,缓慢上升到 5-15。 如果它上升到 30 以上,则 CVAE 正在努力寻找紧凑风格的嵌入。 这通常意味着您的演示具有太多的行为多样性。 考虑剔除最后 20% 最不一致的演示并进行重新培训。
动作错误:左与右
如果您启用每臂操作错误日志记录(通过 training.log_per_action_dim=true override),您将看到左右动作维度的单独损失曲线。 两者之间存在较大的持续差距表明一只手臂的演示比另一只手臂的演示更加一致 - 请检查落后手臂的第 4 单元质量检查表。
双手特定的超参数
| 范围 | 默认(单臂) | DK1 双手推荐 | 为什么 |
|---|---|---|---|
action_dim |
7 | 14 | 两个 6 自由度手臂 + 2 个夹具 = 14 个动作维度 |
chunk_size |
100 | 100 | 相同——动作分块已经非常适合双手协调时间尺度 |
dim_feedforward |
3200 | 3200 | 无需更改 - 更大的动作空间由动作头处理,而不是变压器宽度 |
num_steps |
50000 | 80000 | 双手协调需要更多的训练步骤才能可靠地收敛; 80k 是 100 个演示的实际最小值 |
batch_size |
32 | 16 | 减少以适应 GPU 内存中更大的双手数据集样本(双摄像头输入) |
kl_weight |
10 | 10 | 默认效果很好; 仅当 L_kl 在 30k 步后保持接近零时才增加到 20(CVAE 不学习) |
检查点选择
每 5,000 步保存检查点(training.save_freq=5000)。 不要假设最终检查点是最好的。 双手策略在高步数下可能会过度拟合——该策略学会完美地重现训练演示,但会失去对评估过程中遇到的轻微现实世界变化的概括性。
选择步骤中的检查点 L_reconstruction 在开始稳定或略有增加之前达到最低值。 对于 100 个演示双手数据集,该步数通常在 60,000–80,000 步范围内。 部署两个检查点(最小损失检查点和最后一个)并在第 6 单元中比较它们的实际性能。
第 5 单元完成时...
训练已完成 80,000 步,检查点保存在 ~/dk1-policies/cube-handoff-v1/。 决赛 L_reconstruction 值低于 0.5。 您已经根据损失曲线确定了最佳检查点。 您了解 L_kl 曲线为何在您的跑步中表现如此。 您已准备好在第 6 单元中部署到真实硬件 - 立方体切换的目标成功率 > 60%(双手比单臂更难,这是一个很好的首次运行结果)。