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