这是一篇关于置信度的文章。https://arxiv.org/abs/1910.04851
作者对模型置信度提出了一个新的目标指标。即TCP(true class probability),比起传统的MCP(maximum class probability)更加的合适。MCP即分类器输出最大后验概率作为最终的类别输出。因为在测试时候,真是的类别是未知的,所以我们提出在训练时后学习TCP指标,引入了一个特别的学习框架。
1:引言
本文主要解决深度神经网络错误误测的问题,模型通过加入置信度的方法,可以决定是否坚持最终的预测。
在分类问题上,广泛使用的标准就是MCP,通过softmax层输出。但是他仍然有概念上的缺点。sofmax已知是非校准的,对对抗攻击比较敏感,也不足以监测那些out-of-distribution的例子。
回答1:因为softmax的类别输出的置信度过高,因为神经网络对他们的预测过于自信。所以softmax输出的概率不等于模型的置信度。
回答2:
在本文要解决的第二个问题,对置信度结果进行排位,对于错误的预测,MCP的排位是不准确的。因为其对于正确的和错误的划分会重叠。模型对于正确的和错误的划分置信度都比较高。
如下图的a,而b,错误的置信度转移到左边,比较低。
2:错误的预测通过学习模型置信度
对于数据集D,里面有N个样本,
输入x,网络对每一个类别分配一个概率,w是模型参数,模型的输出类别可以计算为:
即第k个类别输出的概率最大值, 即为模型的预测类别。
在训练过程中,我们通过减小预测分布和真实分布之间KL散度,在分类任务中通过更新参数,来最小化交叉熵损失。
3:置信度指标用于错误的预测
模型的置信度越高,模型对于他的预测就越确定。因此一个合适的置信度标准应该是错误的分类赋予一个低的置信度,正确的分类赋予一个高的置信度。
注:x:输入
y*真实类别
yhat预测类别
对于输入x,MCP:模型误分类的话,真实类别就会赋予一个很低的值。反映给模型让他知道自己误分类了。
因此我们提出TCP:
理论保证:
当Y=真实类别的概率大于1/2,我们就推出预测的概率等于真实的概率。模型预测正确。
当Y=真实类别的概率小于1/K,我们就推出预测的概率不等于真实的概率。模型预测错误。
证明:k是标签的数量,x是一个sample,y*是对应的标签。模型正确分类的概率大于1/2。
其中(2)是1减去所有其他分类的结果,就是正确分类的结果。所以y=任何一个概率的值都小于正确概率的值。
公式(4)是错误分类的概率,如果正确的分类概率小于1/k,那么其余的其他种类的概率大于(k-1)/k。
看最后一句话:至少存在一个k,Y=k的概率大于Y=y*的概率(k不等于y*)会导致预测结果不等于真实结果。即模型分类错误。也就是说如果有一个类别大于真实类别的概率,那么就是误分类。
在[1/k,1/2]范围内,我们没有理论保证正确和错误的预测不会重叠。但是当我们使用深度神经网络,我们发现之间的重叠区域是非常小的。可能的原因是深度神经网络的输出预测过于自信。
我们也提出了归一化的TCP,正确的预测将会赋值为1。错误的会在[0,1]之间。
4:通过深度神经网络学习TCP
我们提出在训练时候学习TCP,我们引入置信度神经网络,取名confidNet,带有参数o,输出置信度预测c(x,o),在训练时候我们寻找o,类似于c*(x,y*)。
红色框框通过交叉熵损失学习参数w,他的分类层将会固定。
5:置信度网络设计
开始时候,模型提取复杂的特征输入到分类层,confidnet将提取的特征输送到一系列的dense layer最终由一个sigmoid激活函数,输出C_hat属于[0,1]。
损失函数:使用l2损失训练confidNet,最终我们使用了一个rank loss。
6:学习策略
训练confidnet开始时候固定整个m,冻结参数w,通过损失函数学习o,下一步fine-tune模型的encoder,因为模型m是固定的,我们解耦特征encoder用来分类,和置信度预测。我们在训练的最后一个阶段会舍弃dropout layer。并且减少学习率。