4. 域随机化核心思想
域随机化(Domain Randomization, DR)的核心思想可以用一句话概括:与其让策略去适应某一个特定环境,不如在训练时让环境本身不断变化,使策略被迫学习对环境参数不敏感、对真实差异鲁棒的行为。它并不试图精确还原真实世界的物理参数,而是把“真实域”看作训练分布中的一个采样点,通过扩大训练分布的覆盖范围,让策略在部署时落入已见过的参数邻域内。
4.1 原理:从单域拟合到分布鲁棒
传统仿真到现实(Sim-to-Real)思路是“缩小差距”:尽量把仿真参数标定得与真实一致,再在标定后的仿真中训练。域随机化走的是相反方向:主动引入扰动,把训练目标从“在某个域上最优”改为“在一族域上期望最优”。形式化地,策略参数 θ 的优化目标从单域回报 J(θ; φ₀) 变为随机化域上的期望回报:
J_DR(θ) = E_{φ~p(φ)} [ J(θ; φ) ]
其中 φ 为域参数向量,例如:
φ = [质量 m, 摩擦 μ, 关节阻尼 b, 电机延迟 τ, 传感器噪声 σ, 视觉纹理 T, 光照 L]
训练时每个回合或每个步从 p(φ) 中采样一组 φ,策略在变化的环境中更新。这样策略学到的不是“针对 μ=0.8 的最优动作”,而是“在 μ∈[0.4,1.2] 内都能完成任务的动作模式”。当真实环境的 μ 落在该区间时,策略无需微调即可迁移。
4.2 关键假设:为什么它可能有效
域随机化并非无条件成立,它依赖若干隐含假设。理解这些假设,才能判断一个任务是否适合使用域随机化。
- 真实域在训练分布内或邻近:真实参数 φ_real 应落在 p(φ) 的支撑集内,或至少距离训练分布不远。若真实摩擦远低于随机化下界,策略仍会失效。
- 随机化维度覆盖关键差异:导致 Sim-to-Real 差距的主要因素必须被纳入随机化。遗漏关键参数(如未随机化接触刚度)会让策略在真实接触中崩溃。
- 策略容量足够:策略需要有能力在宽分布上同时表现良好。容量不足时,随机化会迫使策略学习“平均动作”,反而降低性能。
- 观测与动作空间一致:仿真与真实的传感器接口、动作维度、控制频率需基本对齐,否则随机化无法弥补结构性差异。
- 随机化范围可调:分布过窄无法覆盖真实,过宽则任务变得过难。范围本身是一个需要设计的超参数。
4.3 方法流程:一次完整的域随机化训练
下面给出一个典型的域随机化训练流程,适用于机器人抓取、 locomotion 或视觉导航任务。
- 确定随机化维度:列出仿真与真实之间可能产生差异的参数,分为物理类(质量、摩擦、阻尼、电机增益、延迟)、感知类(相机内参、噪声、纹理、光照)和任务类(目标位置、初始姿态)。
- 设定分布与范围:为每个参数选择分布类型(均匀、正态、对数均匀)和上下界。范围通常先宽后窄,或采用课程学习逐步扩大。
- 采样与训练:每个回合开始或每隔若干步重新采样 φ,用强化学习或模仿学习更新策略。
- 评估与调参:在多个固定测试域上评估策略,观察性能方差。若方差过大,说明策略对某些参数仍敏感,需调整分布或增加训练量。
- 真实部署与复盘:在真实机器人上测试,记录失败场景,反推哪些参数未被覆盖,再回到第 1 步迭代。
# 伪代码:域随机化训练循环
for episode in range(N):
phi = sample_domain_params(p_phi) # 采样质量、摩擦、延迟等
env = make_env(phi)
obs = env.reset()
while not done:
action = policy(obs)
obs, reward, done = env.step(action)
update_policy(reward)
# 每 K 个回合评估一次鲁棒性
if episode % K == 0:
evaluate_on_test_domains(policy)
4.4 优势与局限性对比
域随机化的最大优势是不需要精确的系统辨识,工程成本低、实现直接,且天然适合并行仿真。但它也有明显代价:训练难度上升、样本效率下降、可能学到过于保守的策略。下表给出系统对比。
| 维度 | 域随机化的表现 | 说明 |
|---|---|---|
| 系统辨识需求 | 低 | 无需精确测量真实物理参数,只需给出合理范围 |
| 训练难度 | 高 | 策略需在宽分布上优化,收敛更慢、方差更大 |
| 样本效率 | 较低 | 每个回合环境不同,难以复用单域经验 |
| 真实迁移成功率 | 中到高 | 取决于随机化维度是否覆盖真实差异 |
| 策略风格 | 偏保守 | 为适应最坏情况,可能牺牲峰值性能 |
| 实现复杂度 | 低到中 | 主要工作在于参数分布设计与课程调度 |
| 可解释性 | 中 | 可通过敏感性分析定位关键随机化维度 |
4.5 案例与场景:从抓取到四足行走
在机器人抓取中,域随机化常被用于随机化物体质量、摩擦系数、相机位姿和光照。OpenAI 的灵巧手工作中,研究者对物体尺寸、摩擦、关节阻尼和观测噪声进行大规模随机化,使策略在真实手上完成方块旋转。在四足机器人 locomotion 中,随机化地形高度、地面摩擦、机身质量和电机延迟,让策略在真实草地上保持稳定步态。在视觉导航中,随机化纹理、颜色、光照和相机噪声,可显著降低仿真图像与真实图像之间的域差距。
4.6 常见误区与复盘
- 误区一:随机化越多越好。无关维度会增加训练难度却不提升迁移。应优先随机化对任务影响大的参数。
- 误区二:范围一旦设定就不再调整。真实部署失败后,应反推缺失维度或范围不足,迭代更新分布。
- 误区三:忽略观测延迟与动作延迟。很多 Sim-to-Real 失败源于时序差异,而非物理参数。延迟必须纳入随机化。
- 误区四:用训练域性能判断好坏。训练域平均回报高不代表鲁棒,应关注跨测试域的方差和最差表现。
- 误区五:把域随机化当作万能药。若仿真与真实存在结构性差异(如传感器类型不同),随机化无法弥补,需要域适应或系统辨识配合。
总结来看,域随机化是一种以训练分布设计为核心的泛化方法。它把工程重点从“精确建模真实世界”转移到“合理定义参数不确定性”,在系统辨识困难、真实数据稀缺的场景中尤其有价值。但它不是免费的:训练更难、策略更保守、范围设计依赖经验。理解其原理、假设与边界,才能在机器人项目中正确使用它,并与域适应、系统辨识等方法形成互补。