损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。
- 0-1损失函数(zero-one loss)
- 绝对值损失函数
绝对值损失函数是计算预测值与目标值的差的绝对值:
- log对数损失函数
log对数损失函数的标准形式如下:
特点:
(1) log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。
(2)健壮性不强,相比于hinge loss对噪声更敏感。
(3)逻辑回归的损失函数就是log对数损失函数。(log loss和交叉熵的等价的)
- 平方损失函数
平方损失函数标准形式如下:
很少用于分类任务,因为MSE太过于关注错误的输出,用于分类会让模型难收敛。
- 指数损失函数(exponential loss)
指数损失函数的标准形式如下:
特点:
(1)对离群点、噪声非常敏感。经常用在AdaBoost算法中。
- Hinge 损失函数
Hinge损失函数标准形式如下:
- 交叉熵损失函数 (Cross-entropy loss function)
交叉熵损失函数的标准形式如下:
(2)当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数(分类问题),因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。
相关高频问题:
1.交叉熵函数与最大似然函数的联系和区别?
区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。
联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化。
怎么推导的呢?我们具体来看一下。
2. 在用sigmoid作为激活函数的时候,为什么要用交叉熵损失函数,而不用均方误差损失函数?
其实这个问题求个导,分析一下两个误差函数的参数更新过程就会发现原因了。
对于均方误差损失函数,常常定义为:
另外,
所以有:
所以参数更新公式为:
所以当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数。
机器学习中的基本问题——log损失与交叉熵的等价性
交叉熵
交叉熵本质上可以看成,用一个猜测的分布的编码去编码真实的分布,得到的信息量:
对数损失函数的表达式为:
交叉熵和对数损失函数之间的关系
交叉熵中未知真实分布
相当于对数损失中的真实标记
,寻找的近似分布
相当于我们的预测值。如果把所有样本取均值就把交叉熵转化成了对数损失函数。