很多年前我第一次学开车时,教练把我带进一个被围墙围起来的训练场。场地平整得像镜子,标线崭新,天气永远晴朗,连路边的小树都长得一模一样。我在这个“完美世界”里练得滚瓜烂熟,可教练第一次让我把车开上真实马路时,我却慌了——路边有乱停的车、天上飘着细雨、前车的尾灯晃眼、油门踏板也好像跟我较劲。那一刻我忽然明白:我之前练的不是“开车”,而是“在这个训练场里开车”。 这个故事,正是仿真实训机器人的困境。工程师在仿真器里训练机械臂抓取、四足机器人行走、自动驾驶变道时一切顺利,可一部署到真实世界,策略就像刚走出驾校的学员一样手足无措。原因很简单:仿真器再精细,也和真实世界隔着一条“细节鸿沟”。怎么破局?聪明的教练给出了反直觉的思路——别把训练场修得越来越逼真,而是把它改造成千变万化:今天把标线刷成紫色,明天在路面上洒水,后天给油门换上更松的弹簧。这样一来,学员学会的不是适应某个固定场地,而是适应“变化本身”。这套方法在机器人领域就叫“域随机化”:在仿真中随机化视觉外观和物理参数,让模型在花样百出的环境里练出真功夫。本文将拆解哪些东西可以随机化、随机化的“火候”如何拿捏,以及这套方法如何贯穿训练与部署全流程。

岗位关联

对 AI 从业者与具身智能工程师:域随机化是目前提升仿真到真实迁移成功率最实用、成本最低的方法之一,掌握它能让你的机器人策略在真实世界中真正“活”起来,避免“仿真里满分、真机上翻车”的尴尬。

目录
  1. 可视化演示
  2. 仿真到现实鸿沟
  3. 纹理颜色随机化
  4. 光照条件随机化
  5. 物理参数随机化
  6. 随机化范围选择
  7. 训练部署全流程
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

交互展示域随机化在视觉外观和物理参数方面的随机化策略,理解如何通过仿真多样化提升模型在真实世界的泛化能力。

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

视觉外观随机化 随机化纹理、颜色、光照条件 让模型学会忽略视觉变化关注本质特征 视觉多样性 提升模型对真实世界感知变化的鲁棒性

仿真到现实鸿沟

假如你是一名驾校学员,每周都在同一个训练场练习倒库。场地永远是同一个坡度、同一条标线、同一辆教练车,三个月后你在场内考试次次满分。可一旦把车开上外面的马路——车道宽了半米、方向盘手感不同、头顶还有刺眼的阳光——你发现自己连直线都开不直。问题不在你手脚不灵,而在于你练的是“这个训练场里的驾驶”,而不是“驾驶”。

深度强化学习模型与这位学员如出一辙。我们在仿真器里训练机器人策略时,仿真器就是一个“固定不变的训练场”:物理引擎参数确定、渲染风格统一、障碍物布局固定。策略在反复试错中,会狡猾地记住那些“仿真器特有的线索”——目标物体永远只有一种颜色、地面摩擦永远是同一个值。一旦把这些线索当成金科玉律,部署到真实世界就必然失灵。这个现象,就是所谓的“过拟合仿真环境”。

机器人与 AI 从业者把这种“仿真里风生水起、真机上水土不服”的现象,叫做 Sim-to-Real 迁移鸿沟。它的大小可以用一个直观的指标衡量——策略在真实世界与在仿真世界里的期望回报之差。域随机化的破局思路恰与“把仿真调得更逼真”相反:既然我们无法穷尽真实世界的每一个细节,不如主动把仿真环境变得姿态万千,逼着策略学习真正通用的控制规律。

回到驾校的故事:学员的崩溃,源于训练场太“专一”。域随机化要做的,就是把围墙里的训练场改造成“千面驾校”——今天洒水,明天换车,后天把标线涂花。接下来,我们先从最直观的“涂花标线”说起:纹理与颜色的随机化。

