问题引入

在之前的文章中也说过为啥LR用sigmod函数,这里着重比较MSE以及交叉熵,关于LR为啥用sigmod函数,分类问题中为啥用交叉熵这些问题,在这里这里以找到

问题解答

首先来看两者的表达式:
MSE和交叉熵有啥区别?_java
可以看到,对于分类问题,实际的标签为0和1,那么交叉熵很多项是不用算的,举个例子, 实际标签是[1,0,0],模型预测得到的概率是[0.9,0.4,0.3],那么交叉熵损失函数的结果是 1log(0.9)+0log(0.4)+0log(0.3),而MSE则都得全部算一遍。因此我们得到结论1,结论1:MSE无差别得关注全部类别上预测概率和真实概率的差.交叉熵关注的是正确类别的预测概率.
其次,我们在之前的文章中也说到了关于求解优化模型的时候的问题,MSE会收敛的慢一些,因为它求导的结果相比于交叉熵还多乘以一个sigmod函数,但是交叉熵梯度中不再含有sigmoid的导数,有的是sigmoid的值和实际值之间的差,也就满足了我们之前所说的错误越大,下降的越快的要求,你说爽不爽,因而得到结论2,也就是交叉熵更有利于梯度更新
第三点:MSE是假设数据符合高斯分布时,模型概率分布的负条件对数似然;交叉熵是假设模型分布为多项式分布时,模型分布的负条件对数似然。还有一点要说明,MSE对残差大的样例惩罚更大些.,我们还举个例子看看,比如真实标签分别是(1, 0, 0).模型1的预测标签是(0.8, 0.2, 0),模型2的是(0.9, 0.1, 0). 但MSE-based算出来模型1的误差是MSE-based算出模型2的4倍,而交叉熵-based算出来模型1的误差是交叉熵-based算出来模型2的2倍左右.对于模型1和模型2输出的结果。其实也主要是由于MSE太苛刻了,想要把左右的值都预测的分毫不差,而交叉熵只关注正样本也也是就1的那些,计算那些损失函数就可以了,样本标签为0的压根不用算。 

参考

[1]https://www.zhihu.com/collection/167905820    [2]https://zhuanlan.zhihu.com/p/61944055  [3]https://blog.csdn.net/b1055077005/article/details/100152102

喜欢就关注一下啦~~~


MSE和交叉熵有啥区别?_java_02