二分类问题中,sigmoid与softmax的区别

本文摘自知乎答主’初识CV’的回答,连接:二分类问题,应该选择sigmoid还是softmax? – 知乎

对于二分类问题, 理论上,两者没有任何区别

由于现在Pytorch,TensorFlow等框架计算矩阵方式问题,两者在反向传播的过程中还是有区别的。实验表明,对于不同的模型,可能sigmoid效果好,也可能softmax效果好。

二分类问题中,sigmoid与softmax的区别

二分类问题中,sigmoid与softmax的区别

由公式可见,两个公式可以完全统一,所以理论上来说两者没有区别。

然后分析两者之间的差异(以Pytorch为例)

使用Sigmoid函数时,最后一层全连接层的神经元个数为1,而用softmax函数的时候,最后一层全连接层的神经元个数为2.因为Sigmoid函数只有是目标和不是目标之分,实际上只存在一类目标类,另一个是背景类。而softmax函数将目标分类为两类,所以有两个神经元。这也是导致两者存在差异的主要原因。

Sigmoid函数针对两点分布提出。神经网络的输出经过它的转换,可以将数值压缩到(0,1)之间,得到的结果可以理解成 分类成目标类别的概率P,而不分到该类别的概率为(1-p),这是典型的亮点分布的形式。

softmax函数本身针对多项分布提出,,当类别数是2时,它退化为二项分布。而它和sigmoid函数真正区别就在—分布包含两个分类类别,而亮点分布其实是针对一个类别的概率分布,其对应的那个类别的分布直接由1-p得出。

简单点理解就是, Sigmoid函数,我们可以当作成它是对一个类别的”建模”,将该类别建模完成,另一个相对的类别就直接通过1减去得到。 而softmax函数,是对两个类别建模,同样的,得到两个类别的概率之和是1。

神经网络在做二分类时,使用Softmax还是Sigmoid,做法其实有明显差别。由于Softmax是对两个类别(正反两类,通常定义为0/1的label)建模,所以对于NLP模型而言(比如泛BERT模型),Bert输出层需要通过一个nn.Linear()全连接层压缩至2维,然后接Softmax(Pytorch的做法,就是直接接上torch.nn.CrossEntropyLoss);而Sigmoid只对一个类别建模(通常就是正确的那个类别),所以Bert输出层需要通过一个nn.Linear() 全连接层压缩至1维,然后接Sigmoid(torch就是接torch.nn.BCEWithLogitsLoss)。

作者:初识CV
链接:https://www.zhihu.com/question/295247085/answer/1778398778
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Original: https://blog.csdn.net/dingyplucky/article/details/126739820
Author: 是luckyBaby呢
Title: 二分类问题中,sigmoid与softmax的区别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/667092/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球