Gap=∣Jreal(π)−Jsim(π)∣\displaystyle \mathrm{Gap} = \left| J_{\mathrm{real}}(\pi) - J_{\mathrm{sim}}(\pi) \right|
通俗说明:Gap 是策略在真实环境与仿真环境中期望回报的距离——距离越小,迁移越成功。
  1. 策略 π代表训练出来的控制规律,比如“看到目标就往左打方向盘”。π 是策略的数学记号。
    π\pi
  2. 期望回报 J把策略放进某个环境跑很多局,把所有局的累计奖励取平均,得到该策略在这个环境中的期望回报。
    Jreal(π),Jsim(π)J_{\mathrm{real}}(\pi), \quad J_{\mathrm{sim}}(\pi)
  3. 差距 Gap真实表现减去仿真表现再取绝对值,就是迁移鸿沟——希望它趋近于 0,说明策略在两边同样出色。
    Gap=∣Jreal(π)−Jsim(π)∣\mathrm{Gap} = |J_{\mathrm{real}}(\pi) - J_{\mathrm{sim}}(\pi)|

纹理颜色随机化

教练为了让学员不依赖“标线是白色的”这个固定线索,干脆每周都把训练场的标线、路障、围墙刷成不同的颜色,有时甚至画上一些奇怪的花纹。学员一开始很困惑,慢慢地,他学会了只看路面的几何形状和边界,而不是死记颜色。

机器人视觉感知同样会偷懒。在仿真里,如果所有抓取目标都是红色箱子,模型就会把“红色”当成“可抓取”的捷径特征,而忽略形状本身。域随机化的第一步,就是打碎这些视觉捷径:给纹理贴图叠加随机噪声、让物体颜色在每个训练回合都变个调调、把背景材质换成完全不同的样式。模型再也找不到“颜色=类别”的作弊密码,只能被迫关注真正的几何结构。

在实现上,最常用的做法是在 HSV 色彩空间做扰动。H 是色相,S 是饱和度,V 是明度。相比直接在 RGB 三通道上盲目加噪,HSV 扰动更符合人的视觉感知——稍微转动“色相”旋钮,颜色就会产生自然而显著的变化,而不会出现刺眼的伪影。与此同时,桌面的木纹、墙上的贴图、传送带的材质也会被替换成随机图案,让视觉编码器无从依赖任何外观捷径。

练就了“看形状不看颜色”的火眼金睛,学员心里刚踏实一点,教练又出了新难题——光线。清晨、正午、黄昏、阴雨天,同样的标线在不同光线下完全是两副面孔。这就要看下一节的光照随机化。

Ihsv′=(H+Δh,  S×(1+Δs),  V+Δv),Δh,Δs,Δv∼U(−δ,+δ)\displaystyle I'_{\mathrm{hsv}} = \left( H + \Delta_h,\; S \times (1 + \Delta_s),\; V + \Delta_v \right), \quad \Delta_h, \Delta_s, \Delta_v \sim U(-\delta, +\delta)
通俗说明:把颜色拆成“色调、浓淡、明暗”三个旋钮,训练时随机转动这三个旋钮,颜色就千变万化。
  1. H/S/V 三分量H 色相决定颜色的基调(红绿蓝紫),S 饱和度决定颜色浓淡,V 明度决定整体亮暗。
    H,S,VH, S, V
  2. 随机扰动 Δ每个旋钮的扰动值从对称的均匀分布中抽取,正负都可能,幅度由 δ 控制。
    Δh,Δs,Δv∼U(−δ,+δ)\Delta_h, \Delta_s, \Delta_v \sim U(-\delta, +\delta)
  3. 组合成新颜色色相加偏移量、饱和度乘缩放因子、明度加偏移量,得到扰动后的新颜色三元组。
    Ihsv′=(H+Δh,  S×(1+Δs),  V+Δv)I'_{\mathrm{hsv}} = (H + \Delta_h,\; S \times (1 + \Delta_s),\; V + \Delta_v)

光照条件随机化

