softmax是什么?
softmax用于多分类过程中,将多个神经元的输出,映射到(0,1)范围内,且这些映射值的总和为1,相当于概率值。
假设某神经网络输出层,共有个元素,其中第i个元素值为,则该元素对应的softmax值为:
softmax与sigmoid的区别:
sigmoid函数会分别处理各个原始输出值,因此其结果相互独立,概率总和不一定为1
softmax函数的输出值相互关联,其概率的总和始终为1,因此,在softmax函数中,为增大某一类别的概率,其他类别的概率必须相应减少
所以当预测结果同时有多种可能时,例如胸片诊断、恶评分析,就应该选择sigmoid函数放在输出层
softmax层有什么优势?
默认选取交叉熵函数为损失函数:
反向传播梯度求导,需要把softmax的值求导传回去,乍看上去这个公式很繁杂,但其实在多分类场景中,只需要预测一个结果,因此对于每一条输入,真实的输出只有一个节点为1,其余为0;这里假设第j个节点真实值为1,其余为0,对应的loss公式就可以简化为:
为真实值,取1:
接下来是将损失值用链式法则前向求导:
关键这里分两种情况:
- 一种是j=i,也就是loss对真实值为1的节点求偏导
- 另一种是j!=i,也就是loss对真实值为0的节点求偏导
乘上Loss对的偏导,得到
乘上Loss对的偏导,得到
再乘上已知的就完成了梯度计算,下一步就可以更新权重值了
参考链接:
Softmax 原理及 Sigmoid和Softmax用于分类的区别 - Jerry_Jin - 博客园