文章来源 | 恒源云社区(专注人工智能/深度学习GPU免费加速平台,官方体验网址:https://gpushare.com)
原文作者 | Mathor
本文将介绍一种用于分类问题的后处理技巧(Trick),出自EMNLP 2021 Findings的一篇论文《When in Doubt: Improving Classification Performance with Alternating Normalization》。经过实测,CAN(Classification with Alternating Normalization)确实多数情况下能提升多分类问题的效果(CV、NLP通用),而且几乎没有增加预测成本,因为它仅仅只是对预测结果的重新归一化操作
CAN的思想
有趣的是,其实CAN的思想非常朴素,朴素到我们每个人几乎都用过。具体来说,假设考试中有10道选择题,前9道你都比较有信心,第10题完全不会只能瞎蒙,但是你发现前面9题选A、B、C、D的比例是3:3:2:2,那么第10题在蒙的时候,你会不会更倾向于C和D?如果是更极端的情况,你发现前面9题选A、B、C的都有,但就是没有选D的,那你蒙第10题的时候,会不会更倾向于D?
回到分类任务上,假设现在有一个二分类问题,模型对于输入aaa给出的预测结果是 p ( a ) = [ 0.05 , 0.95 ] p^{(a)}=[0.05,0.95] p(a)=[0.05,0.95],那么我们就可以给出预测类别为1;接下来,对于输入bbb,模型给出的预测结果是 p ( b ) = [ 0.5 , 0.5 ] p^{(b)}=[0.5,0.5] p(b)=[0.5,0.5],这种结果是最不确定的,我们也不知道应该输出哪个类别
但是,假如我告诉你:
- 类别必然是0或1其中之一
- 两个类别出现的概率各为0.5
在已知这两点「先验」信息的情况下,由于前一个样本的预测结果为1,那么基于朴素的均匀思想,我们是否会更倾向于将后一个样本预测为0,以得到一个满足第二点「先验」的预测结果?
这些简单的例子背后,有着跟CAN同样的思想,其实就是用**「先验分布」来校正「低置信度」的预测结果,使得新的预测结果的分布更接近先验分布**
TOP-K熵
准确地说,CAN是针对低置信度预测结果的后处理手段,所以我们首先要有一个衡量预测结果不确定性的指标。常见的度量是「熵」,对于 p = [ p 1 , p 2 , … , p m ] p=[p_1,p_2,…,p_m] p=[p1,p2,…,pm] ,定义为
虽然熵是一个常见的选择,但其实它得出的结果并不总是符合我们的直观理解。例如对于 p ( a ) = [ 0.5 , 0.25 , 0.25 ] 和 p ( b ) = [ 0.5 , 0.5 , 0 ] p^{(a)}=[0.5, 0.25,0.25]和p^{(b)}=[0.5,0.5,0] p(a)=[0.5,0.25,0.25]和p(b)=[0.5,0.5,0],直接套用公式得到 H ( p ( b ) ) H ( p ( b ) ) H(p^{(b)})H(p ^{(b)} ) H(p(b))H(p(b)),但如果让人主观去评价这两个概率分布,显然我们会认为 p ( b ) 比 p ( a ) p^{(b)}比p^{(a)} p(b)比p(a)