教练的第二步:把训练安排在清晨、正午、黄昏、阴雨天——或者干脆把场地里的灯光调成不同的亮度和色温。学员很快发现,白色标线在夕阳下会泛黄,在阴天里发灰;如果只记住“标线是白的”,换个光线就认不出来。他必须学会透过光线的干扰,去看清路面的本质。

即使纹理和颜色都随机化了,光线仍然是视觉感知的头号敌人。仿真中光源如果固定在天花板,模型可能把“阴影的方向”当成障碍物的线索;真实世界里,太阳、路灯、室内射灯会从各种角度袭来,阴影长短、反光强弱、曝光程度随时在变。如果不做光照随机化,部署到真机时一个简单的逆光场景就能让视觉策略全线崩溃。

域随机化的做法是:光源位置在一个区域里随机采样,光照强度则常常从对数均匀分布中抽取——因为人眼对亮度的感知近似对数关系,直接用均匀分布会导致低亮度区间的样本太少。阴影的软硬、曝光补偿、白平衡色温也随之抖动,让模型反复在“半明半暗”“逆光刺眼”的边缘场景中训练,直到它学会看轮廓而非看亮度。

学员从此无论阴晴圆缺都能看清路况。但看得清还不够,还得“开得稳”——毕竟教练的终极考验,是让学员适应完全不同的车况和路况。这就是物理参数的随机化。

L∼LogUniform(Lmin⁡,Lmax⁡)\displaystyle L \sim \mathrm{LogUniform}(L_{\min}, L_{\max})
通俗说明:亮度不是均匀地加加减减,而是在对数刻度上拉开——既照顾昏暗的傍晚,也照顾暴晒的正午。
  1. 光照强度 L表示场景中光源的明暗程度,它直接决定渲染图像的曝光水平。
    LL
  2. 对数均匀分布在取对数后的数值区间内做均匀采样,使低亮度和高亮度范围都能获得足够的训练样本。
    LogUniform(Lmin⁡,Lmax⁡)\mathrm{LogUniform}(L_{\min}, L_{\max})
  3. 范围上下限L_min 和 L_max 分别是可以接受的最暗与最亮值,通常参考真实场景的照度范围设定。
    Lmin⁡,Lmax⁡L_{\min}, L_{\max}

物理参数随机化

教练的第三招:给车换上软硬不同的悬挂、在后备箱放几袋沙子、把油门调得忽灵忽钝、甚至洒水模拟湿滑路面。学员每换一辆车,都要重新感受油门、刹车和转向的脾气。练得多了,他上车后不再依赖记忆,而是靠手上的实时反馈不断调整。

机器人的“手感”由物理参数决定。机械臂抓取时,目标物体的质量、表面的摩擦系数、关节电机的阻尼,都会直接影响抓取力的大小与速度;四足机器人行走时,地面摩擦、自身负载、关节响应延迟同样关键。如果仿真里所有物体都是标准重量、标准摩擦,策略到了真实世界就会用力过猛或者握不住、踩不稳。

域随机化在每个训练回合开始时,从预先设定的分布里重新采样物理参数:摩擦系数可以在 0.2 到 1.5 之间随机,质量在 0.5 到 2.0 千克之间随机,关节阻尼、控制延迟也一并抖动。策略在千百种“手感”下反复练习,学到的不再是对某个固定参数组合的精确调校,而是一套能够根据实时反馈自适应调整的通用控制律——就像老司机开什么车都能快速上手。

开过各种车况的学员,上了真车自然稳如泰山。可是——沙袋放多少、水洒多湿,这个“度”到底怎么把握?随机化范围太小等于没练,太大又会把学员吓退。下一节,我们聊聊这门“火候”的艺术。

μ∼U(μmin⁡,μmax⁡),m∼U(mmin⁡,mmax⁡)\displaystyle \mu \sim U(\mu_{\min}, \mu_{\max}), \quad m \sim U(m_{\min}, m_{\max})
通俗说明:把物理参数当成旋钮,每个训练回合都重新拧一遍,让机器人习惯各种“脾气”的对象。
  1. 摩擦系数 μ决定接触面滑还是不滑,μ 越大,表面越“抓得住”。
    μ\mu
  2. 质量 m决定物体惯性大小,相同力作用下质量越大加速度越小。
    mm
  3. 均匀分布 U在上下限之间等概率采样,保证每个物理参数取值被公平地训练到。
    U(μmin⁡,μmax⁡),U(mmin⁡,mmax⁡)U(\mu_{\min}, \mu_{\max}), \quad U(m_{\min}, m_{\max})

