真实危险率只有 3.365%。 随机抽 200 个场景平均只命中 6.5 个危险场景;偏置采样能命中 70.6 个——但直接拿命中率当概率, 会报出 34.2%,高估 10 倍。按似然比加权之后回到 2.561%, 代价是 4 万个样本只顶 9 个用。
前两节讲「怎么感知、怎么决策」。这一节讲「怎么证明它靠谱」。 智驾的验证难题不在技术,在于「危险场景太稀有」。
一、稀有事件是仿真的核心难题
一个自动驾驶系统要证明自己比人安全,需要跑几十亿公里。 实车跑不起,只能靠仿真。 但仿真有个根本问题:危险场景在自然分布里极其稀有。Demo 里按「车距 15 米以上、 相对速度 0 以上」的自然分布算,真正刹不住的比例只有 3.365%。 3.365% 这个数其实已经偏高了——真实道路上「刹不住」的概率远低于万分之一。 但它足以说明问题:随机抽 200 个场景,只命中 6.5 个。 而恰恰是这 6.5 个才是真正要测的。其余 193 个场景,系统表现再好也不说明任何事。
二、随机采样撞不上,偏置采样能撞上
| 采样方式 | 危险场景数 | 最少 | 最多 | 命中率 |
|---|---|---|---|---|
| 随机采样 | 6.5 | 4 | 12 | 3.3% |
| 偏置采样 | 70.6 | 58 | 81 | 35.3% |
| (每轮 200 个场景,重复 20 轮。真实危险率 3.365%。) | ||||
| 偏置采样做的事很简单:把分布往「车距小、相对速度大」挪。 | ||||
| 具体是把车距的指数分布尺度从 25 米压到 5 米、把相对速度的均值从 0 抬到 8 米/秒。 | ||||
| 命中率从 3.3% 涨到 35.3%,一轮就有 70 个危险场景。 | ||||
| 这个数量才够做统计。 | ||||
| 所以「多测危险场景」的正确做法不是「多跑」,是「改采样分布」。 | ||||
| 这是仿真测试最重要的一次方法论转变。 |
三、比例不再是概率
但偏置采样有个陷阱:命中率 35.3% 不是危险率。 因为采样分布被你改了,比例失去了概率含义。 直接拿它当危险率,会报出 34.2%——真实值 3.365%, 高估了 10 倍。这个错误在仿真报告里非常常见: 「我们的测试中 34% 是危险场景」,然后被误读成「34% 的行驶是危险的」。 正确做法是按似然比加权:每个样本乘一个权重,等于「原分布的密度 ÷ 采样分布的密度」。 直观理解:一个「车距 20 米、相对速度 5 米/秒」的样本,在偏置分布里很常见, 在原分布里也不罕见——权重大。 而「车距 18 米、相对速度 30」的样本,在原分布里几乎不可能出现——权重小。 加权之后,稀有场景就不再被高估。 Demo 加权后估出 2.561%,真实 3.365%。不算完全对上,但量级对了。
四、代价:4 万个样本只顶 9 个
加权不是免费的。Demo 里 4 万个偏置样本,加权后的「有效样本量」只有 9 个。 有效样本量的算法是(权重和的平方)÷(权重平方和)。 它衡量的是「这些样本等效于多少个等权样本」。权重越集中,有效样本越少。 为什么这么惨? 因为偏置得越狠, 「原分布里几乎不可能、偏置分布里很常见」的样本越多,它们的权重就越小,几乎不起作用。 真正贡献信息的,只有那几个「偏置后仍然常见」的样本。 这就是偏置采样的根本矛盾:采得越猛,命中越多,但有效样本越少。 所以不能靠「一直加大偏置」来解决问题。 实务上的折中:偏置到命中率 10% 到 30% 这个区间,既采得到,又不至于把样本用废。 再加上「方差缩减」手段(分层采样、控制变量),把有效样本量拉上来。
五、落地:两种采样各干各的事
① 找 bug 用偏置采样。要的是「尽快撞到边界」,命中率越高越好,不需要加权。 这一阶段的目标是「发现问题」,不是「估计概率」。 ② 报指标用加权估计。要的是「危险率是多少」,必须按似然比加权,并且报有效样本量。 只报点估计不报有效样本量,等于隐藏了不确定性。 ③ 两条路都要有。只有偏置采样 → 光找 bug 不知道概率;只有随机采样 → 概率准但什么 bug 都找不到。 这是两个不同的问题,不能用一个数字回答。 ④ 场景库要能追溯。每个场景要记清楚「从哪个真实数据来的」或者「怎么生成的」, 否则出了问题无法复现。 仿真测试最怕的不是覆盖率不够,是「测过的场景复现不了」。 最后一句:「仿真跑了多少亿公里」这个数字本身没有意义。 有意义的是「其中多少是危险场景、加权后等效多少、覆盖了哪些类型」。
六、动手 Demo:场景采样:随机抽 200 个只命中 6.5 个危险场景,偏置采样 71 个
场景空间是「车距 × 相对速度」两维,反应时固定 1.1 秒、摩擦系数固定 0.7, 按「车距 < 相对速度 × 反应时 + 相对速度² ÷ (2μg)」判定刹不住。先随机抽 4 万个估计真实危险率; 再分别用随机分布和偏置分布各抽 20 轮、每轮 200 个,统计命中数; 最后对偏置样本按似然比加权,看能不能把危险率估回来,并算有效样本量。
def risk(d, vr): # 刹不住
return d < vr * 1.1 + vr * vr / (2.0 * 0.7 * G)
# 原分布:车距 Exp(25)+15、相对速度 |N(0,6)|
# 偏置: 车距 Exp(5)+15、 相对速度 |N(8,6)|
w = p_d_rand(d) / p_d_imp(d) * p_v_rand(v) / p_v_imp(v)
p_w = (w * bad).sum() / w.sum()
ess = w.sum() ** 2 / (w ** 2).sum() # 有效样本量
实跑输出:
--------------------------------------------------------------------
场景采样:随机抽 200 个只命中 6.5 个危险场景,偏置采样 71 个
--------------------------------------------------------------------
场景空间 车距 15 米以上、相对速度 0 以上
固定条件 反应时 1.1 秒、摩擦系数 0.7
真实危险率 3.365%(40000 次随机采样估的)
每轮采样量 200 个场景,重复 20 轮
采样方式 危险场景数 最少 最多 命中率
-------------------------------------------
随机采样 6.5 4 12 3.3%
偏置采样 70.6 58 81 35.3%
真实危险率只有 **3.365%**——**随机抽 200 个场景,平均命中 6.5 个。**
**想攒 100 个危险场景,得跑上万个。**
但危险场景恰恰最该测:**正常跟车跑十万公里也不会暴露一次失效。**
偏置采样把分布往「车距小、相对速度大」挪:**命中率 35%,一轮就有 71 个。**
代价在下面:**直接拿命中率当危险率,会报出 34.2%,**
真实值 3.365%——**高估了 10 倍。**
**因为采样分布被你改了,比例就不再是概率。**
正确的做法是按似然比加权(每个样本乘「原分布密度 ÷ 采样分布密度」):
**加权后估计 2.561%,真实值 3.365%**,量级终于对了。
但**有效样本量只有 9 个**(原本 40000 个)——加权会把样本「用薄」。
这一条是仿真测试最容易出错的地方:**「多测危险场景」和「估计危险概率」是两件事。**
**找 bug 用偏置采样,报指标必须加权。**不加权就把「我特意找来的」当成了「自然发生的」。
最后一句最要紧:**这次 4 万个样本,加权后只顶 9 个用。**
**权重方差越大,加权估计越不可信**——所以偏置得越狠,需要的样本越多。
**实务上的折中:偏置到「命中率 10% 到 30%」这个区间,既采得到,又不至于把样本用废。**
done -> _out_39q.txt
真实危险率 3.365%,随机抽 200 个只命中 6.5 个。 想攒 100 个危险场景得跑上万个——这就是实车验证跑不起的原因, 仿真跑得起,但如果采样方式不变,同样低效。 偏置采样命中 70.6 个,命中率 35.3%,代价是那 34.2% 的假概率——高估 10 倍。 加权后 2.561%,真实 3.365%。 差 0.8 个点,看着不大。 但有效样本只剩 9 个——换句话说,这个估计的置信区间非常宽。 这一行数是这一节最值钱的:4 万个样本只顶 9 个用。 说明「采得多」不等于「信息多」。 偏置采样把样本从「自然分布」拉到「危险区」, 但同时也把绝大部分样本变成了「在原分布里几乎不可能」的样本,加权后等于白采。 要说明:分布形式、参数、危险判据都是我设的,只有两个维度,真实场景空间有几十维。 但「随机采样低效、偏置采样高效但会高估、加权后有效样本骤减」这三条规律是真的, 也是这一节唯一要记住的东西。
30 秒实验
- 把偏置分布的车距尺度从 5 米改成 10 米(偏置轻一点),看命中率和有效样本量。 命中率会降到 20% 左右,但有效样本量会从 9 涨到几十——这就是那个折中。
- 把样本量从 4 万加到 40 万,看加权估计和有效样本量。 有效样本量会涨到 90 左右,估计更稳——但计算量也涨十倍。
- 把反应时从 1.1 改成 1.6 秒,看真实危险率。会明显上升——反应慢,刹不住的比例自然高。
常见误区
- 「仿真跑了几亿公里就够了」。关键不是总量,是其中多少是危险场景。
- 「偏置采样命中率高,所以危险率高」。采样分布改了,命中率就不再是概率,高估 10 倍。
- 「加权之后就准了」。加权会大幅减少有效样本,4 万个只顶 9 个用,估计的方差很大。
自测三问(点开对答案)
1. 为什么随机采样测不出智驾的问题? —— 危险场景在自然分布里极稀有(本例 3.365%),随机抽 200 个只命中 6.5 个, 要攒够样本得跑海量场景。 2. 偏置采样为什么不能直接报危险率? —— 它改变了采样分布,命中比例不再等于概率。必须按「原分布密度 ÷ 采样分布密度」加权才能还原。 3. 什么是有效样本量,为什么它这么小? —— (权重和²)÷(权重平方和),衡量等效的等权样本数。偏置越狠,权重越集中,有效样本越少。第十章讲完了:从数据合规,到感知、决策、验证。 这一整章反复出现同一个判断——能不能上路,取决于最弱的那一环。下一章换到医疗与法律, 那两行的容错空间比交通还小。
- ☐ (本章完,下一节 11.1.1 数据安全与隐私保护)