一句话定义
鲁棒性(Robustness)指的是:当输入发生一些本不该改变结论的小变化时,系统仍能给出稳定、合理的结果。
先看一个反例
同一张猫的照片,调一下亮度、加一点噪点、旋转五度,或者换部手机重拍,人依然认得出这是猫。模型如果在换了光线之后,就把猫判成狗,说明它在“人眼看来完全不重要”的变化上不鲁棒。这类变化在真实世界里天天发生:用户拍发票时手是抖的,说话时在地铁上,输入法还会把字打错。
为什么它会崩
因为模型常常学到一条“捷径”。假设训练集里的猫大多趴在草地上,模型有可能学到的其实是“草地=猫”这个相关性,而不是猫本身的形状、纹理。这种捷径特征在训练数据里非常好用,一到真实场景就容易失效。
极端版本叫对抗样本(adversarial example):给图片叠加一层人眼几乎察觉不到、但经过专门计算的扰动,模型就会以很高的置信度判错。另一类常见问题是分布偏移(distribution shift):训练时用的是白天拍的照片,上线后用户大多在晚上拍照。模型并没有变笨,只是它见过的世界和它面对的世界不一致了。
和相邻概念的区别
| 概念 | 关心的问题 | 常怎么问 |
|---|---|---|
| 准确率 Accuracy | 平均表现如何 | 测试集上答对了多少 |
| 泛化 Generalization | 换一批同类新数据还行吗 | 换个测试集,指标掉多少 |
| 鲁棒性 Robustness | 输入被扰动、分布变了还行吗 | 加噪、换光照、换设备后掉多少 |
| 稳定性 Stability | 输入微变,输出会跳吗 | 同一句话改个标点,答案变不变 |
粗略地说,泛化管的是“没见过的同类题”,鲁棒性管的是“被人改过的题和换了出题风格的题”。
对从业者意味着什么
离线指标好看,并不等于能上线。评估时不要只看一个平均值,要按场景切片看:把最难的那一档单独拎出来看指标,看最差的那批样本错在哪里。工程上常见的做法有数据增强、对抗训练、输入清洗与归一化、用置信度阈值做拒答、保留人工兜底,以及在线上监控输入分布是否漂移。各家厂商公布的评测结果往往测法不同,具体口径以官方页面为准。
对普通人意味着什么
语音助手能不能听懂口音和噪音,OCR 能不能处理拍歪的发票,客服机器人遇到错别字会不会答非所问。这些边角情况单看都不起眼,累积起来却决定了一次产品体验的成败。
一句话收尾:鲁棒性要考虑的核心问题是崩得更少;做得更准不是它的重点。
