小区里有位妈妈,从不把宝宝固定在一个地方喂饭。今天在窗边,明天在走廊,餐具时而是瓷碗时而是塑料盘,饭菜更是天天换花样。邻居笑她折腾,她却说:“我要让宝宝明白,不管桌子和灯光怎么变,饭菜都是香的。”这位妈妈的做法,像极了机器人领域一项叫“域随机化”的技术——仿真环境是自家的厨房,真实世界是外面的餐厅,工程师们故意在仿真里“折腾”光照、纹理、摩擦力等参数,只为让机器人将来走进任何真实世界,都能稳稳完成任务。 在具身智能的 Sim2Real 流程中,域随机化是打通“仿真训练”与“真实部署”的主流桥梁。它不追求把仿真做得跟现实一模一样,而是让训练见过足够多的环境变化,从而学到对参数变化鲁棒的表征。

岗位关联

理解域随机化,是设计高迁移率机器人策略的必备能力,直接决定仿真训练能否落地到真实场景,是具身智能工程师绕不开的核心技能。

目录
  1. 可视化演示
  2. 问题根源:仿真与现实的“桌距”
  3. 核心思想:随机化是一本“任意门菜单”
  4. 关键机制:视觉与物理的“翻新配方”
  5. 实施要素:撑起不挑食的三根支柱
  6. 迁移桥梁:从厨房走向世界的通道
  7. 挑战门槛:开放餐桌上的试炼
  8. 发展节奏:三个引擎共同加速
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示深入理解域随机化的核心机制,通过全局/局部/动态/静态四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

深入理解域随机化:域随机化 域随机化的核心原理与动机 视觉域随机化的策略与实现 核心机制可视化 深入理解域随机化整体架构与关键组件

问题根源:仿真与现实的“桌距”

那位妈妈后来发现,宝宝在家里吃得很好,可一旦去外婆家、去野餐、去学校食堂,就各种抗拒。问题出在哪?家里的灯光、碗筷、菜色太固定了,宝宝把“吃饭”和“家里的环境”牢牢绑在了一起。仿真里训练的机器人也一样:仿真引擎里的光照、材质、物理引擎都和真实世界有差异,模型一部署到真实场景就“水土不服”。

这条差异就是“分布失配”——仿真环境的数据分布和真实世界的数据分布不一致。机器人就像只认识自家餐桌的宝宝,换一张桌子就认不出饭菜。要缓解它,最直接的办法是大量采集真实数据,但真实数据的成本高得吓人:一小时的机械臂真实抓取数据,要花费昂贵的设备和人力维护,相当于“顿顿去米其林餐厅吃饭”。成本高、周期长,于是仿真训练成了更现实的选择,但仿真与现实的鸿沟又挡在面前。

域随机化正是为跨越这道“桌距”而生的方法。它不追求把仿真做得跟现实一样,而是主动让仿真环境“变来变去”,让策略见过足够多的餐桌样式,从而不再死盯某一个具体环境。它的目标可以写成:在所有可能的域参数下,让任务损失的平均值最小。

理解了分布失配,就明白了随机化的第一层意义:不是把厨房装修得更豪华,而是让宝宝在任何餐桌上都能自己夹到菜。

min⁡θEξ∼Ξ[Ltask(πθ,ξ)]\displaystyle \min_{\theta} \mathbb{E}_{\xi \sim \Xi} \left[ \mathcal{L}_{\text{task}} \left( \pi_\theta, \xi \right) \right]
白话版:不断更换环境参数,找出一个在任何情况下平均表现都不错的策略,而不是只在一个固定环境里做到最好。
  1. 策略函数 $\pi_\theta$带参数 $\theta$ 的控制策略,是机器人的“大脑”,输入观测,输出动作。
    πθ\pi_\theta
  2. 任务损失 $\mathcal{L}_{\text{task}}$衡量策略在某环境下任务表现好坏的分数,损失越小,做得越好。
    Ltask\mathcal{L}_{\text{task}}
  3. 域参数 $\xi$描述环境的参数,如光照强度、摩擦系数、物体质量。
    ξ\xi
  4. 期望 $\mathbb{E}_{\xi \sim \Xi}$对所有可能的域参数取值求平均,覆盖“各种餐桌”。
    Eξ∼Ξ\mathbb{E}_{\xi \sim \Xi}
  5. 最优化 $\min_\theta$寻找让平均损失最小的策略参数。
    min⁡θ\min_\theta

