分布偏移(distribution shift)
/ dis-truh-BYOO-shun shift /
分布偏移,指的是模型在真实世界里遇到的数据,不再像它当初训练时所见的数据了。模型学习训练集里的规律,就像一个旅人摸熟了某一座城市的风俗;可把这旅人扔到异国他乡,那套旧规矩就处处失灵。模型被教导的那个世界,和它如今运转其中的这个世界,已经悄悄分了岔;而模型对此一无所知,依旧不减半分自信地继续作答。
它有几种一眼能认出的形态。输入本身可能变了——一个在某种新支付应用出现之前训练好的欺诈模型;一个在某家医院扫描仪上训练、却部署到另一家的医疗模型。输入与正确答案之间的关系也可能变了——经济衰退后消费者行为改变,于是去年那些预测因子不再是当初的含义。有些偏移来得突然(一场大流行病),有些则在数月之间缓慢蠕行(即「漂移」)。它们无一例外地侵蚀着准确率,却从不弹出半句报错。
分布偏移之所以重要,是因为它是「实验室里管用、生产中却失灵」最常见的单一原因——远比那些奇异的对抗攻击常见得多。训练数据永远只是某个特定时间、地点与人群的一张快照,而世界偏偏不肯停下不动。正因如此,部署中的模型需要持续监控,而不是一次性的「开光加持」:要问的从来不只是「它准不准?」,而是「它当初为之训练的那个世界,还在不在?」
一个用2020年前数年销售数据训练出来的需求预测模型,在2020年初骤然失效:封控让卫生纸和摄像头被抢购一空,而旅行预订则凭空蒸发。模型的输入、以及输入背后的购买模式,一夜之间双双偏移;而它仍旧信心十足地预测着一个已不复存在的世界。
当世界猛地一晃,昨日的训练数据便悄然变成了错的。
危险之处在于它的「沉默」。处在分布偏移下的模型很少会说「这超出我的能力了」——它只是继续给出一个个自信、却恰好是错的答案。因此,要发现偏移,就必须主动盯着输入数据、以及模型的错误率随时间的变化,而不能干等着模型自己来喊冤。