Press "Enter" to skip to content

Calibration: 一个工业价值极大,学术界却鲜有研究的问题!

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

文 | kid丶(知乎作者)

 

编 | 夕小瑶

 

尽管深度学习给工业界带来了一波上线春天,但是总有很多比较难的业务,模型反复迭代后准确率依然达不到预期的产品标准,难以满足用户期望。

 

以下为工业界常见讨(si)论(b)场景:

 

R&D小哥哥一顿调参输出,RoBERTa都用上了,终于将模型从80%准确率提升到了90%,但是PM小姐姐说,“不行!咱们必须要达到95%准确率才能上线!否则就是对用户和产品逼格的伤害!”

 

怎幺办呢?

 

熟悉工业界上线套路的小伙伴马上就能给出答案,那就是 提高模型决策的阈值! PM小姐姐只是根据产品标准定义了模型准确率(或者说精确率,precision),但是并不在乎召回率有多高(毕竟模型只要没上线,就相当于召回率为0)。

 

那幺基于上面的思路:假如模型的softmax输出可靠,比如二分类场景,模型softmax之后1类的输出是0.92,能表征模型有92%的把握说这是个正例,并且模型的这个把握是精准的,那幺PM小姐姐说要达到95%,那我们就疯狂提高模型的决策阈值就好了,这样把那些不确定性高的样本砍掉了,模型准确率自然就上来了。

 

然而,神经网络并不一定这幺靠谱,你看模型的测试集输出的话,却常常发现模型要幺以99.999的概率输出来判定正例,要幺0.0001的概率输出来判定负例,基本没有样本落在0.1~0.9区间内。那幺这时候上面的思路就失效了。

 

那幺有没有办法 让模型的softmax输出能真实的反映决策的置信度呢? 这个问题,就被称为Calibration问题(直译是叫“”)。

 

故事要从一篇发表于2017年的ICML顶会论文开始,目前这篇论文引用量1001。

 

论文标题:

 

On Calibration of Modern Neural Networks

 

链接:

 

https://arxiv.org/pdf/1706.04599.pdf

 

Arxiv访问慢的小伙伴可以在【 夕小瑶的卖萌屋 】后台回复关键词【 0106 】下载论文pdf~

 

神经网络的 overconfidence

首先,让咱们来思考一个普通图像分类任务。对于一张“koala”的图像,在经过神经网络后会得到 logits 输出,经过 softmax 层后得到对各类别的预测的后验概率,接着我们选择概率最大的类别( koala)输出为最后的预测类别。这里,最终的预测类别,其对应的置信度为。在大多情况下,我们只关心类别的预测有多准,根本不 care 置信度是怎样的。然而,在一些实际应用场景下,置信度的度量也同样重要。例如:

如上图,对于自动驾驶中的目标识别任务,车辆的前方出现了一个人,神经网络会将其识别成塑料袋,此时输出的置信度为50%(低于阈值),则可通过其它传感器进行二次的正确识别(识别为人)。但想想看,若神经网络对塑料袋预测的置信度为90%会怎样?再例如:

使用 Resnet 模型简单的对一些图片任务进行训练,收敛后的模型对测试集的平均置信度高达80%-85%,然而只有将近70%的图片能被正确分对(红色代表分错,绿色代表分对)。这意味着啥?训练好的模型好像有点盲目自信,即出现 overconfidence 现象,或者可以称为模型的准确率和置信度不匹配( miscalibration )。

 

预期校准误差(ECE)

 

直观的来看,模型的准确率应当和置信度相匹配。一个完美校准的模型可定义成如下所示:

 

即,模型置信度等于概率的条件下模型的预测为真实标记的概率同样也为。因此,本文提出一个新的度量方式叫做 预期校准误差(Expected Calibrated Error, ECE) 来描述模型学习的匹配程度:

 

很简单,其实就是将前面那个完美校准模型的等式写成差的期望的形式。我们将期望进一步展开可得到:

 

其中:

 

这里的代表着一个个根据置信度区间划分的一个个桶(用来装样本的),如下图所示:

例如,我们将置信区间平均划分成5份,然后将样本按照其置信度挨个送到对应的桶中,分别计算每个桶中的平均置信度和准确率,两者的差值(Gap)的期望就是所定义的 ECE。

 

