softmax与sigmoid这两者之间区别其实还不小,还是先看两者结构上的区别:
可以看出最大的区别在于softmax的计算的是一个比重,而sigmoid只是对每一个输出值进行非线性化。
二者在结果上很相似,对于
n
l
n^l
nl个神经元,无论是进行softmax还是sigmoid,输出都是
n
l
n^l
nl个取值在
(
0
,
1
)
(0,1)
(0,1)的数(softmax 可能取
[
0
,
1
]
[0,1]
[0,1]),区别就在于softmax是一个针对输出结果归一化的过程,所以很多文献里也称作softmax层;而sigmoid只是一个非线性激活过程,所以一般称为激活函数。
二者公式上也并不是直接归一化的关系:
sigmoid:
1
1
+
e
z
\frac{1}{1+e^z}
1+ez1
softmax:
e
z
k
∑
i
=
1
n
l
e
z
i
\frac{e^{z_k}}{\sum_{i=1}^{n^l} e^{z_i}}
∑i=1nleziezk
但是当输出层为一个神经元时,此时会使用sigmoid代替softmax,因为此时还按照softmax公式的话计算值为1。
softmax一般用于多分类的结果,一般和one-hot的真实标签值配合使用,大多数用于网络的最后一层;而sigmoid是原本一种隐层之间的激活函数,但是因为效果比其他激活函数差,目前一般也只会出现在二分类的输出层中,与0 1真实标签配合使用。