深度学习之交叉熵损失函数(在分类问题如图像识别时可以考虑)

发布时间 2023-11-13 11:33:02作者: cojames
1. 熵
2. 交叉熵损失函数
交叉熵能够衡量两个分布的异同程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异。交叉熵的值越小,模型预测效果就越好。二分类交叉熵:

X = [[0.3, 0.7], [0.2,0.8]]
Y = [1,0]
Loss = -1/2(1*log0.7 + 1*log0.2)

x代表样本等于下面的i

多分类交叉熵:
X = [[0.1,0.2,0.7], [0.2,0.5,0.3]]
Y = [2,1]
Loss = -1/2(log0.7+log0.5)

M是类别;i是第i个样本;yic是第i个样本类别c的标签(0或1) ;pic是第i个样本类别c的概率

3. 交叉熵与相对熵(KL散度)的关系
对于训练数据分布A(标签的分布)和模型输出分布B之间的KL散度可以用一下公式表示:

即A和B的KL散度=A的熵-AB的交叉熵,在机器学习中,训练数据的分布是固定的,因此最大化相对熵(KL散度)等价于最小化交叉熵,也等价于极大似然估计。

4. 交叉熵与极大似然估计的关系
假设训练数据分布为A和模型输出分布为B,则A和B的KL散度=A的熵-AB的交叉熵。在机器学习中,训练数据的分布是固定的,因此最大化相对熵(KL散度)等价于最小化交叉熵。

最小化交叉熵是最小化实际与预估之间的差距,这与最大似然的目的是一致的。即最大似然与交叉熵在目标上一致,只是由于正负号,而导致一个为最小化(交叉熵,前面有负号),一个为最大化(最大似然)

5. 为什么分类问题不能用均方误差(MSE)而用交叉熵
1. 从最优化的角度

MSE 函数对于一个输出范围是的数来说是凸的(标准的u型),而分类问题通常会接sigmoid或softmax,它的输出范围为。会导致损失函数变成非凸函数,有多个极值点。

2. 从梯度的角度

假设是分类问题,那么激活函数会包含sigmoid或softmax,以激活函数为sigmoid为例

(a). 使用均方误差作为损失函数

损失函数对w的偏导:(预测值-实际值)乘sigmoid激活函数的导数乘输入x。

损失函数对b的偏导:(预测值-实际值)乘sigmoid激活函数的导数。

会受到sigmoid激活函数最大值为0.25的影响,梯度不稳定。

(b). 使用交叉熵作为损失函数
损失函数对w的偏导:输入x乘(激活函数输出值(预测值)-实际值),没有受到激活函数导数的影响。

总结

使用MSE作为损失函数,MSE对参数的偏导受sigmoid导数的影响,会造成梯度不稳定;而CE对参数的偏导没有受到激活函数导数的影响,保证了梯度的稳定。

对均方误差损失函数而言,要得到稳定的梯度,输出不能经过激活函数,这样的情况只有线性回归,所以SE较适合做回归问题。

无论是使用sigmoid还是softmax,交叉熵损失函数都能有效防止梯度的消失。

3. 从含义的角度

交叉熵表征真实概率分布与预测概率分布差异,而分类问题就是让模型输出的分布接近训练数据的分布(softmax输出的向量代表取各个类别的概率,使用不是空间中的点的坐标,所以欧氏距离无意义)。这与均方误差代表的欧氏距离无关。

6. 交叉熵损失函数的缺点
优点

对于cross entropy在更新权重时候,权重的梯度跟激活函数的梯度没有关系。如果预测值跟实际值差距越大,那么参数调整就越快,收敛就越快。二次代价函数存在很多局部最小点,而交叉熵就不会。

缺点

采用了类间竞争机制,比较擅长于学习类间的信息,但是只关心对于正确标签预测概率的准确性,而忽略了其他非正确标签的差异,从而导致学习到的特征比较