随机化范围选择

教练如果每天让学员在冰面上练车,学员恐怕连起步都学不会;如果只在路面略洒几滴水,学员依旧怕下雨。真正的好教练会先观察真实道路的情况——雨天路面的滑度大概是多少、自家车与教练车的油门灵敏度差多少——再决定训练场里“刁难”的尺度。

随机化范围是整个方法最核心的超参数。范围太小,环境“变了个寂寞”,模型依旧过拟合仿真;范围太大,任务变成“在飓风里穿针引线”,策略连基本技能都学不到。工程实践上有两条黄金原则:第一,随机化范围必须覆盖真实世界参数的分布;第二,在覆盖真实分布的前提下,范围越窄越好。范围越宽,学习难度越高,策略能分给每个环境的学习预算就越少。

最实用的落地方法是“真实数据校准法”:先采集一小批真实环境中的参数观测值,估计出均值和标准差,再把随机化范围设定为均值加减 3~5 倍标准差。这样既能保证真实参数大概率落入训练范围,又不会把随机性浪费在现实中不可能出现的极端取值上——既罩得住真实,又不拖学习后腿。

“恰到好处的刁难”才是好教练。掌握了范围的学问之后,最后我们把整个训练与部署的流程串起来,看看域随机化如何从理论走向工程。

θ∼U(μreal−kσreal,  μreal+kσreal)\displaystyle \theta \sim U\left( \mu_{\mathrm{real}} - k\sigma_{\mathrm{real}},\; \mu_{\mathrm{real}} + k\sigma_{\mathrm{real}} \right)
通俗说明:把真实世界的参数想象成一群散点,随机化范围就是罩住这些散点并且收得最紧的“伞面”。
  1. 参数 θ代表任意一个被随机化的量,比如摩擦系数、质量或光照强度。
    θ\theta
  2. 真实均值与标准差μ_real 是真实采集数据的中心,σ_real 描述真实数据的波动幅度。
    μreal,σreal\mu_{\mathrm{real}}, \sigma_{\mathrm{real}}
  3. 覆盖系数 k通常取 3 到 5,控制“伞面”的松紧——k 越大覆盖越全,但学习也越难。
    kk
  4. 校准后的区间随机化参数在均值两侧各扩展 k 个标准差,形成正方形般的均匀采样区间。
    U(μreal−kσreal,  μreal+kσreal)U\left( \mu_{\mathrm{real}} - k\sigma_{\mathrm{real}},\; \mu_{\mathrm{real}} + k\sigma_{\mathrm{real}} \right)

训练部署全流程

千面驾校的毕业流程是这样的:学员每天面对不同的车况、路况和光线,在一次次的出错中总结经验,直到无论遇到什么状况都能稳定地把车开到终点,最后在真实马路上一次通过路考。没有哪一天是“标准的一天”,正是这份不标准,炼出了真正的驾驶能力。

技术上的完整闭环与之对应:每个训练回合,先采样一组环境参数——纹理模式、光照强度、摩擦系数、物体质量——然后在这个随机化环境里让策略交互若干步,收集轨迹与奖励;把大量随机环境的数据汇合起来更新策略参数;如此往复,直到策略在所有随机环境中的平均表现收敛。训练完成后,把策略部署到真实机器人上,再采集真机数据评估或微调,形成“仿真训练—真机验证—反馈迭代”的闭环。

整个流程可以用域随机化强化学习的目标函数概括:我们要找一个策略,使得“先在随机环境分布上采样环境、再在该环境中沿策略轨迹累计折扣奖励”的期望值最大。通俗地说,就是让策略在所有“千变万化”的考官面前都拿到足够高的总分,才算真正毕业。

