转载于:https://blog.csdn.net/hearthougan/article/details/82706834
Softmax函数
Softmax是将神经网络得到的多个值,进行归一化处理,使得到的值在之间,让结果变得可解释。即可以将结果看作是概率,某个类别概率越大,将样本归为该类别的可能性也就越高。Softmax就如下图(借鉴李宏毅老师的课件)
为了更加清晰的看清整个过程,我将其制作成gif,如下图所示:
交叉熵:
假设和是关于样本集的两个分布,其中是样本集的真实分布,是样本集的估计分布,那么按照真是分布来衡量识别一个样本所需要编码长度的期望(即,平均编码长度):
如果用估计分布来表示真实分布的平均编码长度,应为:
这是因为用来编码的样本来自于真是分布,所以期望值中的概率是。而就是交叉熵。
注:不了解什么是编码的请看这里:如何理解用信息熵来表示最短的平均编码长度。
在神经网络后面添加Softmax,真实的标签(或者是类别)就相当于真实的分布,经过Softmax得出的值就是预测的结果,因此可以使用交叉熵函数来作为损失函数。有了交叉熵的概念,我们就可以得出,Softmax的损失函数:
其中是神经元的输出也可以作为预测结果,是第i个类别的真实值,只能取值。在Softmax中我们取以为底的对数,因为都是的指数形式,可以方便计算。在反向传播的过程中,如何对交叉熵损失函数求导呢?可以先看下图的示例,显示了如何得到损失函数:
由上图可以看到,损失函数具体形式是什么。为了计算反向传播,我们从最后一层开始,也就是首先要对Softmax的输入求导,得:
,其中
由于每个的分母中都有的贡献,故我们要考虑每一个输出值。则:
对于,需要分开讨论因为和时的求导结果不同,故需分开讨论。则
- 当时,有:
- 当时
故,
注:因为如果给定一个样本那么他对应的真实标签只有一个值为,其余为0,故,
Sotfmax的交叉熵损失函数,还有另外的形式:
其本质是一样的,因为是示性函数,只有当大括号内的值为真时才取值为1,否则为0,即。