核心思想:随机化是一本“任意门菜单”

要让孩子什么餐桌都适应,妈妈要做的第一件事是列一张“变化清单”:今天灯光亮一点,明天暗一点;今天坐高椅子,明天坐矮凳子;今天吃软饭,明天吃硬饭。这份清单就是“参数空间设计”。对机器人而言,参数空间决定了哪些环境因素会被扰动,比如渲染器的光照、纹理、相机角度,物理引擎的摩擦、质量、阻尼。

确定了随机化哪些参数之后,还要决定它们怎么变。妈妈不会把辣椒量随机到“几乎辣死人”的程度,而是控制在“宝宝能接受又需要适应”的范围。这套规则就是“域随机分布”。工程上最常用均匀分布,也可以根据真实数据设计更贴合实际的分布。合理的设计既保留变化,又不至于让任务彻底没法完成。

有了这两点,模型在训练中不断看到不同环境下的同一任务,被迫提取那些“不管环境怎么变都成立”的特征——这就是鲁棒表征学习。比如抓取任务中,它学会的是“识别物体形状”而不是“识别固定纹理”。训练目标也因此成了经验平均的形式:用一批随机采样环境下的平均损失来逼近期望损失。

这本“任意门菜单”的价值在于:宝宝吃过的餐桌组合越多,就越不容易被某张新桌子吓到。机器人学到的不是某个环境的死记硬背,而是一套能迁移的通用办法。

LDR(θ)=1N∑i=1NL(πθ,ξi),ξi∼p(ξ)\displaystyle \mathcal{L}_{\text{DR}}(\theta) = \frac{1}{N} \sum_{i=1}^{N} \mathcal{L} \left( \pi_\theta, \xi_i \right), \quad \xi_i \sim p(\xi)
白话版:这次不只看一张菜单,而是从各种菜单里各吃几口,把 N 桌菜的平均口味都顾上。
  1. 采样域参数 $\xi_i \sim p(\xi)$从随机分布中抽取 N 组环境参数,每组对应一个“餐桌布置”。
    ξi∼p(ξ)\xi_i \sim p(\xi)
  2. 经验平均 $\frac{1}{N} \sum_{i=1}^{N}$把 N 组环境下的任务损失加起来求平均,用这个平均来近似期望损失。
    1N∑i=1NL(πθ,ξi)\frac{1}{N} \sum_{i=1}^{N} \mathcal{L} \left( \pi_\theta, \xi_i \right)
  3. 域参数分布 $p(\xi)$描述每个域参数取值的概率规则,决定随机化的“口味宽度”。
    p(ξ)p(\xi)

关键机制:视觉与物理的“翻新配方”

现在妈妈开始细化“翻新”的具体维度。第一类是视觉参数,相当于菜的卖相和餐桌的光影:灯光的明暗冷暖、餐具的颜色纹理、相机摆放的高低远近。机器人如果只见过仿真里永远一致的金属光泽,一到真实场景看到哑光塑料,就会“认不出来”。视觉随机化让模型学会穿透外观,抓住物体本质。

第二类是物理参数,相当于饭菜的软硬和碗筷的滑腻程度:摩擦系数、物体质量、关节阻尼、重力加速度。真实世界的物理规律和仿真引擎的默认设置总有偏差,机械臂推一下箱子,可能因为真实摩擦力不同而推过头。物理随机化让策略学会在“手感”变化时及时调整发力。

这两类参数如何取值,靠的是“扰动策略”:即规定每个参数的随机范围与采样规则。最常见的是均匀分布,在上下界之间等概率取值:

视觉和物理这两类配方交替翻新,等于妈妈每顿换一个就餐场景:有些变化影响“看”,有些变化影响“手感”。两者配合,策略才真正具备跨环境的适应力。

