动手学习深度学习——softmax函数与sigmoid函数区别

本篇文章属于总结性文章,看之前你需要对softmax与sigmoid都有一个大概的认识。全文没有代码纯理论,手写+公式的方式简单总结了两种激活函数在多方面的不同,看完对你有帮助的话可以点个收藏并小赞一下。

1. 解决的实际问题不同

在动手学深度学习——softmax回归之OneHot、softmax与交叉熵一文中,我们以softmax函数和交叉熵实现了一个“单层神经网络”——softmax回归分类器;同样的,我们也可以用sigmoid函数作为激活函数实现sigmoid回归分类器。二者分别用于解决多分类问题与多标签问题:

  • 多标签问题:一部电影即是剧情片又是爱情片,各类别之间不互斥——sigmoid;
  • 多分类问题:一个动物图谱只能是一类动物,各类别之间互斥——softmax;

2. 各类别间关系不同

当然我们这里不着重介绍两种分类器的实现和用途,主要介绍两种激活函数间的区别:

  • 在softmax中,我们计算得到的各类别概率之和为1,也就是说我们加大某一类别的概率必然导致其他类别减小——各类别之间相互关联,是互斥的。
  • 在sigmoid中,我们计算的各类别概率之和则不一定为1,各个输出值依次独立的经过激活函数的映射,某一个类别概率增大可能也伴随另一个类别概率增大——各类别之间相互独立,不互斥。

3. 正向传播对应的交叉熵损失函数不同

因此,两种激活函数在计算损失时,分别对应不同的交叉熵函数,推导如下:

动手学习深度学习——softmax函数与sigmoid函数区别_第1张图片

4. 反向传播中计算梯度的方式不同

不仅如此,由于两种激活函数计算输出值的方法不一样:

  • sigmoid函数是标量变元的实值标量函数 f ( x ) f(x) f(x)
  • softmax函数是向量变元的实值标量函数 f ( x ) \pmb f(\pmb x) fff(xxx)

所以二者在 多样本(矩阵) 的情况下反向传播计算:损失函数对激活函数输出的梯度: ∂ L ∂ y i ^ \frac{\partial L}{\partial \hat{y_i}} yi^L,以及激活函数对自身输入的梯度: ∂ y i ^ ∂ a i \frac{\partial \hat{y_i}}{\partial a_i} aiyi^ 也有不同,推导如下:

动手学习深度学习——softmax函数与sigmoid函数区别_第2张图片

5. 补充

  1. sigmoid的公式及求导:

动手学习深度学习——softmax函数与sigmoid函数区别_第3张图片

  1. softmax公式及求导:详见知乎博客:反向传播之一:softmax函数

你可能感兴趣的:(深度学习笔记,深度学习,机器学习,python,神经网络)