从围墙里一成不变的训练场,到千变万化的“千面驾校”,再到真实马路的一次通过——域随机化用“变化”对冲“未知”,这正是它在 Sim-to-Real 迁移中最朴素也最犀利的智慧。

θ∗=arg⁡max⁡θ  Eξ∼Ξ[Eτ∼πθ(⋅∣ξ)∑t=0Tγtrt]\displaystyle \theta^{*} = \arg\max_{\theta}\; \mathbb{E}_{\xi \sim \Xi} \left[ \mathbb{E}_{\tau \sim \pi_{\theta}(\cdot|\xi)} \sum_{t=0}^{T} \gamma^{t} r_t \right]
通俗说明:把“随机环境库”看作考官库,策略必须在所有考官面前都能拿高分,才算真正毕业。
  1. 环境参数 ξ每个回合从随机化分布中抽取一组环境参数,比如摩擦系数、光照强度等。
    ξ∼Ξ\xi \sim \Xi
  2. 策略 πθ由待优化的参数 θ 决定的控制策略,给定环境 ξ 后按概率采样动作。
    πθ(⋅∣ξ)\pi_{\theta}(\cdot|\xi)
  3. 轨迹回报在一条交互轨迹中,把每一步奖励 r_t 乘以折扣因子 γ 的 t 次幂再累加,得到这条轨迹的回报。
    ∑t=0Tγtrt\sum_{t=0}^{T} \gamma^{t} r_t
  4. 双重期望外层期望遍历所有随机环境,内层期望遍历同一环境中的多条轨迹,两者合起来度量“平均表现”。
    Eξ∼Ξ[Eτ∼πθ(⋅∣ξ)⋯ ]\mathbb{E}_{\xi \sim \Xi} \left[ \mathbb{E}_{\tau \sim \pi_{\theta}(\cdot|\xi)} \cdots \right]
  5. 最优参数 θ\*在所有候选策略参数中,使平均回报最大化的那一个,就是最终部署到真机的策略。
    θ∗=arg⁡max⁡θ  ⋯\theta^{*} = \arg\max_{\theta}\; \cdots

AI 应用场景

工业机械臂抓取分拣

阶段:数据生成与策略训练(Sim-to-Real 迁移)

解决的问题:传统方式下,机械臂抓取策略在仿真中训练后,一到真实产线就因光照变化、工件表面纹理差异、重量波动而失败。域随机化在仿真中随机化工件颜色、纹理、光照角度以及摩擦力和质量,让抓取策略学会“看形状、感力度”,而不依赖任何固定外观或手感。

具体案例:某 3C 电子厂使用域随机化训练的机械臂抓取不同型号的手机外壳,外壳有黑、白、磨砂、亮面等多种外观,传送带上光照会随天窗变化。部署后抓取成功率从 68% 提升到 94%,且无需逐型号重新训练。

四足机器人户外行走

阶段:策略泛化与鲁棒控制

解决的问题:四足机器人在仿真草地学会的步态,到真实石板路、沙地、湿滑坡道上常打滑摔倒。域随机化对地面摩擦系数、地形起伏、机器人本体质量和关节阻尼做随机采样,训练出适应多种地形的通用步态控制器。

具体案例:某高校团队在仿真中随机化草坪、碎石、湿泥三类地形的摩擦系数(0.3~1.2)和足底打滑程度,训练后的四足机器人在真实户外连续行走 2 小时不摔倒,跨地形速度衰减比未随机化的模型减少 40%。

家庭服务机器人视觉导航

阶段:视觉感知与导航策略迁移

解决的问题:家庭环境的光照、地板纹理、地毯材质千差万别,仿真中训练的导航策略往往因“没见过”而迷路或碰撞。域随机化改变光源位置、色温与地板花纹,同时随机化轮子与地面的摩擦系数,让导航策略适应不同家庭的物理与视觉差异。