ξk∼U(ak,bk)\displaystyle \xi_k \sim \mathcal{U}\left( a_k, b_k \right)
白话版:每个参数都在自己的最小值到最大值之间“均匀地摇骰子”,模拟外界环境的各种可能。
  1. 第 $k$ 个域参数 $\xi_k$比如光照强度或摩擦系数中的某一个。
    ξk\xi_k
  2. 均匀分布 $\mathcal{U}(a_k, b_k)$在区间 $[a_k,b_k]$ 内每个值被选中的概率相同。
    U(ak,bk)\mathcal{U}\left( a_k, b_k \right)
  3. 上下界 $a_k, b_k$由工程师根据真实数据设定,决定随机化的跨度,好比“辣度从微辣到中辣,而不是到变态辣”。
    ak,  bka_k, \; b_k

实施要素:撑起不挑食的三根支柱

要让宝宝真正不挑食,光有理念还不够,厨房要足够大,菜谱要足够细,妈妈还要懂烹饪技巧。域随机化同理,落地离不开三根支柱。

第一根支柱是算法创新。随机化只负责“制造变化”,真正学会鲁棒策略还要靠强化学习、模仿学习等算法把变化中的共性提炼出来。算法越强,越能从嘈杂的随机环境里找到有用的信号,就像一个孩子能在热闹的餐厅里专注吃饭。

第二根支柱是算力基础设施。随机化训练要采样大量域参数组合,每种组合都要跑一遍仿真,训练时间会成倍增长。没有足够的 GPU 集群和并行仿真,随机化规模就上不去,覆盖面太窄,迁移效果自然打折扣。算力决定了你能在“多少种餐桌”上训练宝宝。

第三根支柱是高质量数据。随机范围不是拍脑袋定的,而是要从真实世界数据里统计出来。比如真实场景中光照强度大约在什么范围,摩擦系数大约是多少,这些先验信息把随机化约束在“合理范围”内。这就像妈妈先去几个朋友家观察一遍,才知道自家的训练应该覆盖哪些布置。一个常用的做法是用真实统计的均值和标准差来定随机范围:

三根支柱缺一不可。没有算法,随机化只是噪声;没有算力,随机化跑不动;没有真实数据,随机化容易跑偏。它们共同撑起一张“什么环境都敢坐”的餐桌。

ak=μkreal−c⋅σkreal,bk=μkreal+c⋅σkreal\displaystyle a_k = \mu_k^{\text{real}} - c \cdot \sigma_k^{\text{real}}, \quad b_k = \mu_k^{\text{real}} + c \cdot \sigma_k^{\text{real}}
白话版:以真实世界采集到的均值为中心,向两侧各扩展若干个标准差,就得到了随机化的上下界。
  1. 真实均值 $\mu_k^{\text{real}}$从真实环境样本中统计出的第 $k$ 个参数的中间值。
    μkreal\mu_k^{\text{real}}
  2. 真实标准差 $\sigma_k^{\text{real}}$反映真实环境参数波动幅度的统计量。
    σkreal\sigma_k^{\text{real}}
  3. 扩展倍数 $c$决定随机范围宽度的系数。$c$ 越大,变化越激进;$c$ 过小则覆盖不足。
    ak=μkreal−c⋅σkreal,bk=μkreal+c⋅σkreala_k = \mu_k^{\text{real}} - c \cdot \sigma_k^{\text{real}}, \quad b_k = \mu_k^{\text{real}} + c \cdot \sigma_k^{\text{real}}

迁移桥梁:从厨房走向世界的通道

训练完成的宝宝终于要出门见世面了。这个“从厨房走向世界”的过程,在技术里叫 Sim2Real 迁移,而域随机化是其中最主流的一座桥。

桥的第一段是训练策略。带着域随机化的训练,策略从第一天起就在各种参数组合下摸爬滚打,学到的是“适应变化”本身。相比固定环境训练出的策略,它更像一个见过大场面的孩子:外婆家没有自己的餐椅?没关系,坐凳子也一样吃。

