参考:https://baijiahao.baidu.com/s?id=1636737136973859154&wfr=spider&for=pc
在一个最近的一个项目中,发现自己对sigmoid函数和softmax函数的概念和用法比较模糊,特地做一下总结
假设一张图片丢进一个神经网络(例如resnet50),最后的输出为一个向量,如[-0.5, 1.2, -0.1, 2.4],分别对应四中不同的标签.
Sigmoid函数或Softmax函数可以将分类器的原始输出值映射为概率。那么什么时候用到sigmoid,什么时候用softmax呢?
1. Sigmoid函数或Softmax函数的输出
下图显示了将前馈神经网络的原始输出值(蓝色)通过Sigmoid函数映射为概率(红色)的过程:
然后采用Softmax函数重复上述过程:
如图所示,Sigmoid函数和Softmax函数得出不同结果。
原因在于,Sigmoid函数会分别处理各个原始输出值,因此其结果相互独立,概率总和不一定为1,如图0.37 + 0.77 + 0.48 + 0.91 = 2.53。
相反,Softmax函数的输出值相互关联,其概率的总和始终为1,如图0.04 + 0.21 + 0.05 + 0.70 = 1.00。因此,在Softmax函数中,为增大某一类别的概率,其他类别的概率必须相应减少
2.Sigmoid函数和Softmax函数
2.1 sigmoid函数:
Sigmoid函数如下所示(注意e):
在该公式中,σ表示Sigmoid函数,σ(zj)表示将Sigmoid函数应用于数字Zj。 “Zj”表示单个原始输出值,如-0.5。 j表示当前运算的输出值。如果有四个原始输出值,则j = 1,2,3或4。在前面的例子中,原始输出值为[-0.5,1.2,-0.1,2.4],则Z1 = -0.5,Z2 = 1.2,Z3 = -0.1,Z4 = 2.4。
所以,
Z2,Z3、Z4 的计算过程同上。
由于Sigmoid函数分别应用于每个原始输出值,因此可能出现的输出情况包括:所有类别概率都很低一种类别的概率很高但是其他类别的概率很低,多个或所有类别的概率都很高。
下图为Sigmoid函数曲线:
Sigmoid =多标签分类问题=多个正确答案=非独占输出(例如胸部X光检查、住院)
构建分类器,解决有多个正确答案的问题时,用Sigmoid函数分别处理各个原始输出值。
2.2 sofmax函数:
Softmax函数的分母综合了原始输出值的所有因素,这意味着,Softmax函数得到的不同概率之间相互关联。
Softmax函数表述如下:
除分母外,为综合所有因素,将原始输出值中的e ^ thing相加,Softmax函数与Sigmoid函数差别不大。换言之,用Softmax函数计算单个原始输出值(例如Z1)时,不能只计算Z1,分母中的Z1,Z2,Z3和Z4也应加以计算,如下所示:
区分手写数字时,用Softmax函数处理原始输出值,如要增加某一示例被分为“8”的概率,就要降低该示例被分到其他数字(0,1,2,3,4,5,6,7和/或9)的概率。
Softmax =多类别分类问题=只有一个正确答案=互斥输出(例如手写数字,鸢尾花)
构建分类器,解决只有唯一正确答案的问题时,用Softmax函数处理各个原始输出值。