softmax、以及与sigmoid的比较

softmax是什么?

softmax用于多分类过程中,将多个神经元的输出,映射到(0,1)范围内,且这些映射值的总和为1,相当于概率值。

假设某神经网络输出层V,共有j个元素,其中第i个元素值为V_{i},则该元素对应的softmax值为:

S_{i}=\frac{e^{V_i}}{\sum_{j}^{}e^{V_j}}

softmax与sigmoid的区别:

sigmoid函数会分别处理各个原始输出值,因此其结果相互独立,概率总和不一定为1

softmax函数的输出值相互关联,其概率的总和始终为1,因此,在softmax函数中,为增大某一类别的概率,其他类别的概率必须相应减少

所以当预测结果同时有多种可能时,例如胸片诊断、恶评分析,就应该选择sigmoid函数放在输出层

softmax层有什么优势?

默认选取交叉熵函数为损失函数:

Loss=-\sum_{i}^{}y_iloga_i

反向传播梯度求导,需要把softmax的值求导传回去,乍看上去这个公式很繁杂,但其实在多分类场景中,只需要预测一个结果,因此对于每一条输入,真实的输出y_i只有一个节点为1,其余为0;这里假设第j个节点真实值为1,其余为0,对应的loss公式就可以简化为:

Loss=-y_jloga_j

y_j 为真实值,取1:

Loss=-loga_j

接下来是将损失值用链式法则前向求导:

softmax、以及与sigmoid的比较_第1张图片

关键这里分两种情况:

  • 一种是j=i,也就是loss对真实值为1的节点求偏导
  • 另一种是j!=i,也就是loss对真实值为0的节点求偏导

softmax、以及与sigmoid的比较_第2张图片

乘上Loss对a_j的偏导-\frac{1}{a_j},得到a_j-1

softmax、以及与sigmoid的比较_第3张图片 

 乘上Loss对a_j的偏导-\frac{1}{a_j},得到a_j

再乘上已知的O_j就完成了梯度计算,下一步就可以更新权重值了

 

 

参考链接:

Softmax 原理及 Sigmoid和Softmax用于分类的区别 - Jerry_Jin - 博客园

Softmax 函数的特点和作用是什么? - 知乎

 

你可能感兴趣的:(深度学习基础,深度学习,神经网络)