桥的第二段是零样本迁移。零样本的意思是:仿真训练完成后,模型直接部署到真实机器人,中途不再用真实数据做哪怕一次微调。这是域随机化最惊艳的地方——省去了昂贵的真机训练过程,如同宝宝第一次走进陌生的学校食堂,马上就能自己打饭坐下吃。当然,“零样本”不代表“零验证”,迁移后依然要在真实环境里测试评估。

桥的第三段是成功率验证。迁移效果好不好,最终要看真实场景的成功率。测试时把任务重复 M 次,统计成功比例:

这座桥并不是“走过就一劳永逸”。迁移成功率像一张成绩单,既检验域随机化的设计好不好,也告诉工程师:范围要不要再调,参数要不要再加,下一步该往哪里优化。

Successreal=1M∑j=1M1[task(πθ,ηj)]\displaystyle \text{Success}_{\text{real}} = \frac{1}{M} \sum_{j=1}^{M} \mathbb{1}\left[ \text{task}( \pi_\theta, \eta_j ) \right]
白话版:在真实环境里做 M 道菜,看宝宝能自己独立吃完几道,成功比例就是迁移成功率。
  1. 真实测试工况 $\eta_j$第 $j$ 次真实环境中的任务配置,比如物体的初始位置。
    ηj\eta_j
  2. 指示函数 $\mathbb{1}[\cdot]$括号里的条件成立记 1,不成立记 0,用来把“成功/失败”变成可统计的数字。
    1[task(πθ,ηj)]\mathbb{1}\left[ \text{task}( \pi_\theta, \eta_j ) \right]
  3. 平均成功率 $\frac{1}{M} \sum_{j=1}^{M}$在 $M$ 次独立测试中统计成功的平均比例。
    1M∑j=1M\frac{1}{M} \sum_{j=1}^{M}

挑战门槛:开放餐桌上的试炼

宝宝在熟悉的几类餐厅表现不错,但真正难的是走向“开放世界”——那些设计阶段完全没想过的场景。开放环境没有固定的参数边界,可能是逆光下的户外,可能是地面积水导致打滑,也可能是一堆从未见过的物体。这正是域随机化面临的最大门槛:开放环境中的泛化能力。

泛化能力决定了模型能否应对“没见过的新餐桌”。参数空间有限的随机化,训练得再充分,也只是覆盖了设计者想到的变化;可真实世界的组合近乎无穷。策略必须学会举一反三:从已经见过的光线变化中,推断出没见过的逆光场景该怎么应对。这已经不只是记忆,而是真正的理解。

鲁棒性评估是这一关的考卷。工程师需要系统性地检验策略在各类域参数扰动下的稳定性,不能只看 happy path。一种做法是考察策略在所有域参数范围内的表现波动范围:

开放餐桌上的这场试炼没有终点。正是这种“永远无法提前预演全部环境”的挑战,推动着域随机化不断升级——要么扩大随机化覆盖面,要么引入自适应机制,让策略在遇到新环境时还能继续调整。

R(θ)=sup⁡ξ∈Ξ  L(πθ,ξ)−inf⁡ξ∈Ξ  L(πθ,ξ)\displaystyle \mathcal{R}(\theta) = \sup_{\xi \in \Xi} \; \mathcal{L}( \pi_\theta, \xi ) - \inf_{\xi \in \Xi} \; \mathcal{L}( \pi_\theta, \xi )
白话版:看策略在最差的环境和最好的环境之间,表现差多少。差距越小,说明越稳,越不容易“一换环境就翻车”。
  1. 最差情况损失 $\sup_{\xi \in \Xi} \mathcal{L}$在所有域参数里找出让策略表现最吃力的那个环境。
    sup⁡ξ∈Ξ  L(πθ,ξ)\sup_{\xi \in \Xi} \; \mathcal{L}( \pi_\theta, \xi )
  2. 最好情况损失 $\inf_{\xi \in \Xi} \mathcal{L}$找出让策略表现最舒服的环境。
    inf⁡ξ∈Ξ  L(πθ,ξ)\inf_{\xi \in \Xi} \; \mathcal{L}( \pi_\theta, \xi )
  3. 差距 $\mathcal{R}(\theta)$两者之差越小,策略对域参数变化越鲁棒。
    R(θ)=sup⁡ξ∈Ξ  L(πθ,ξ)−inf⁡ξ∈Ξ  L(πθ,ξ)\mathcal{R}(\theta) = \sup_{\xi \in \Xi} \; \mathcal{L}( \pi_\theta, \xi ) - \inf_{\xi \in \Xi} \; \mathcal{L}( \pi_\theta, \xi )