具体案例:某扫地机器人厂商在仿真中随机化户型的木地板、瓷砖、短毛毯三类地面,并模拟黄昏、夜晚、阴天三种光照条件。真机实测中,机器人在 50 户陌生家庭的平均碰撞次数从 7 次/小时降到 1 次/小时,清洁覆盖率提升 23%。

Python 演示

python52 行
import random def make_env(x_range, wind_range):    """构造环境工厂, x_range控制起始位置范围, wind_range控制风力范围"""    def reset():        x = random.uniform(-x_range, x_range)        w = random.uniform(-wind_range, wind_range)        return x, w    return reset def run_episode(k, reset, horizon=120, train=True):    """线性策略 a=-k*x 跑一个episode, 训练时计入能耗, 评估时只看精度"""    x, w = reset()    a_prev = 0.0    total = 0.0    for _ in range(horizon):        x = x + a_prev * 0.1 + w * 0.05        a = -k * x        a_prev = a        if train:            total += x * x + 0.2 * a * a        else:            total += x * x    return total def search_policy(reset, trials=15, candidates=120):    """随机搜索: 在候选比例系数k中挑平均损失最小的"""    best_k, best_loss = 1.0, float("inf")    for _ in range(candidates):        k = random.uniform(0.2, 3.0)        loss = sum(run_episode(k, reset) for _ in range(trials)) / trials        if loss < best_loss:            best_k, best_loss = k, loss    return best_k def evaluate(k, reset, episodes=200):    """部署到真实环境, 只统计位置误差"""    return sum(run_episode(k, reset, train=False) for _ in range(episodes)) / episodes sim_ideal = make_env(1.0, 0.0)      # 仿真A: 无风, 环境固定sim_random = make_env(2.0, 1.0)     # 仿真B: 域随机化, 风力随机sim_chaos = make_env(4.0, 3.0)      # 仿真C: 范围过大的随机化 real = make_env(1.5, 1.2)           # 真实世界: 风力随机且有扰动 k_ideal = search_policy(sim_ideal)k_random = search_policy(sim_random)k_chaos = search_policy(sim_chaos) print("理想仿真     k=%.2f  真机误差=%.3f" % (k_ideal, evaluate(k_ideal, real)))print("域随机化     k=%.2f  真机误差=%.3f" % (k_random, evaluate(k_random, real)))print("超大范围随机 k=%.2f  真机误差=%.3f" % (k_chaos, evaluate(k_chaos, real)))
目的:用一个带风干扰的 1D 控制任务,对比“固定仿真”“域随机化”“范围过大”三种训练方式部署到真实环境的误差,直观演示域随机化提升迁移鲁棒性、同时范围过大会损害性能。
  1. def make_env(x_range, wind_range):环境工厂,每次 reset() 采样不同的起始位置与风力,这是“域随机化”的采样入口。
  2. x = x + a_prev * 0.1 + w * 0.05环境动力学:上一步的动作和当前风力共同决定新位置,风力就是“真实世界”的未知干扰。
  3. a = -k * x线性策略:根据当前位置朝目标(0 点)运动,k 相当于学员的“反应强度”。
  4. if train: total += x * x + 0.2 * a * a训练时除了精度还计入能耗,防止 k 无限增大,模拟真实系统的控制成本。
  5. search_policy随机搜索训练:在候选 k 中挑选平均损失最小的,相当于在仿真里“练车”。
  6. sim_ideal = make_env(1.0, 0.0)理想仿真:永远无风,对应“完美但单一”的训练场。
  7. sim_random = make_env(2.0, 1.0)域随机化仿真:风力在 [-1,1] 随机,对应“千面驾校”。
  8. evaluate(k, real)把训练好的策略拿到真实环境(风力随机)中评估,只看位置误差。
  9. print(...)输出三组对比结果,通常“域随机化”一行的真机误差最小。

常见误区

误区只要花钱把仿真器的渲染和物理引擎调到接近真实,策略迁移失败的问题就能解决,域随机化是“偷懒”的替代方案。

