鲁棒性与可解释性

模型调试(model debugging)

/ MOD-ul dee-BUG-ing /

模型调试,是查清「一个机器学习模型为何失败、又该如何修复」的侦探活儿——是横在「模型建好了」与「模型可信了」之间那门凌乱却不可或缺的手艺。它不像调试寻常软件——这里没有一行写坏了的代码等你去找。模型是一堆学出来的数字,而一个错误答案,很少会告诉你它为什么错。你得像一名重建案发现场的侦探那样,去盘问行为、盘问数据、盘问模型的内部。

它的工具箱,就是这个领域里其余的一切,合在一起用。你去看那些错误,而不只是那个平均分——按子群体把表现切开,找出它在哪儿败得最惨。你怀疑虚假相关和捷径学习。你动用特征重要性、显著性图、各种解释工具,去追问模型倚仗的是什么。你核查校准与不确定性,看它知不知道自己何时心里没底。你拿分布偏移和对抗输入去测它。而关键在于:你常会发现,那个bug其实在数据里——一批标错的标签、一处数据泄漏、一个缺失的人群——压根不在算法上。

它之所以要紧,是因为单单一个准确率数字,是一句让人安心的谎言。一个模型可以考到95%,却在那最要紧的5%上崩坏得灾难性——一种罕见疾病、一个少数群体、一个关键的边缘个案。调试,正是把一个「平均而言管用」的模型,变成一个你能负责任地部署的模型的那件事。诚实的现实是:它是迭代的、不光鲜的、且永远没有真正完结的一天:你修好你能找到的,带着监控上线,然后接着盯——因为你尚未找到的那些bug,正是那些将在真实世界里冒头的。

一个语音识别器报出94%的准确率,然后上线了。投诉纷至沓来。把错误切片一看,真相大白:它对一种口音有97%的准确率,可对另一种在训练数据里只占很小比例的口音,却只有70%。那个平均数,藏住了一处严重的失败。修复之道并不是一个更好的算法——而是从那个被亏待的群体里,收集更多的数据。

平均分藏住了那处失败;按子群体切片,才把它揪了出来。

模型调试中最常见的意外是:问题不在模型——而在数据。标错的样本、答案泄漏进了输入、人群代表性不足,所酿成的真实世界故障,比那些精巧的算法缺陷要多得多。在你去调模型之前,先审计数据;bug通常就藏在那儿。

又称
error analysismodel debugging模型调试误差分析模型除錯誤差分析