发展节奏:三个引擎共同加速

回顾域随机化这些年的进展,它的发展节奏并不是匀速的,而是由三个引擎共同推动。

第一个引擎是算法创新速度。从最早在增强随机化与系统变化中探索,到后来把随机化与域自适应结合,再到自动化搜索最佳随机参数范围,每一轮算法突破都直接把迁移成功率往上推一个台阶。算法的意义,是让同样的随机化数据产出更好的策略。

第二个引擎是算力基础设施进展。随机化要采样越来越多的域参数组合,要跑越来越复杂的仿真。GPU 集群、并行环境、分布式强化学习框架,一次次把可承载的随机化规模上限抬高。算力每上一个台阶,工程师就有底气多随机几个参数、多采几千组环境,覆盖更广的“餐桌样式”。

第三个引擎是高质量数据供给能力。真实数据不只是用来验证迁移效果,更用来校准随机范围、评估分布失配程度。数据管道越完善,随机化设计就越“接地气”。三者联合作用,形成了一个大致的关系:

三个引擎相互咬合:算法定方向,算力拓边界,数据修准星。域随机化的每一次跃迁,都是三者在某个时点共同到位的结果——就像家里的厨房扩建了、菜谱改良了、妈妈手艺也进步了,宝宝自然越来越能吃遍天下。

Ttrain≈Nparams⋅Ndomains⋅CstepPcompute\displaystyle T_{\text{train}} \approx \frac{N_{\text{params}} \cdot N_{\text{domains}} \cdot C_{\text{step}}}{P_{\text{compute}}}
白话版:训练耗时约等于【参数量 × 随机域数量 × 单步成本】÷ 算力。三个引擎任何一个发力,都能让域随机化前进得更快。
  1. 参数量 $N_{\text{params}}$策略网络的可训练参数个数,决定了模型的表达力。
    NparamsN_{\text{params}}
  2. 随机域数量 $N_{\text{domains}}$域随机化采样的环境组合数,组合越多训练越全面。
    NdomainsN_{\text{domains}}
  3. 单步仿真成本 $C_{\text{step}}$每一步环境交互产生的计算开销。
    CstepC_{\text{step}}
  4. 算力 $P_{\text{compute}}$可用计算资源。算力越大,同样规模训练的耗时越短。
    PcomputeP_{\text{compute}}

AI 应用场景

机械臂抓取的零样本迁移

阶段:训练策略 → Sim2Real 部署

解决的问题:传统机械臂抓取需要采集大量真实抓取数据,成本高且泛化差。一个只在固定仿真环境下训练的模型,面对真实物体的不同纹理、光照和摆放位置,抓取成功率往往骤降。

具体案例:某仓储物流团队在仿真中构建了上千个随机化的货架场景,随机改变光照强度、相机视角、箱子纹理和摩擦系数。策略在这样的“变化菜单”里训练后,直接部署到真实机械臂上,无需任何真机微调,对未见过的新包装盒抓取成功率从 30% 提升到 85%。这个提升幅度,正来自策略学会了“抓物体形状”而不是“抓特定颜色纹理”。

四足机器人行走控制

阶段:仿真训练 → 策略迁移

解决的问题:在仿真中训练的四足机器人控制器,常因真实地面摩擦、电机力矩偏差而步伐不稳。逐项手工调参耗时巨大,且难以覆盖所有地形。

