深度⏱ ~3 min
里程碑
⭐ 为何重要

OpenAI 用大规模 domain randomization 让 Shadow 五指灵巧手学会单手操作方块,是 DR 在机器人上的标志性应用。它奠定了 sim-to-real via DR 范式(后被魔方论文扩展为 ADR 自适应 DR),是后续所有『纯仿真训练真机灵巧手』工作的直接思想源头。

机器人Shadow Dexterous Hand
上真机
实时
输入模态vision,proprioception

论文:Andrychowicz, Baker, Chociej, Józefowicz, McGrew, Pachocki, Petron, Plappert, Powell, Ray, Schneider, Sidor, Tobin, Welinder, Weng, Zaremba (OpenAI). Learning Dexterous In-Hand Manipulation. IJRR 2020, 39(1):3–20 · arXiv 2018-08. arXiv:1808.00177. 🌐

一句话直觉

让机器手在仿真里乱练,再零样本搬到真机。秘诀是把仿真世界调得"百变"。尺寸、摩擦、重力都在一个范围内随机变。大规模随机化之于仿真训练,就像疫苗之于免疫系统。不是只针对某一种毒株打一针,而是把一整个变化范围里的弱化版都过一遍。真病毒只要落在这个范围内,免疫系统就扛得住。

是什么·为什么

要解决的问题:让机器手把掌心的物体转到目标朝向,再零样本迁移到真机。

老办法分两条死胡同:一是仿真派做出来不敢上真机(接触太复杂、差距大)。二是真机派直接在物理手上学(采样又慢又贵,学不出复杂动作)。5 指手 24 维、毫秒级接触变化,传统规划无解。

新办法:在仿真里狂练(用强化学习)。同时把仿真世界的所有参数随机化——物体大小、摩擦、质量、光照、相机角度全变。让仿真覆盖真机可能所在的整个分布。策略就学会了"无论世界怎么变都能扛"。

方法核心(大白话):这套 sim-to-real 靠四条腿站稳。外加一条续作的升级。

  • DR 是什么:DR 全称 domain randomization。中文叫域随机化。它把仿真的物理参数大范围随机。每个回合开头随机抽一组并固定,下个回合换一组。物体大小、摩擦、质量、关节阻尼、重力、光照、相机角度都在变。范围的中心点来自对真机的标定。关键:不是把仿真调到某一种最像真机的配置。而是让策略把整个变化范围都练过。
  • 为什么能零样本迁真机:把范围调到足够宽。真机一定落在训练覆盖的分布之内。策略在分布里的每种世界都练过。真机这种它就见过、扛得住。这把 sim-to-real 从逼近一个点,换成覆盖整个分布。靠覆盖换鲁棒,不靠精确建模。
  • 带记忆做在线识别:一组随机参数在一个回合里固定。但策略事先不知道是哪组。给它配上记忆(一种叫 LSTM 的网络)。它就能边做边从历史猜现在是什么世界。相当于在线识别当前环境。看一眼就出手的前馈策略没这本事,在 DR 下学不动。
  • 刻意不用触觉:这只手自带触觉传感器。但论文只用关节编码器。触觉(指尖气压传感)在仿真里没法准确建模。硬用反而拉大 sim-real 差距。仿真建不出的东西,DR 也对不上。
  • ADR 是续作的升级:固定范围 DR 有个工程毛病,范围要靠人手调。太宽学不出,太窄迁不过。续作 Rubik's Cube(2019)把它升级成 ADR。范围随训练进度自动扩缩,不用人调。本论文用固定版本,ADR 机制在下方深度部分。

好处与代价:好处是不靠精确建模,靠覆盖。真机落在分布内就能迁。加记忆在线识别环境,就更稳。代价也直白。让策略无论世界怎么变都能扛,比只学一种世界难得多。要见更多样本、练更久,具体倍数见下方深度部分。这是用样本换 sim-to-real 鲁棒性的交易。

类比:随机化之于机器人,就像疫苗之于免疫系统。把一整个变化范围里的弱化版都练过,真病毒落在范围内就扛得住。

怎么做

任务与硬件:Shadow Hand 是 24 自由度、20 对腱驱动的拟人手。任务是把物体(方块或八棱柱)在掌心重定向到目标朝向。📎 论文不用其内置触觉(仿真无法建模),只用关节编码器做 1 kHz 低层控制。策略以约 12 Hz 给出相对关节增量。

核心机制·全方位随机化:用 MuJoCo(物理)+ Unity(渲染)。论文明确承认仿真只是"coarse approximation"。📎 几乎所有方面都随机化:

  • 物理参数:物体尺寸、质量、表面摩擦、关节阻尼、执行器增益、关节限位、重力。
  • 未建模效应:电机 backlash、动作延迟、动作噪声、mocap 标记短暂失锁、标记互相遮挡、随机扰动力。
  • 观测噪声:每 episode 相关噪声 + 每步不相关噪声。
  • 视觉外观:相机内外参、光照、所有材质纹理。