正解仿真永远无法穷尽真实世界的细节——真实世界的纹理、光照、摩擦在空间和时间上都是变化的。域随机化的核心恰恰是放弃“无限逼近真实”,转而用“多样性”覆盖真实分布。逼真但单一的环境,只会让模型更“专一”,迁移时更脆弱。实践中常出现“更逼真的仿真器训练效果反而不如加了随机化的旧仿真器”的情况。

为何常见:人们直觉上认为“像什么就能学会什么”,忽略了一个事实:模型记住的是“像”背后的固定线索,而不是通用规律。

误区既然随机化有效,那就把纹理、光照、物理参数的范围全都拉满,模型见过的变化越多,一定越鲁棒。

正解范围过大会让任务变得几乎不可解——想象学员天天在飓风里练车,连起步都站不稳,自然学不会任何技能。正确做法是“覆盖真实分布且尽量窄”:先采集真实数据估计参数均值和波动,再把范围设成均值附近 3~5 个标准差。范围不是越大越好,而是“罩得住真实、又不过度刁难”才好。

为何常见:人们把“随机化的多样性”误解为“随机化的幅度”,忽略了学习难度与数据效率的制约。

误区在渲染图像上随便加点高斯噪声、或者把颜色随机改一改,就算做了域随机化。

正解域随机化是系统性的环境参数分布设计:视觉上要覆盖纹理、颜色、光照、阴影、色温;物理上要覆盖摩擦、质量、阻尼、控制延迟。更关键的是,这些参数的分布要依据真实世界的统计来锚定,而不是随手拍脑袋。只加噪不仅无法覆盖真实变化,还可能破坏任务本身的可学习性。

为何常见:从表面看,随机化确实像“加噪声”,因此容易被简化成一个随手可做的预处理步骤。

误区做了域随机化之后,策略在仿真里的成功率或奖励明显低于“固定仿真”训练,于是认为随机化损害了模型性能。

正解域随机化的目标本来就不是在仿真里刷高分,而是缩小仿真与真实的差距。固定仿真可以“背题”,所以分数虚高;随机化环境逼着模型“学能力”,仿真分数有小幅下降是正常且健康的。判断标准应看真机部署的表现,而不是仿真内的分数。

为何常见:评估惯性让人习惯用仿真内指标衡量模型好坏,忘了这些指标本身可能已经被过拟合污染。

误区只要把能想到的参数都随机化一遍,策略部署到真实世界就万事大吉。

正解域随机化不是银弹。如果仿真器本身缺乏某些关键物理规律——比如柔软物体的形变、流体的粘滞、线缆的缠绕——那么随机化只是在一个错误的模拟上变花样,依旧无法覆盖真实的物理过程。此外,真实分布中极端罕见的“长尾场景”也可能落在随机化范围之外。因此域随机化常需与真实数据校准、真机迭代微调等手段配合,才能取得稳定效果。

为何常见:成功案例让人误以为“随机化=万能”,而忽略了仿真器的模型偏差和真实世界分布的复杂性。

面试题

Q1. Sim-to-Real 迁移失败的根本原因是什么?

单选题 · easy

  • A.仿真器渲染速度太慢
  • B.策略过度依赖仿真特征← 正确答案
  • C.真实机器人硬件损坏
  • D.训练数据量远远不够

答案:B。策略在仿真中会记住“仿真器特有的线索”,比如固定的颜色、光照或摩擦值,这叫过拟合仿真环境。正如学员记住的是“训练场里的驾驶”,渲染速度、硬件损坏和数据量都不是迁移失败的本质原因。

Q2. 域随机化的核心思想是什么?

单选题 · easy

  • A.让仿真环境更接近真实
  • B.在仿真中引入多样变化← 正确答案
  • C.用真实数据替换仿真数据
  • D.只随机化视觉外观参数

答案:B。域随机化不追求仿真器与真实世界“长得像”,而是在仿真中引入大量随机的视觉与物理变化,让策略学会适应“变化本身”。它并不排斥真实数据,但核心手段是多样化的环境采样;也不只随机化视觉,物理参数同样要随机化。

Q3. 纹理颜色随机化通常选择在哪个色彩空间做扰动?