具体案例:研究团队对地面摩擦系数、机体质量、电机增益、地形坡度等物理参数做域随机化。机器人从“沙地”到“冰面”再到“草地”的各类随机地形上都经历过训练,迁移到真实场地后,面对地毯和瓷砖的不同摩擦,步态依然稳定。随机化范围依据真实地形测量数据校准,既保证覆盖,又避免极端无意义参数。

无人机室内避障

阶段:感知模型训练 → 视觉迁移

解决的问题:无人机的视觉感知模型在仿真中训练时,容易过拟合仿真渲染风格;到了真实室内,黄昏逆光和墙面纹理差异会让避障失灵。

具体案例:开发团队在仿真中随机化场景纹理、环境光照、墙面颜色与相机曝光参数,训练端到端的避障策略。部署到真实无人机后,它能在黄昏侧光和不同装修风格的走廊里稳定绕开障碍。迁移成功的核心不在传感器本身,而在感知模型没有被任何单一视觉风格“锁死”。

Python 演示

python69 行
import numpy as np  class OneDPursuit:    """一维追踪任务: 推动滑块追逐随机目标"""     def __init__(self, rng):        self.rng = rng        self.noise_std = 0.1        self.damping = 0.8        self.target = -1.0        self.pos = 0.0        self.vel = 0.0     def randomize(self):        """域随机化: 每个 episode 重采样环境参数"""        self.noise_std = self.rng.uniform(0.02, 0.4)        self.damping = self.rng.uniform(0.4, 1.5)        self.target = self.rng.uniform(-3.0, 3.0)     def step(self, action):        self.vel = self.vel * self.damping + action        self.pos += self.vel        return self.target - self.pos + self.rng.normal(0, self.noise_std)  def run_episode(env, k, randomize, n_steps=60):    if randomize:        env.randomize()    env.pos, env.vel = 0.0, 0.0    obs = env.target - env.pos    total_err = 0.0    for _ in range(n_steps):        obs = env.step(k * obs)        total_err += abs(obs)    return total_err  def train(env, use_dr, rng, n_episodes=300):    best_k, best_err = 0.5, float("inf")    for _ in range(n_episodes):        k = rng.uniform(0.1, 2.5)        err = run_episode(env, k, randomize=use_dr)        if err < best_err:            best_k, best_err = k, err    return best_k, best_err  def main():    rng = np.random.default_rng(42)    env = OneDPursuit(rng)    k_single, _ = train(env, use_dr=False, rng=rng)    k_dr, _ = train(env, use_dr=True, rng=rng)     def real_error(k, n_episodes=50):        errs = []        for _ in range(n_episodes):            env.noise_std = 0.1            env.damping = 0.9            env.target = rng.uniform(-3.0, 3.0)            errs.append(run_episode(env, k, randomize=False))        return float(np.mean(errs))     print("single-env  k=%.3f  real_err=%.2f" % (k_single, real_error(k_single)))    print("dr-training k=%.3f  real_err=%.2f" % (k_dr, real_error(k_dr)))  if __name__ == "__main__":    main()
目的:用一维滑块追踪任务对比“固定环境训练”和“域随机化训练”迁移到真实环境的误差,直观展示域随机化带来的鲁棒性提升。
  1. self.noise_std = self.rng.uniform(0.02, 0.4)每次训练随机化观测噪声强度,让策略适应“看不清”的情况。
  2. def randomize(self):把环境参数的重采样封装成单独方法,模拟妈妈每顿饭前重新布置餐桌。
  3. self.vel = self.vel * self.damping + action阻尼系数控制运动衰减,物理参数随机化直接改变“手感”。
  4. def run_episode(env, k, randomize, n_steps=60)一次完整追踪实验的公共入口,训练和测试都复用它。
  5. k = rng.uniform(0.1, 2.5)随机搜索候选的比例控制增益,相当于在策略参数空间里“尝菜”。
  6. k_dr, _ = train(env, use_dr=True, rng=rng)开启域随机化训练,每次评估都在全新的随机环境中进行。
  7. env.target = rng.uniform(-3.0, 3.0)真实测试时让目标位置继续变化,但其他物理参数固定,模拟真实世界的正常波动。