读到这的读者应该能逐步体会本文想干一件啥事了。本文首先引出这样一个问题,深度模型在学习过程中出现准确率和置信度的严重不匹配问题,接着提出了一个合理的评价指标来描述模型学习的匹配程度,所以接下来,它要提出方法来想办法 最小化期望校准误差(ECE)。

 

什幺原因导致神经网络出现准确率与置信度不匹配?

 

然而 ECE 是没办法直接最小化的,因此本文尝试着做一些探索性的实验来观察啥因素会使得模型的 ECE 变大。本文分别从三个方面上去进行实验:

▲网络复杂度对ECE的影响

网络复杂度对 ECE 的影响:首先,作者使用两个模型(LeNet和ResNet)分别对CIFAR-100数据集进行了训练,准确率分别为55.1%和69.4%,ResNet 在预测性能上完爆LeNet。然而,ResNet 置信度(右图蓝色+红色部分)的分布和准确率(右图蓝色部分)出现了严重的不匹配,导致二者的 Gap (红色部分)非常大。 注意完美校准模型的分布应当是蓝色部分刚好和对角线重合,且没有红色 Gap 部分。

▲网络的宽度和深度对ECE的影响

网络宽度和深度对 ECE 的影响:在得知模型复杂度会影响模型的 ECE 后,作者紧接着做了网络宽度和深度对模型 ECE 和错误率(Error)的影响。可以看到,在控制变量前提下,单方面的增加网络的深度和宽度均会使得模型的 Error 降低,这是我们所期望的;然而,ECE也会同样的随着上升。 换句话来说,一昧的增加模型复杂度能有效的提高模型的预测性能,但同样带来的问题是模型的 overconfidence 问题愈发严重。

▲归一化和权重衰减对ECE的影响

normalization 和 weight decay 对 ECE 的影响:接着的实验也是我们为提高模型性能经常使用的 batch normalization 和 loss regularization。 左图: 使用 batch normalization 会有效的提升模型的性能,但同时也会提升模型的 ECE。 右图: weight decay 通常用来调节 L2 正则的权重衰减系数,随着其系数的增加相当于更多的强调模型参数 w 要尽可能的小,能有效的防止模型过拟合。 该现象表明,模型越不过拟合,其ECE是越小的,也就是说模型越不会 overconfidence ;换句话说,模型对样本的拟合程度和对样本的置信度是息息相关的,拟合得越好,置信度越高,所以 ECE 越大。(个人理解,欢迎评论区指正~)

 

我们该如何对模型进行校准呢?

作者接下来又做了一个很有意思的实验,在CIFAR-100上训练模型500个 epoch,其中在第250个 epoch 和第375个 epoch 下调节学习率,观察测试集上的 test error 和 test NLL 的变化情况。Test NLL 的定义如图中所示,它其实等价于测试集上的交叉熵。这个实验啥意思呢?我调节了一下学习率后,测试性能得到了提升,但是测试集上的交叉熵却出现了过拟合现象(出现了反常的上升现象)。 有意思的点来了! 有人肯定会 argue 不是说好本文研究的是overconfidence嘛?即模型的置信度太高而准确率过低,这里对 NLL overfitting 岂不是好事,因为负对数似然上升了等价于模型的置信度的降低了。 注意:这里的 是对正确类上的置信度,而前面的实验是对预测类的置信度 !其实认真想想,是一个意思,前面之所以 confident 很高的样本准确率很低,正是因为其在正确类别上的置信度太低导致的!!(这部分卡了很久)

 

该结果可以表明,模型置信度和准确率的不匹配很大可能的原因来自于模型对 NLL 的过拟合导致的。所以,咋办呢?最小化 NLL 呗。

此时,本文提出在验证集上对带 temperature 参数的 softmax 函数进行校准。即我们训练完模型后,最小化 NLL 来学习 temperature 参数,注意到对该项的优化并不会影响模型预测的准确率,只会对模型的 confidence 进行校准。最终的结果是这样的,详细可参考论文。

讨论

 

上述得实验结果我觉得对很多研究领域都是很有启发意义的。

 

 

模型的置信度应当是和准确率匹配的,这样的模型我觉得才是有意义的,否则以很高置信度进行很离谱的预测错误的模型会让人感觉这个模型好像什幺都会、又好像什幺都不会。

 

ECE 的指标是否能反应样本的一些性质,例如难易程度、是否为噪声等。

 

该文章是间接的去优化ECE的,能否有直接优化的形式,或者主动学习里面能否考虑这一点来挑选样本?

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注