前言:博主最近在复现代码的时候遇到一个问题,有的代码使用softmax有的使用sigmod,两者使用到底有什么区别呢?
一、softmax函数
1.1公式
(一般只用于最后一层进行分类)深度学习中使用Softmax进行分类。
1.2举例
如果我们的结果有3类,那么最后的神经元输出就是3,也就是输出有3个数,但是直接输出这3个数有时候并不是特别好。通过softmax这个函数,上面的3个数就转换为了概率,输出还是3个数,它们加起来就等于1。如下图所示
1.3总结
softmax要综合考虑n个类,属于每个类的概率,这n类相互影响,加起来是等于1的.
二、sigmod函数
2.1sigmod公式
2.2解释
可以看到Sigmoid 函数的范围是在0~1之间,所以任何一个值经过了Sigmoid 函数的作用,都会变成0~1之间的一个值,这个值可以形像象地理解为一个概率,比如对于二分类问题,这个值越小就表示属于第一类,这个值越大就表示属于第二类。
2.3 总结:
Sigmoid 不会综合考虑n个类,属于每个类的概率,这n类相互独立,只是把各自的值映射到0-1.
三、使用总结:
3.1 sigmoid和softmax的区别就是互斥与否
同样输出10类,输出通道是10,
(1)用sigmoid,表示这10类互不相关,得到的10个概率值中的每个值代表:
输入这类的概率和不属于这类的概率,0-1之间的值。
比如第4个值,代表输入第4类的值概率和不属于第4类的概率,和其它9个值没关系。
经过sigmoid输出的10个值互不影响,只关注某一类的可能性概率是多大,每一类都是二分类,所以加起来也不等于1,可以是第一类得到的值0.9,第二个也是0.9。
(2)用softmax,它要综合考虑10个类,属于每个类的概率,这10个类相互影响,加起来是等于1的。
进一步理解:
(1)可以从网络角度来理解,输出维度是2和输出维度是3,4,5等都叫多分类,输出维度是1才叫2分类,一般输出维度为1的时候才会用sigmod。
(2)sigmoid用到10分类中,相当于10个分类器,10个人来判断自己负责的类,都是相互独立的,每个人只负责判断自己对应位置的类别是不是,都比较自私,没有宏观能力。输出为10,用了10个sigmoid函数,1个sigmoid对应1个输入,一个输出,10个sigmoid分类器各自独立计算,得到10个输出。
softmax用到10分类中,相当于1个分类器,1个人来判断属于10个类别的概率,这样就有了宏观思维,能考虑全局,所以多分类中用softmax比较好。输出为10个,输入为10个,1个softmax分类器综合计算。
(3)多分类任务中sigmiod可以用,只不过它不能考虑多个类别的综合情况,所以效果一半较差。
(4)多分类也可以使用sigmod,当几个分类之间没有关联,相互独立的时候。
3.2注意事项:
两者使用的损失函数可能不太一样,注意区别
参考:
Sigmoid 函数和 Softmax 函数的区别和关系 | nex3z's blog
(360条消息) 深度学习原理23——激活函数_晓码bigdata的博客-CSDN博客_激活函数原理
(360条消息) 深度学习原理42——一文彻底理解sigmoid和softmax的区别和输出通道维度的关系_晓码bigdata的博客-CSDN博客_通道维度