一、softmax函数
softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类!
假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的softmax值就是:
更形象的如下图表示:
softmax本质上是归一化网络,目的是将多个标量映射为一个概率分布,其输出的每一个值范围在 。
深度神经网络的最后一层往往是全连接层+ softmax(分类网络)
先看一下计算方式:全连接层将权重矩阵与输入向量相乘再加上偏置,将 n个 的实数映射为 K个 的实数(分数);Softmax将 K个 的实数映射为 K个 的实数(概率),同时保证它们之和为1。
2.交叉熵损失函数
MSE的一个缺点就是其偏导值在输出概率值接近0或者接近1的时候非常小,这可能会造成模型刚开始训练时,梯度几乎消失。
对于分类问题的损失函数来说,分类错误率(分类精确率)和平方和损失都不是很好的损失函数,所以,大家才考虑用交叉熵损失。
交叉熵损失函数经常用于分类问题中,特别是神经网络分类问题,由于交叉熵涉及到计算每个类别的概率,所以在神经网络中,交叉熵与softmax函数紧密相关。为了更好的理解交叉熵与Softmax的关系,下面先介绍一下一些基本信息。
2.1熵与交叉熵
熵的本质是香农信息量(,)的期望。
熵在信息论中代表随机变量不确定度的度量。一个离散型随机变量 X 的熵 H(X) 定义为:
交叉熵刻画的是 实际输出的概率分布和期望输出的概率分布的“距离”(相似度)。交叉熵对两个概率分布的度量结果,不具对称性,所以交叉熵并不是严格意义上的距离。
交叉熵的值越小,则两个概率分布越接近,即实际与期望差距越小。交叉熵中的交叉就体现在p(期望概率分布),q(实际概率分布)。假设概率分布p为期望输出,概率分布q为实际输出,为交叉熵。则:
2.2交叉熵损失函数的定义
二分类:
在二分类的情况下,模型最终预测的结果只有2类,对于每个类别我们预测的概率为1-p和p。
此时Binary Cross Entropy:
其中:
- y : 样本标签,正样本标签为1,负样本标签为0
- p : 预测为正样本的概率
多分类:
多分类实际是二分类的扩展:
其中:
- K : 类别的数量
- y : 是否是类别c,
- p : 样本属于类别的概率
为什么Cross Entropy损失函数常用于分类问题中呢?我们从一个简单的例子来分析。
问题引入: 假设我们有一个 三分类问题,分别用 模型1和 模型2来进行预测。
结果如下:
- 模型1
| 样本id | 预测值 | 实际值 | 是否预测正确 |
| ------ | ------------- | ------- | ------------ |
| 1 | [0.3,0.3,0.4] | [0,0,1] | √ |
| 2 | [0.3,0.4,0.3] | [0,1,0] | √ |
| 3 | [0.1,0.2,0.7] | [1,0,0] | × |
- 模型2
| 样本id | 预测值 | 实际值 | 是否预测正确 |
| ------ | ------------- | ------- | ------------ |
| 1 | [0.1,0.2,0.7] | [0,0,1] | √ |
| 2 | [0.1,0.7,0.2] | [0,1,0] | √ |
| 3 | [0.3,0.4,0.3] | [1,0,0] | × |
对样本1和样本2,模型1以0.4>0.3的微弱优势正确预测样本1的标签为类别3,而模型2以0.7>0.2>0.1的巨大优势毫无悬念的正确预测出样本标签。
对于样本3,模型1和模型2均预测错误,但模型1以0.7>0.2>0.1的概率,错误的预测样本标签为标签3,但实际标签为标签1,错的离谱!!!但模型2虽然也预测错了,但0.4>0.3>0.2还不算太离谱。
这里两个模型用Classification Error(分类错误率)不能进行区分。用Mean Squared Error(均方误差)计算时,其偏导值在输出概率值接近0或者接近1的时候非常小,这可能会造成模型刚开始训练时,梯度几乎消失。
现在我们用交叉熵损失函数来计算损失函数值。
- 模型1:
- 模型2:
可以发现,交叉熵损失函数可以捕捉到模型1和模型2的差异。
2.3函数性质
在一般的神经网络中,交叉熵与softmax函数紧密相关,他们的计算过程大约如下图:
下面我们来推下最后面的交叉熵损失函数的整个求导公式,求导如图所示,分为三个过程:
先看:
结合上图我们再看看:(这一部分即Softmax的求导过程)
·当j=i时候:
- 当j≠i时候:
在看:
接下来我们只需要把上面的组合起来:
最后针对分类问题,给定的中只会有一个类别是1,其他类别都是0,所以:
OK,这是注意一下,是SoftMax层的输出的概率,而最后的结果,SoftMax层的输出减去1就成了损失函数J的梯度。
梯度就是这么容易计算出来了!!!
而这就是使用Softmax 和 Cross-Entropy 的原因。
softmax 和 cross-entropy 本来太大的关系,只是把两个放在一起实现的话,算起来更快,也更数值稳定。
上面我们说了,cross entropy 不能认为是衡量两个概率分布之间的“距离”。softmax能把一切转换成概率分布,那么自然二者经常在一起使用。
之所以用交叉熵,是因为softmax输出的是概率分布,而衡量概率分布的相似程度的常用方法是KL散度。然后,KL散度和交叉熵几乎是一回事:
so,总结一下,为什么是Softmax?“softmax 的作用是把 一个序列,变成概率。” 这个概率不是别的,而是被选项中为 max 的概率。同时,因为Softmax与Cross-Entropy的关系,所以在求解神经网络的过程中,大量的梯度计算就被节省了不少。
神经网络输出层为什么通常使用softmax?
多分类问题,数据(x,y)中y服从多项分布。在广义线性模型中,Softmax函数是多项分布的标准连接函数的反函数,它能够将输出wx+b转化成概率p(其实是将wx+b与y的期望通过连接函数联系起来)。同理,二分类问题,数据(x,y)中y服从伯努利分布,Sigmoid函数是伯努利分布的标准连接函数的反函数,它也可以将wx+b转换成概率p。
Softmax的作用
相比(−∞,+∞)范围内的分数,概率天然具有更好的可解释性,让后续取阈值等操作顺理成章。
经过全连接层,我们获得了K个类别(范围内的分数,为了得到属于每个类别的概率,先通过将分数映射到(0,+∞),然后再归一化到(0,1),这便是Softmax的思想
参考:
1:https://www.zhihu.com/question/40403377/answer/86647017 多类分类下为什么用softmax而不是用其他归一化方法?
2。 http://freemind.pluskid.org/machine-learning/softmax-vs-softmax-loss-numerical-stability/ Softmax vs. Softmax-Loss: Numerical Stability
3.https://blog.csdn.net/blogshinelee/article/details/84826837
4. 神经网络输出层为什么通常使用softmax? - n次方的回答 - 知乎 https://www.zhihu.com/question/310506852/answer/1124789510
5.链接:https://www.zhihu.com/question/294679135/answer/527393818
6.https://blog.csdn.net/u014313009/article/details/51043064 交叉熵代价函数(作用及公式推导)
7.softmax和cross-entropy是什么关系? - 董鑫的回答 - 知乎 https://www.zhihu.com/question/294679135/answer/885285177