神经网络拥有很强的预测能力,但它们往往无法知道自己的预测何时可能出错。与此密切相关的是out-of-distribution检测任务,在这个任务中,模型必须确定输入是否超出了它的能力范围。为了解决这些问题,文章提出了一种学习神经网络置信度估计的方法,该方法易于实现,并产生直观的可解释输出,且不需要使用out-of-distribution的样本来进行训练。
这篇文章直接在训练分类模型的同时训练一个信心估计(confidence estimate)的模型。给定每一个输入的样本,神经网络除了给出分类结果之外,同时还给出一个confidence,表示神经网络对这个结果的信心。文章期望遇到in distribution样本的时候,模型给出一个较高的confidence,而遇到out-of-distribution样本的时候,模型能给出一个比较低的confidence。
对于out-of-distribution检测任务来说,这虽然是一个二分类问题,但是它与常见的二分类问题不同,主要区别在与没有训练集。因为在实际应用场景中,in distribution和out-of-distribution的比例极为悬殊,直接使用标签去进行学习显然是不可取的。
Motivation
为了解决这个问题,作者开了这么一个脑洞:
假设我们需要回答一系列问题,而我们可以根据对问题的熟悉程度来选择获取一些额外的提示,每回答对一个问题就会得到一些分数,当然每获取一次提示就会扣一些分数。我们的目标是要得到尽量多的分数。
显然,对于上面这个脑洞来说,想获得高分的策略就是在熟悉的问题上尽量不需要提示,而在不熟悉的问题上去获取一些提示。而这篇文章的思路就是基于这个策略。
模型架构
image.png文章设计的模型架构如上图所示。在原来的神经网络上加了一个输出作为原来的输出(预测结果)的信心得分。整个网络可以形式化地描述为:
在训练过程中,模型的预测结果在经过“提示”之后,可以写成:
其中,这一项实际上就是代表“提示”。
那么分类的损失函数就应该写为:
显然,如果直接用这个损失函数进行训练,神经网络会倾向于将信心得分训练为0,这样得到的预测结果实际就是ground truth。
但是不要忘了在motivation中提到的,每给一点提示就会扣一些分数。文章就增加了一个损失函数来做为的惩罚:
整个神经网络的损失函数就变成了:
其中,是一个超参数。
实现细节
budget parameter
作者在实现的过程中首先遇到的问题是神经网络倾向于把任意输入的信息得分统一成一个值,也就是说,无论是什么输入,神经网络都认为信心得分是一样的,这显然违背了设计的初衷。
为了解决这个问题,文章引入了一个budget参数:当的时候(即信心得分比较小),增加,而当的时候(即信心得分比较大),就减少。这个操作很好理解,如果神经网络的信心不足(较大),则增大信心的loss所占比例,以增强信心;
如果信心比较强(较小),则减小信心的loss所占比例,优先提高准确率。
打击过度正则化
作者在实验过程中发现这种学习信心的机制导致了强烈的正则化,让神经网络能够忽略一些数据集的噪音。但是这也带来了一些负面影响:神经网络在处理边界数据的时候会比较“懒”,影响了训练得到模型的性能。
个人观点:实际上导致这个现象的原因应该是神经网络在遇到这些边界样本的时候,信心的loss 会很大,由于计算信心的网络和分类的网络前面部分是相同的,因此在更新参数的过程中,神经网络会优先增强信心,而不是去探索分类器的边界。
为了解决这个矛盾,作者在训练的时候,有一半的数据采用新提出的损失函数,即,而另一半则采用原来的损失函数。
保留错误分类的样本
这部分没看懂
总结
之前有一些技术直接使用分类器在所有类别中的最高得分,即作为信心得分,这篇文章采用另外一种方式,直接训练一个模型来估算信心得分。文章只是通过实验验证了两种方法的优劣,但遗憾的是并未深入分析导致这种结果的原因
网友评论