常见误区

误区“我把所有能想到的参数都随机化,光照、纹理、摩擦、质量、重力全随机一遍,策略一定最鲁棒!”

正解随机范围过大会导致采样到的环境组合大部分是“不可能存在的怪桌”——比如重力是 10 倍、摩擦力为负。策略为了讨好这些无意义环境,反而学不到真实世界需要的精细动作,最终“平均表现平庸”。就像妈妈如果每顿都把辣椒量在 0 和 10 倍之间随机,宝宝要么被辣哭,要么根本尝不出菜的味道。正确做法是围绕真实数据校准范围,让随机化覆盖“可能遇到的餐桌”,而不是“所有能想到的餐桌”。

为何常见:直观上“覆盖越广越安全”,却忽略了任务信号会被过大的随机噪声淹没。

误区“域随机化支持零样本迁移,所以仿真训练完直接部署到真实机器人就行,不用再做任何测试。”

正解零样本迁移指的是“不再用真实数据做额外训练”,而不是“不做验证”。策略在仿真里再鲁棒,真实世界的长尾情况仍然可能超出随机化覆盖范围。宝宝在家里吃得再好,第一次去学校食堂还要先观察一会儿才能下嘴。工程师必须在真实环境中做成功率测试,用测试结果反过来调整随机化设计。

为何常见:域随机化的名字容易给人“仿真等于真实”的错觉,忽略了验证环节的价值。

误区“均匀分布最公平,每个取值概率相同,这样覆盖面最大。”

正解均匀分布虽然实现简单,但没有利用真实世界的先验信息。真实场景的光照、摩擦往往集中在某个典型值附近,均匀分布会把大量采样浪费在“很少出现的角落”。更合理的是用真实数据拟合分布,例如以真实均值为中心、按标准差扩展的高斯或截断均匀分布。这就像做菜时盐要按家常口味放,而不是每勺都从“零到致死量”均匀随机。

为何常见:均匀分布代码最简单、最容易想到,且“看起来”覆盖完整,让人忽略了分布的针对性。

误区“域随机化能零样本迁移,说明它完全替代真实数据,从此告别真机采集。”

正解域随机化与真实数据是互补关系。真实数据一方面用来校准随机参数的范围和分布,让随机化不至于跑偏;另一方面用来评估迁移成功率,帮助迭代设计。完全没有真实数据,随机化就成了无根之木——相当于妈妈从没去过外面的餐厅,只凭想象布置餐桌,很难覆盖真实世界的样式。

为何常见:零样本迁移的成功案例被过度宣传,让大家误以为仿真可以完全自洽,忽略了数据在校准环节中的关键作用。

面试题

Q1. 域随机化的核心目标是什么?

单选题 · easy

  • A.让仿真环境渲染更逼真
  • B.让策略对参数变化鲁棒← 正确答案
  • C.精简策略网络的参数规模
  • D.提升仿真环境渲染速度

答案:B。域随机化不追求仿真画面多逼真,而是主动让环境参数变化,训练策略在变化中保持稳定表现。就像妈妈不追求把厨房装修成米其林,而是让宝宝适应各种餐桌。A、D 说的是渲染优化,C 说的是模型压缩,都不符合核心目标。

Q2. 仿真与现实的“分布失配”指的是什么?

单选题 · easy

  • A.仿真渲染画质不够高
  • B.仿真与真实分布不一致← 正确答案
  • C.训练样本分布偏宽
  • D.模型过拟合训练数据

答案:B。分布失配指仿真环境中的参数分布和真实世界的分布不一致,比如仿真光照范围与真实光照差异大。宝宝只熟悉自家厨房,换成学校食堂就认不出饭菜。A 只是表象,C 和 D 描述的是训练过程现象,不是分布失配本身。

Q3. 下列哪一项不属于视觉域随机化的参数?

单选题 · mid

  • A.光照强度
  • B.物体纹理
  • C.物体质量← 正确答案
  • D.相机视角

