3. ACT核心原理

ACT(Action Chunking Transformer)是机器人模仿学习中极具代表性的策略网络。它的核心思想并不复杂:让模型一次预测未来若干步动作,而不是每一步都重新决策。这个“若干步”就是动作分块(Action Chunking),而负责把当前观测映射为动作序列的,是一个以 Transformer 为主干的条件序列生成模型。理解 ACT,需要同时看清三件事:它输出什么、它如何利用历史、它如何把视觉与动作对齐。

ACT 的基本映射关系可以概括为:
观测序列 (多相机图像 + 关节状态) → Transformer 编码器 → 动作解码器 → 未来 k 步动作块
其中 k 通常取 20~100,具体取决于控制频率与任务节奏。

3.1 架构总览:CVAE 与 Transformer 的协作

ACT 的完整结构可以看作一个条件变分自编码器(CVAE)与Transformer 序列模型的结合。训练阶段,编码器接收真实动作序列,将其压缩为风格潜变量 z;解码器则接收当前观测与 z,重建未来动作块。推理阶段,z 被置为零向量或从先验采样,模型仅依赖观测生成动作。这种设计让 ACT 能够捕捉人类演示中的多模态性——同一场景下可能存在多种合理动作,而 z 提供了隐式的“风格选择”。

Transformer 部分采用标准的编码器-解码器结构。编码器处理多路相机图像和关节状态,解码器以自回归或并行方式输出动作序列。与语言模型不同,ACT 的动作 token 是连续值,因此输出层通常是线性映射而非 softmax。位置编码在这里至关重要,它让模型区分“当前帧”与“历史帧”,也区分“动作块中的第 1 步”与“第 50 步”。

ACT 架构与动作分块数据流 多相机图像 cam_high / cam_wrist 关节状态 qpos (7维) 历史动作 前序动作块 Transformer 编码器 图像特征提取 ResNet-18 骨干 位置编码 多头自注意力 前馈网络 + 残差 输出:观测上下文 CVAE 编码器 风格潜变量 z ~ N(μ, σ²) Transformer 解码器 交叉注意力 (观测 ↔ 动作) 因果掩码 自回归/并行解码 动作 token 嵌入 输出:动作块序列 动作块 a_t, a_t+1, ... a_t+k-1 k = 20 ~ 100 7-DoF 关节目标 训练:z 来自真实动作编码;推理:z = 0 或先验采样 动作分块使策略在时间上“粗粒度”决策,降低累积误差

3.2 动作分块:为什么一次预测多步更稳

传统行为克隆每一步都独立预测动作,误差会逐步累积,机器人容易在长时序任务中“越走越偏”。动作分块改变了这一点:策略一次输出 k 步动作,执行时按顺序下发,直到块耗尽或收到新观测再重新预测。这样做有三个直接好处:

  • 降低决策频率:控制频率 50Hz 时,若 k=50,策略只需 1Hz 推理,计算压力大幅下降。
  • 抑制累积误差:块内动作共享同一观测上下文,短期一致性更强。
  • 保留时序结构:Transformer 能建模动作之间的依赖,而非把每步当作独立样本。

但 k 并非越大越好。k 过大时,块内动作可能无法及时响应环境变化;k 过小时,又退化为逐步决策。实践中常通过时间集成(Temporal Ensembling)缓解:每次预测新块后,对重叠时间步的动作做加权平均,既保留长块稳定性,又保持对突变的响应能力。

经验取值:桌面抓取任务 k=20~40;长程装配任务 k=50~100。若任务中存在频繁接触变化,建议 k 取小值并配合时间集成。

3.3 时序建模与注意力机制

ACT 的时序建模依赖 Transformer 的注意力机制。编码器中的自注意力让当前帧能够关注历史帧中的关键信息,例如“机械臂是否已经接近目标”“夹爪是否已经闭合”。解码器中的交叉注意力则让每个动作 token 关注观测上下文的不同部分,实现视觉与动作的细粒度对齐。

位置编码在这里承担了“时间坐标”的角色。由于 Transformer 本身对序列顺序不敏感,必须显式注入位置信息。ACT 通常使用正弦位置编码或可学习位置编码,前者对长度外推更友好,后者对固定长度任务拟合更强。对于动作块,位置编码还需要区分“块内位置”与“块间位置”,否则模型无法判断当前动作处于块首还是块尾。

另一个关键设计是因果掩码。解码器在生成第 t 个动作时,只能看到第 1 到 t-1 个动作,不能“偷看”未来。这保证了推理时的自回归一致性,也避免了训练与推理之间的信息泄漏。若采用并行解码,则需通过掩码确保每个位置只依赖合法上下文。

3.4 训练目标与损失函数

ACT 的训练目标由两部分组成:动作重建损失与 CVAE 正则项。动作重建通常使用 L1 损失,因为它对异常值更鲁棒,适合机器人关节目标这种连续值。CVAE 正则项则约束潜变量 z 的分布接近标准正态,防止编码器“记住”训练样本而失去泛化能力。

# ACT 损失函数示意(PyTorch 风格)
recon_loss = F.l1_loss(pred_actions, gt_actions)
kl_loss = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
loss = recon_loss + kl_weight * kl_loss

# 推理阶段
z = torch.zeros(batch_size, latent_dim)  # 或从先验采样
pred_chunk = policy(obs, z)              # 输出 k 步动作

训练时还需注意观测的时间对齐:图像、关节状态、动作必须来自同一时刻或经过正确的时间戳对齐。若相机存在曝光延迟或通信抖动,建议在数据预处理阶段做时间同步,否则注意力机制会学到错误的跨模态关联。

3.5 常见误区与复盘

误区 表现 修正方向
动作分块 k 设置过大 机器人反应迟钝,遇到扰动无法及时调整 减小 k,或引入时间集成与实时重规划
忽略位置编码 模型无法区分动作块内顺序,输出抖动 显式加入块内与块间位置编码
潜变量 z 推理时未置零 行为随机性过大,重复性差 推理时 z=0 或固定采样,训练时再启用编码器
观测与动作时间错位 注意力学到虚假关联,策略在特定场景失效 数据预处理阶段做时间戳对齐与延迟补偿
只关注重建损失 过拟合演示数据,新场景泛化差 调节 KL 权重,加入图像增强与域随机化
ACT 的注意力可视化是排查问题的有力工具。若发现注意力始终集中在图像背景而非机械臂或目标物体上,通常意味着数据中存在位置偏差或相机标定不一致,需要优先检查数据质量而非调整模型结构。

总结来看,ACT 的核心竞争力来自“动作分块 + Transformer 时序建模 + CVAE 风格建模”三者的协同。动作分块解决了长时序决策的稳定性问题,Transformer 提供了强大的跨模态与长程依赖建模能力,CVAE 则让策略能够表达多模态演示中的合理变化。理解这三者的分工与配合,是后续调参与部署的基础。