随机化的分布中心点来自对真机的标定。📎

关键设计·带记忆的策略:策略用 LSTM + 一个 ReLU 隐藏层。因为很多随机化在 episode 内固定,记忆型策略可在线隐式辨识当前环境(系统辨识)。📎

关键设计·非对称 actor-critic:value 网络训练时可看到部署阶段拿不到的特权信息(无噪声观测、物体速度等)。📎 这样简化 value 学习,部署时只用 policy 网络。

关键设计·离散动作:动作空间每维离散成 11 bin。论文发现离散动作显著优于连续高斯。📎 论文推测两个原因:(a) 离散分布比单一高斯更具表达力(可表多模态);(b) 离散动作让 advantage 学习更简单(每 bin 可独立评估)。

奖励与训练:奖励 $r_t=d_t-d_{t+1}$(朝向误差角的减小量)。达成目标 +5,掉落 -20。📎 优化用 PPO,分布式,基于 OpenAI 内部 Rapid 框架(与 OpenAI Five 同栈)。384 台 worker × 16 CPU cores = 6144 CPU cores 跑 rollout,1 台 8 GPU 优化器。每小时约 2 年仿真经验。📎 别被"384 worker"的数字低估了规模——是 6144 个 CPU 核在并行。

常见误区(先抛一个):"随机化就是给数据加噪声"——错。DR 是改仿真世界本身的物理参数,让策略见过整个分布。📎 正确理解:DR 把"逼近真机"换成"覆盖真机所在分布"。

深度

精确随机化范围(Table 1):📎

  • 物体尺寸 $\sim U(0.95, 1.05)$、物体/连杆质量 $\sim U(0.5, 1.5)$
  • 表面摩擦系数 $\sim U(0.7, 1.3)$、关节阻尼 $\sim \log U(0.3, 3.0)$
  • 执行器 P 增益 $\sim \log U(0.75, 1.5)$、关节限位扰动 $\sim \mathcal{N}(0, 0.15)\,\text{rad}$
  • 重力各分量 $\sim \mathcal{N}(0, 0.4)\,\text{m/s}^2$

每个 episode 开头采样一次并固定。分布中心来自真机标定。

为什么大规模 DR 在灵巧手上 work:论文给三份决定性证据。📎

  1. 消融(Table 4):全随机化真机连续成功次数中位 13;无随机化 0;无物理随机化 2;无未建模效应 2。没有 DR,几乎完全无法迁移。
  2. 训练成本对比:无随机化要约 3 年仿真经验(约 1.5 小时墙钟);全随机化要约 100 年仿真经验(约 50 小时墙钟)。DR 用约 33× 的样本量换来真机可用——这是 sim-to-real 的"税"。
  3. 记忆的关键性(Table 5):LSTM 策略真机中位 13,前馈策略仅 3-3.5。LSTM 的隐状态在 5 秒交互后能以 80% 准确率预测物体是否比平均大——直接证据是策略在用记忆做隐式系统辨识。

规模近乎线性收益:到 16 GPU / 12288 CPU 仍有近线性加速。📎 说明问题还没饱和,加算力还能换性能——这是后来"狂堆 DR + 算力"路线的方法论依据。