答案:C。视觉域随机化处理的是“看”相关的参数,包括光照、纹理、视角。物体质量影响的是物理交互,属于物理参数随机化的范畴。就好比“菜的颜色”是视觉问题,“菜有多重”是物理问题。

Q4. 随机化范围过大的主要风险是什么?

单选题 · mid

  • A.学到更通用的表征
  • B.训练难收敛到有效策略← 正确答案
  • C.计算成本大幅下降
  • D.模型过拟合仿真环境

答案:B。随机范围过大会采样大量不现实的参数组合,策略被迫适应“不可能的餐桌”,任务信号被噪声淹没,导致训练难以收敛到有效策略。A 是理想效果而非风险,C 不可能因为随机化而降算力,D 与范围过大的效果相反。

Q5. 零样本 Sim2Real 迁移的含义是什么?

单选题 · mid

  • A.无需真实数据直接部署← 正确答案
  • B.完全不用仿真训练数据
  • C.采集少量数据再微调
  • D.策略网络参数都为零

答案:A。零样本迁移指仿真训练完成后,模型不需要真实数据做额外微调,直接部署到真机。B 说反了,它恰恰依赖仿真数据;C 需要真实数据违背“零样本”;D 是对“零”的误解,零指的是真实数据使用量,不是参数值。

Q6. 为什么在所有参数上均匀随机化可能“平均平庸”?

单选题 · mid

  • A.参数之间的相互耦合
  • B.策略适应不现实样本← 正确答案
  • C.算力资源被白白浪费
  • D.仿真器参数支持有限

答案:B。均匀随机化会让策略把能力浪费在大量现实中不可能出现的参数组合上,比如极端重力加负摩擦。它被迫在这些无意义环境中“平均用力”,结果每个环境都做不好。这就像让宝宝从微辣到变态辣均匀试吃,最后对正常口味都麻木了。

Q7. 域随机化的发展节奏主要不取决于下列哪项?

单选题 · easy

  • A.算法的创新速度
  • B.算力的基础设施
  • C.数据供给的能力
  • D.仿真器界面的美观← 正确答案

答案:D。域随机化的演进由算法创新、算力设施和数据供给共同驱动。仿真器界面美观与否只影响使用便利性,不决定技术本身的发展节奏,就像餐厅装修好看不等于饭菜好吃。

Q8. 下列哪些属于物理域随机化的参数?

多选题 · mid

  • A.摩擦系数← 正确答案
  • B.物体质量← 正确答案
  • C.光照颜色
  • D.关节阻尼← 正确答案

答案:ABD。摩擦系数、物体质量、关节阻尼都影响机器人与环境之间的力学交互,属于物理参数。光照颜色属于视觉参数。可以类比为餐具的“滑溜程度”(摩擦)和“重量”(质量)是物理手感,而灯的色调是视觉效果。

Q9. 下列做法中能有效提升域随机化迁移成功率的是哪些?

多选题 · hard

  • A.用真实数据校准范围← 正确答案
  • B.不断增加随机维度
  • C.少量真实数据微调← 正确答案
  • D.只随机化背景颜色

答案:AC。用真实数据校准让随机范围贴合现实,少量真实微调能补齐随机化覆盖的短板。不断加维度会导致采样爆炸和“平均平庸”,只随机化背景颜色对物理交互任务帮助有限。就好比妈妈既要参考真实餐厅的样子布置训练,也应让孩子在真实餐厅试吃几顿。

Q10. 关于域随机化,下列理解正确的有哪些?

多选题 · extreme

  • A.解决仿真与现实的失配← 正确答案
  • B.随机化越多一定越好
  • C.学习参数变化的鲁棒表征← 正确答案
  • D.完全不依赖真实世界信息

答案:AC。域随机化正是为缓解分布失配而设计,目标是通过大量参数变化让模型学到鲁棒表征。B 错在“越多越好”忽略了无意义随机组合的干扰;D 错在它依然需要真实数据来校准范围和验证效果。妈妈要教出不挑食的宝宝,既要变换训练场景,也要真的去外面的餐厅观察和试吃。