Sigmoid和Softmax的区别与联系
-
Sigmoid函数
S i g m o i d Sigmoid Sigmoid函数也叫 L o g i s t i c Logistic Logistic函数,将输入值压缩到 ( 0 , 1 ) (0,1) (0,1)区间之中,其函数表达式为: S i g m o i d ( x ) = 1 1 + e − x Sigmoid(x) =\frac{1}{1+e^{-x}} Sigmoid(x)=1+e−x1 函数图像如图所示:
其求导之后的表达式为: Sigmoid ′ ( x ) = Sigmoid ( x ) ⋅ ( 1 − Sigmoid ( x ) ) \operatorname{Sigmoid}^{\prime}(x)=\operatorname{Sigmoid}(x) \cdot(1-\operatorname{Sigmoid}(x)) Sigmoid′(x)=Sigmoid(x)⋅(1−Sigmoid(x)) 其梯度的导数图像如:
对于 S i g m o i d Sigmoid Sigmoid函数,其 优点为:- 输出范围限制:函数将其输入映射到有限的范围[0, 1]之间,这有助于防止模型的输出变得过大或过小,从而提高模型的稳定性;
- 适用于二元分类:函数在二元分类问题中非常有用,可以将输入的线性组合映射到0到1之间的概率,用于表示正类别和负类别的概率。
- 平滑性:函数是光滑连续且可导的,因此在训练过程中具有连续的梯度。
其``缺点为:
- 梯度消失问题:Sigmoid函数的梯度在接近0和1的极端位置非常小,容易导致梯度消失问题。
- 非零中心输出:Sigmoid函数的输出值很明显均大于0,输出均值不等于0,导致后一层的神经元将得到上一层非 0 0 0均值的信号作为输入,从而会对梯度产生影响。
- 计算复杂度高:Sigmoid函数的计算涉及指数运算,尤其是在大规模深度网络中,它会增加计算成本。
-
Softmax函数
S o f t m a x Softmax Softmax函数又称归一化指数函数,函数表达式为: y i = Softmax ( x i ) = e x i ∑ j = 1 n e x j y_{i}=\operatorname{Softmax}(x_{i})=\frac{e^{x_{i}}}{\sum_{j=1}^{n} e^{x_{j}}} yi=Softmax(xi)=∑j=1nexjexi 其中, i ∈ [ 1 , n ] i \in [1, n] i∈[1,n], ∑ i y i = 1 \sum_{i} y_{i}=1 ∑iyi=1。
S o f t m a x Softmax Softmax函数可以将上一层的原始数据进行归一化,转化为一个 ( 0 , 1 ) (0,1) (0,1)之间的数值,这些数值可以被当做概率分布,用来作为多分类的目标预测值。 S o f t m a x Softmax Softmax函数一般作为神经网络的最后一层,接受来自上一层网络的输入值,然后将其转化为概率。对于 S o f t m a x Softmax Softmax函数而言,我们可以从不同的角度来理解它:
- A r g m a x Argmax Argmax是一个暴力的找最大值的过程,最后的输出是以一个 O n e − h o t One-hot One−hot形式,将最大值的位置设置为 1 1 1,其余为 0 0 0。这样的话,则在网络训练中,是不可导的,我们采用 S o f t m a x Softmax Softmax看作是 A r g m a x Argmax Argmax的平滑近似,从而可以使得网络可导。
- S o f t m a x Softmax Softmax将输入向量归一化映射到一个类别概率分布,即 n n n个类别上的概率分布,因此我们常将 S o f t m a x Softmax Softmax放到 M L P MLP MLP 的最后一层。
- 从概率图角度, S o f t m a x Softmax Softmax可以理解为一个概率无向图上的联合概率。
-
联系
- S i g m o i d Sigmoid Sigmoid函数和 S o f t m a x Softmax Softmax函数都用于将模型的输出映射到概率分布,使得输出值在0到1之间,并且用于表示不同类别的概率;
- 对于二分类任务而言,二者都可以达到目标,理论上没有什么区别。例如在二分类 ( x 1 , x 2 ) (x_1, x_2) (x1,x2)任务中, 经过 S i g m o i d Sigmoid Sigmoid函数之后: Sigmoid ( x 1 ) = 1 1 + e − x 1 \operatorname{Sigmoid}\left(x_{1}\right)=\frac{1}{1+e^{-x_{1}}} Sigmoid(x1)=1+e−x11 对于 S o f t m a x Softmax Softmax函数,则为: Softmax ( x 1 ) = e x 1 e x 1 + e x 2 = 1 1 + e − ( x 1 − x 2 ) \operatorname{Softmax}\left(x_{1}\right)=\frac{e^{x_{1}}}{e^{x_{1}}+e^{x_{2}}}=\frac{1}{1+e^{-\left(x_{1}-x_{2}\right)}} Softmax(x1)=ex1+ex2ex1=1+e−(x1−x2)1 对于 x 1 − x 2 x_{1} - x_{2} x1−x2,我们可以使用一个 z 1 z_{1} z1来进行替换,则替换成了: Softmax ( x 1 ) = 1 1 + e − z 1 \operatorname{Softmax}\left(x_{1}\right)=\frac{1}{1+e^{-z_{1}}} Softmax(x1)=1+e−z11
-
区别
- S i g m o i d Sigmoid Sigmoid函数用于多标签分类问题,选取多个标签作为正确答案; S o f t m a x Softmax Softmax函数用于多分类问题,即从多个分类中选取一个正确答案。
- S i g m o i d Sigmoid Sigmoid函数的输出范围是[0, 1],可以视为一个概率; S o f t m a x Softmax Softmax函数的输出是一个多元分布,所有类别的概率之和等于1。
- 在二分类任务中:
- S i g m o i d Sigmoid Sigmoid函数针对两点分布提出。神经网络的输出经过它的转换,可以将数值压缩到 ( 0 , 1 ) (0,1) (0,1)之间,得到的结果可以理解成分类成目标类别的概率 P P P,而不分类到该类别的概率是 ( 1 − P ) (1 - P) (1−P),这也是典型的两点分布的形式。
- S o f t m a x Softmax Softmax函数本身针对多项分布提出,当类别数是2时,它退化为二项分布。而它和Sigmoid函数真正的区别就在——二项分布包含两个分类类别(姑且分别称为 A A A和 B B B),而两点分布其实是针对一个类别的概率分布,其对应的那个类别的分布直接由 1 − P 1-P 1−P得出。
- S i g m o i d Sigmoid Sigmoid函数可以认为是对一个类别的“建模”,将该类别建模完成,另一个相对的类别就直接通过1减去得到。而 s o f t m a x softmax softmax函数,是对两个类别建模,同样的,得到两个类别的概率之和是1。
-
总结
- 如果模型输出为非互斥类别,且可以同时选择多个类别,则采用 S i g m o i d Sigmoid Sigmoid函数计算该网络的原始输出值。
- 如果模型输出为互斥类别,且只能选择一个类别,则采用 S o f t m a x Softmax Softmax函数计算该网络的原始输出值。
- S i g m o i d Sigmoid Sigmoid函数可以用来解决多标签问题, S o f t m a x Softmax Softmax函数用来解决单标签问题。
- 对于某个分类场景,当Softmax函数能用时,Sigmoid函数一定可以用。