ADR:从固定 DR 到自适应课程(续作 Rubik's Cube):固定 DR 有一个工程顽疾——随机化范围靠手调。2019 年的后续工作 Solving Rubik's Cube with a Robot Hand [Akkaya 2019] 把固定 DR 升级为 ADR。🌐

ADR 用因式分解分布,每个参数 $\lambda_i$ 采样区间记为 $(\phi_i^L, \phi_i^H)$。ADR $H(P_\phi)=\frac{1}{d}\sum_i\log(\phi_i^H-\phi_i^L)$ 量化分布宽度。核心算法是 boundary sampling + 阈值扩张,闭环三步:Sample(按当前分布采,每次随机选一个维度钉在边界,其余按当前分布采)→ Evaluate(把性能塞进 buffer,攒够后取均值)→ Update(均值与上下阈值比较:高于 $t_H$ → 边界向外扩;低于 $t_L$ → 向内收)→ 回到 Sample。初始集中在标定值,随训练逐步扩张——这是自动课程

ADR 还带来 emergent meta-learning:在 ADR 分布上训练的 LSTM 在测试时表现出在线学习算法的行为,能适应手指被绑、被戳、被加塑料乌龟等扰动。🌐

局限

  1. 成本与成功率:真机方块中位仅 13 次连续旋转(仿真 50)。📎 Rubik's 续作真机成功率约 20%(仿真 60%+),是另一篇论文的规模。🌐 别把两篇的算力混着说:本论文(Dactyl)是 6144 CPU cores(384 worker × 16)+ 8 GPU,全随机化跑约 50 小时墙钟;"跑数月"是 Rubik's 续作(另篇)的规模,不是这篇。单只 Shadow Hand 约 $100k+ 且极易坏。
  2. DR 的代价:约 33× 样本税;固定 DR 需大量手调(被 ADR 部分解决)。📎
  3. 未做跨物体泛化:论文只对方块、八棱柱训出成功策略(八棱柱还是拿方块策略 finetune 来的),一个策略一种形状。作者也简短试过球,但只转得几下就掉——推测是没随机化滚动相关参数、且滚动对手机的不完美处(螺丝孔)极敏感,没训出可用策略。📎 跨物体/跨形状的统一策略要等 Visual Dexterity(2023)。[未确认]
  4. 触觉缺席:刻意不用 Shadow Hand 内置触觉,导致 RotateIt 等后续工作把触觉补回。[未确认]
  5. 不可复现:6144 CPU cores + 8 GPU 跑约 50 小时(Dactyl);Rubik's 续作扩到更大规模跑数月——学术界难以复现。OpenAI 2020-2021 解散 robotics team 后这条工业线沉寂数年。[未确认]

研究者视角

图谱定位:这是灵巧手 sim-to-real 的开山之作。📎 在它之前,"5 指手 RL 操作物体到真机"被认为近乎不可行。它把这件事从科幻变成 demo 视频,并确立了三件套范式

  1. 大规模物理 + 视觉 DR;
  2. LSTM / 记忆型策略做隐式系统辨识;
  3. PPO + Asymmetric Actor-Critic + 分布式大规模训练。

Rubik's 续作把固定 DR 升级为 ADR,是这条范式的"工业化顶点"。🌐

继承:建立在 Tobin et al. 2017(DR for sim-to-real)、OpenAI Five(同款 Rapid 分布式 PPO)、Mordatch et al.(仿真内灵巧操作)之上。📎

催生:直接催生后续 in-hand 重定向线——General In-Hand Re-Orientation(Chen 2022)、Visual Dexterity(Chen 2023,跨物体泛化)、RotateIt(Qi 2023,补触觉)。[未确认]

与 T01 的共享方法:DR / ADR 是 T01(sim2real locomotion)与 T11(灵巧操作)的共同核心方法。这条工作给"高自由度 + 密集接触"场景的 DR 提供了第一份决定性证据。📎

Open problems

  1. 跨物体/跨形状泛化:论文只训了方块、八棱柱两种物体,一个策略一种形状。一个能跨形状、跨尺寸的统一 in-hand 策略仍是开放问题。[未确认]
  2. 触觉的角色:Dactyl 刻意不用触觉。触觉 + 视觉的融合策略是否能在更精细任务上超过纯视觉,尚无定论。[未确认]
  3. DR 的样本税:约 33× 的样本税让学术界难以复现。能否在保持 sim-to-real 鲁棒性的前提下降低样本成本,是开放方向。[未确认]
  4. 真机成功率的天花板:真机 ~20%–50% vs 仿真 60%+。能否把真机推到仿真水平,需要更精细的接触建模或更狠的 DR。[未确认]

常见误区

"Dactyl 用了 Shadow Hand 的触觉" —— 错。5 指手操作物体,最直观的预设就是"肯定靠触觉"。但论文明确不用内置触觉(指尖液囊气压传感受大气压、温度、接触几何多重混淆,仿真里无法准确建模),只用关节编码器。📎

只用关节编码器做 1 kHz 控制。这是后续 RotateIt 等工作把触觉补回的动机。

"DR 就是给数据加噪声" —— 错。DR 改的是仿真世界本身的物理参数(摩擦、质量、阻尼……),让策略见过整个分布。📎

DR 把"逼近真机"换成"覆盖真机所在的分布",再让记忆型策略在线识别当前实例。

"前馈策略也能跑" —— 错。前馈策略真机中位仅 3-3.5,远低于 LSTM 的 13。📎

DR 下策略必须用记忆做隐式系统辨识。前馈策略在 DR 下根本学不动。

"DR 范围越宽越好" —— 错。范围太宽会让任务变得不可能,策略学不出来。📎

固定 DR 要手调到"刚好覆盖真机但又不至于不可学"。这正是 ADR(自适应扩张)要解决的问题。

"动作要连续高斯才对" —— 错。论文实测每维 11 bin 的离散动作显著优于连续高斯。📎

离散分布更具表达力(可表多模态),且让 advantage 学习更简单(每 bin 独立评估)。

检查点

Q1

老办法里"仿真派不敢上真机"和"真机派学不出复杂动作"分别卡在哪?DR 是怎么同时绕开这两关的?

💡 参考答案

  • 仿真派卡在哪:接触太复杂、sim 与 real 差距大,做出来不敢上真机。
  • 真机派卡在哪:真机采样又慢又贵,学不出复杂动作。
  • DR 怎么两关都绕:在仿真里狂练(绕开真机采样贵),同时把仿真参数全随机化、覆盖真机所在分布(绕开'仿真不够像真机')——把'逼近真机'换成'覆盖真机所在分布',只要真机落在训练分布内就能迁。
Q2

为什么带记忆的策略在 DR 下比"看一眼就出手"的前馈策略稳?带记忆到底多解决了什么问题?

💡 参考答案

  • 多解决的问题:很多随机参数在一个回合里固定(但策略事先不知道是哪个值)。带记忆的策略能边执行边猜'现在是什么世界',相当于在线识别环境(隐式系统辨识)。
  • 前馈策略为什么不行:只看当前帧,无法把回合内的历史攒起来推断当前世界的参数,所以在 DR 下学不动。
  • 对照:带记忆 = 能在线'摸清'当前环境再行动;前馈 = 每步都像第一次来。
Q3

DR 让仿真"覆盖一整个分布",而不是"调到最像真机那一个点"。这样做的好处是什么?反过来,代价又是什么?

💡 参考答案

  • 好处:不依赖把仿真精确调到真机那一个点(接触建模粗糙,根本调不准);只要真机落在训练覆盖的分布内,策略就见过、能扛——鲁棒性来自覆盖范围而非精确匹配。
  • 代价:覆盖一整个分布比只学一个点难得多,策略要'无论世界怎么变都能扛',训练要见更多样、更费样本(论文里约 33× 样本税,具体数字在 深度层)。
  • 结论:用更多训练样本换 sim-to-real 鲁棒性——这是 DR 的核心 trade-off。
Q4

论文刻意不用 Shadow Hand 的触觉传感器,只用关节编码器。这是为什么?

💡 参考答案

  • 核心:Shadow Hand 的触觉(指尖液囊气压传感)受大气压、温度、接触几何多重混淆,在仿真里无法准确建模。
  • 推论:仿真里建不出的传感器,DR 也随机化不了、对不上真机;强行用反而引入 sim-real gap。所以只用关节编码器做 1 kHz 控制。
  • 后果:这是后续 RotateIt 等工作把触觉补回的动机——本论文为了 sim-to-real 干净,牺牲了触觉。
Q5

把仿真参数全随机化,为什么能帮策略零样本迁到真机?关键是它把 sim-to-real 问题换成了什么形式?

💡 参考答案

  • 问题转化:从'让仿真尽量逼近真机那一个点'换成'让仿真覆盖真机可能所在的整个分布'。
  • 为什么能迁:只要真机落在训练覆盖的分布范围内,策略就在仿真里'练过这种世界',于是能零样本迁移。
  • 关键:不再追求仿真的精确度(coarse approximation 就够),而是追求分布的覆盖度——靠覆盖换鲁棒。

FAQ

Q1:Dactyl 用了什么仿真器

MuJoCo 做物理,Unity 做渲染。📎 论文明确承认仿真只是 coarse approximation——直接对关节施加力矩而非建模腱驱动,用刚体接触近似真实柔体接触。

Q2:为什么不用 Shadow Hand 内置触觉?

因为指尖液囊气压传感受大气压、温度、接触几何多重混淆,仿真里无法准确建模。📎 论文只用关节编码器做 1 kHz 控制。这是后续 RotateIt 等工作把触觉补回的动机。

Q3:Dactyl 有官方开源代码吗?

没有完整开源。仓库里误标的 openai/baselines 是 RL 算法库,非 Dactyl。📎 复现路径建议:在 IsaacGym/Lab 或 MuJoCo 上用 Shadow Hand URDF 跑 PPO + DR(unitree/legged_gym 同款 RSL-RL 框架即可),先打通方块 reorientation。

Q4:ADR 和固定 DR 的区别是什么?

固定 DR 从手调的固定分布采样;ADR 让分布随训练进度自适应扩张——把"调随机化范围"这件事自动化了。🌐 ADR 还带来 emergent meta-learning:策略在测试时表现出在线适应能力,对手指被绑、被戳等扰动极度鲁棒。

Q5:Dactyl 真机成功率是多少?

方块真机连续旋转中位 13 次(仿真 50)。📎 Rubik's 续作真机成功率约 20%(仿真 60%+)。🌐 真机和仿真之间仍有显著 gap,是后续工作的开放问题。