单选题 · mid

  • A.RGB三通道直接加噪声
  • B.HSV色彩空间做扰动← 正确答案
  • C.CMY印刷色彩空间
  • D.Lab设备无关色彩空间

答案:B。HSV 把颜色拆成色相、饱和度、明度三个分量,扰动起来更符合人类感知,转动色相旋钮就能产生自然的色差。RGB 直接加噪容易产生伪影;CMY 和 Lab 在图形渲染管线中并不如 HSV 常用。

Q4. 光照强度随机化通常使用什么分布?

单选题 · mid

  • A.标准正态分布
  • B.对数均匀分布← 正确答案
  • C.伯努利分布
  • D.泊松分布

答案:B。人眼对亮度的感知近似对数关系,用对数均匀分布能保证从昏暗到明亮都有充分的训练样本。正态分布会集中在中间亮度,伯努利和泊松分布则不适合连续光照强度采样。

Q5. 随机化范围选择的核心原则是什么?

单选题 · mid

  • A.范围越大迁移效果越好
  • B.覆盖真实分布且尽量窄← 正确答案
  • C.与仿真范围保持一致
  • D.统一取固定较小范围

答案:B。随机化范围要先罩住真实世界的参数分布,这是迁移成功的前提;同时范围越窄,学习难度越低。范围过大会让任务不可解,过小则无法覆盖真实变化。固定取小范围或完全照搬仿真范围都不符合这两条原则。

Q6. 下列哪项属于物理参数随机化?

单选题 · easy

  • A.摩擦系数扰动← 正确答案
  • B.渲染管线更换
  • C.相机分辨率调整
  • D.文本标注修正

答案:A。摩擦系数直接影响机器人与物体的接触力学,是物理参数随机化的典型对象。渲染管线和相机分辨率属于视觉渲染层面,文本标注则与物理仿真无关。

Q7. 随机化范围过大导致训练失败的主要原因是?

单选题 · hard

  • A.任务变得几乎不可解← 正确答案
  • B.仿真器帧率大幅下降
  • C.真实数据被完全覆盖
  • D.策略收敛速度反而加快

答案:A。范围过大相当于让学员在飓风里练车,环境变化过于剧烈,策略连基础技能都无法稳定学到,任务在数学上变得难以优化。帧率下降与随机化范围无直接关系,“覆盖真实数据”是好事而非坏事,收敛加快更与范围过大相悖。

Q8. 域随机化训练流程包含哪些环节?

多选题 · mid

  • A.采样环境参数← 正确答案
  • B.并行训练鲁棒策略← 正确答案
  • C.真机批量评估← 正确答案
  • D.人工标注每个样本

答案:ABC。流程闭环是“采样环境参数→在随机环境并行训练→收敛后真机验证迭代”。人工标注样本不是域随机化流程的一部分,它属于监督数据生产,而域随机化依靠自动化的环境采样生成训练信号。

Q9. 光照随机化会调整以下哪些量?

多选题 · hard

  • A.光源位置与方向← 正确答案
  • B.场景物体纹理贴图
  • C.曝光与色温参数← 正确答案
  • D.机器人的关节阻尼

答案:AC。光照随机化主要改变光源位置、方向、强度,以及渲染中的曝光、白平衡色温等参数,让模型对光线变化不敏感。物体纹理贴图属于纹理随机化范畴,关节阻尼属于物理参数随机化范畴。

Q10. 以下哪些手段能有效提升 Sim-to-Real 迁移成功率?

多选题 · extreme

  • A.域随机化视觉物理参数← 正确答案
  • B.基于真实数据校准范围← 正确答案
  • C.仿真器物理引擎更换
  • D.训练后真机迭代微调← 正确答案

答案:ABD。域随机化视觉与物理参数是核心;用真实数据校准随机化范围能避免“随机化脱离真实”;真机迭代微调则弥补仿真器未覆盖的长尾偏差。仅更换物理引擎属于“提高仿真保真度”的范畴,并不直接构成迁移手段,且无法消除仿真与真实的根本差异。