置信度与不确定性(confidence and uncertainty)
/ KON-fuh-dunss and un-SER-tun-tee /
置信度,是模型对一个答案有多笃定;不确定性则是它的反面——是它对「自己不知道什么」的诚实承认。一位明智的专家,在熟悉的领域里会说「我确定」,而在自己知识的边缘则会说「我没把握,让我查一下」。我们希望模型也这样:给每一个预测都系上一个有意义的「疑虑」度量,好让下游的人或系统知道:什么时候该靠上去,什么时候该退一步。
把不确定性分成两类会很有帮助。一类源自世界中真实存在的随机或噪声,再多数据也消不掉——一张模糊的照片,本身就是含混的(这叫「偶然不确定性」)。另一类则源自模型自身的无知:它没见过足够多像这一个的例子,多给些数据会有帮助(这叫「认知不确定性」)。这一区分很实用:前者你只能与之共处,后者你可以靠收集更多、或不同的数据来减小。估计不确定性的方法包括:训练一群模型组成的「集成」,看它们在哪里意见相左;或采用贝叶斯方法,把模型参数本身也当作不确定的。
这之所以要紧,是因为在高风险场景里,一个不带「自身可靠性意识」的数字是危险的。一个知道自己何时心里没底的医疗或自动驾驶系统,能转交人类、要求再做一项检查、或放慢速度——这是一个模型所能拥有的、最有用的单一安全行为。诚实的告诫是:模型原始的置信度(它吐出来的那个softmax概率)并不等于「有根有据的不确定性」。深度网络经常自信地犯错,在那些与训练数据不像的输入上尤其如此;所以,好的不确定性估计是一个活跃的、尚未解决的问题,而不是一个你读一眼就有的、免费的输出。
把同一个模型用同样的数据、以不同的随机初始化训练五份(这叫「集成」)。对一张寻常的照片,五个都一致说「猫」——不确定性低。对一张古怪、模糊的图,两个说「猫」、两个说「狗」、一个说「狐狸」——这种意见高度分歧,标示着高不确定性,是一个信号:该把这个个案标记出来交人类复核,而不是硬认一个猜测。
「集成」内部的意见分歧,是「模型力有不逮」的一个实用信号。
最危险的失败模式,是「自信地犯错」。一个不知道时就说「我不知道」的模型,远比一个永远很笃定的模型来得安全。可那个省事的默认做法——把softmax输出当成概率来读——给的是信心,而非真正的不确定性。对原始置信度要存疑;真正的不确定性估计,需要刻意的方法与验证。