在一个二分类中,无论预测结果正确与否,一般都会输出一个比较大的概率,对于模型来说不确定的东西不应该是概率在0.5附近吗?


因为训练的时候你没有跟网路说什么样的东西应该不确定。

你只给了确定的label,要么是[0,1]要么是[1,0],那网路就只会出接近这两个值的输出。

-----------------分界线------------------

当然这背后是有数学原理的,二分类的softmax其实等价于sigmoid,如果一直给one-hot的标签,在训练集几乎都能分正确的前提下,网路趋向于将feature的norm无限拉长,sigmoid越来越接近0-1的阶跃函数,几乎所有样本的输出就都在接近0和接近1的位置,中间态几乎没有。

注意这里引入了一个假设,即「训练集几乎都能分正确」。如果你的训练集拟合得不好,你会发现输出0.3、0.5之类的样本的机会会大大增加。

-----------------分界线------------------

怎么告诉网路不确定性呢?

有两种方式:一种是soft label,即你直接就给部分样本[0.5, 0.5]的label;一种是noise label,就是你觉得不确定的东西,一会给0的label,一会给1的label。

这两种方式都可以起作用,当然第一种效果更好一些,网路有比较明确的目标,第二种方式在batch training下其实也是有效的,只是看起来比较奇怪。


输出的是confidence而不是实际的概率,比如你把所有输出为0.8的样本放在一起来看,可能为真的概率多半不是0.8。这个confidence和实际概率的吻合程度,就叫做calibration。calibrated的模型未必就是准确率高的,但对于医疗之类的问题,我们希望confidence要能反应实际的概率。

如果你是做deep learning的,可以看看这篇On Calibration of Modern Neural Networks。这篇文章里经验性地发现resnet之类的结构其实是不calibrated的


会啊,前面relu的话输出是【0,0】,那softmax就会是两个0.5


这跟softmax 没啥关系吧,softmax 只不过做了概率归一化,影响预测概率分布的是模型,以及测试集。


softmax所使用的exp形式具有类似「马太效应」的作用,对于给定的一组C维向量,经过softmax概率化后,小的值会变得相对更小,大的值会变得相对更大。

若是想让网路输出能够表示不确定性样本的某种指标,可以在传统分类网路中引入不确定性估计。


概率要想是0.5, 前面的回归结果必须是0。这就像是扎飞镖一样,扎到正中圆心,当然难了。


其实我觉得这个问题的关键在于「对于模型来说不确定的东西」。如果这个标准成立,那可能概率确实应该是0.5左右。但是这个「不确定」是你认为的「不确定」,而不是模型认为的。

可能由于训练样本的不均衡,让他觉得抛硬币「正面」的概率要远高于「反面」。而你由于你的先验知识,认为抛硬币就是五五开的概率。

除了样本的不均衡,也有可能有很多其他情况,我觉得最重要还是具体问题具体分析,不要想当然。


第一次回答问题.... 我猜是因为训练时候用的是Maximize Likelihood,所以网路predict的概率是不靠谱的 普遍趋向于overconfident,即使是错的预测 也不会出现类似uniform的,因为entropy太高了


神将网路中分类器最后一层(softmax之前一层)输出的数量级往往都大于1,而softmax中各个类预测的概率之比都是隐层输出之差的指数次,例如不是很确定是哪个类,一个类的输出12,一个类的输出10,但预测的概率只比就是e^(12-10),差不多是0.9与0.1,你就算输入白杂讯,它都能信誓旦旦地给你分个类出来。

神经网路根本就不是在学什么概率,只是大家缺少理论支持,只好硬是套了个概率的皮上去罢了。统计中对模型合理性的假设检验一概没有,数据服从什么分布从来没有深入研究过,只是声称神经网路表示了其概率分布罢了,实际上根本就说不通,自欺欺人罢了。

如果想要用概率与统计解释深度学习,还需要更多更细致更深入的研究。现阶段深度学习、神经网路论文里提到的概率、贝叶斯推断等概念其实只是看著漂亮的公式罢了,完全不能切合实际。


  1. sigmoid和softmax都会有饱和(saturate)的问题,所以在不加或正则项很小的情况下容易过拟合,使得输出偏向于0或1(没验证过:即使训练集中同样的X的label=0和1各出现了100,101次,只要训练得足够久,预测P(label=1)还是会接近1)
  2. 即使没有过拟合,不确定的东西也不是只有50-50这一种可能(伯努利分布了解一下),根据不同的输入,考虑到模型本身应该是个连续的函数,假设二分类,所以输出可能是在(0,1)之间的任意值


推荐阅读:
相关文章