常见的损失函数

1. 均方差损失 MSE Loss (L2 Loss)

  • 针对回归问题

MSE也称为L2 loss:
J_{MSE} = \frac{1} {N} \sum_{i=1}^{N} (y_i - \hat{y_i})^2
随着预测与真实值的绝对误差的增加,均方差损失呈二次方增加。

MSE Loss

2. 平均绝对误差损失 MAE Loss (L1 Loss)

  • 针对回归问题

J_{MAE} = \frac{1}{N} \sum_{i=1}^{N}{|y_i - \hat{y_i}|}

MAE Loss

MSE和MAE的区别

  • MSE可以更快收敛:
    MSE的损失梯度为-\hat{y_i},MAE的损失梯度为+-1,也就是说MSE的梯度scale会随着误差大小变化,而MAE的梯度则一直保持为1(即使是在绝对误差很小的情况下).

  • MAE对于outlier更加鲁棒:
    MAE损失对于绝对误差是线性关系,MSE是平方关系。当误差非常大的时候,MSE损失会远远大于MAE,导致对模型的影响比较大。

3. Huber Loss

  • 针对回归问题

Huber Loss将L1和L2结合起来,也被称做smoothed L1 Loss。增加了一个需要额外设置的超参数\delta,来控制L2和L1的连接位置。 在误差接近0的时候使用L2,使损失函数可导,梯度更加稳定;误差较大的时候用L1,可以降低outlier带来的巨大误差的影响。

Huber Loss

4. 交叉熵损失 Cross Entropy Loss

  • 针对分类问题

二分类

二分类中,通常使用Sigmoid函数将模型的输出压缩到(0, 1)区间。给定输入x_i,模型判断为正类/负类的概率:
p(y_i =1 | x_i) = p_i
p(y_i = 0 | x_i) = 1 - p_i

合并成一个:
p(y_i|x_i) = (p_i)^{y_i} (1 - p_i)^{1-y_i}

取对数加负号之后,得到:
\mathcal{L}_{CE} = -\sum_{i=1}^{N}{(y_i \log(p_i) + (1-y_i) \log(1-p_i))}
N是所有样本的数量。

图中曲线可以看出,当预测值越接近目标值损失越小,随着误差变差,损失呈现指数增长。


Cross Entropy Loss

多分类

真实值y_i现在是一个One-hot向量,Sigmoid换成了Softmax来把输出值压缩到(0, 1)之间,所有维度的输出和为1.

Softmax公式:
S_i = \frac{e^i}{\sum_{j}{e^j}}

\mathcal{L}_{CE} = - \sum_{i=1}^{N} \sum_{k=1}^{K} y_i^k \log(p_i^k)
k \in K 表示K个类别中的一个,k只在对应的类别上是1,其他时候是0。
于是上式可以改写成:
\mathcal{L}_{CE} = -\sum_{i=1}^{N} y_i^{c_i} \log(p_i ^ {c_i})
c_i 是样本x_i的目标类。

Cross Entropy和MSE

分类问题中为什么不用MSE? 因为MSE假设了误差服从高斯分布,在分类任务下这个假设无法满足,因此效果会很差。

第二个论点是从信息论的角度来分析的,是关于由KL散度的角度来推导Cross Entropy的过程(原文

5. Hinge Loss

是另一种二分类损失函数,适用于Maximum-margin的分类,SVM的损失函数就是hinge loss + L2正则化
\mathcal{L}_{hinge} = \sum_{i=1}^{N} max(0, 1 - sgn(y_i)p_i)

下图为,当y为正类的时候(sgn(y_i) = 1),不同的输出p_i对应的loss图

Hinge Loss

当y为正类时,模型输出负值会有很大的惩罚。即使输出为正值在(0, 1)区间,也还是会有一个较小的惩罚。也就是只有置信度高的才会有零损失。使用hinge loss直觉上的理解是要找到一个决策边界,使得素有数据点被这个边界正确地,高置信度地被分类。
同时hinge loss也反应了一点,对于那些已经可以被很好分类的样本,它不再对loss产生贡献,可以让模型花更多的energy去学习难以分类的样本。

References

https://zhuanlan.zhihu.com/p/77686118

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。