摘要:持续更新,罗列部分常用的代价函数,以及论文中性能优越的代价函数,方便遇到不同问题时代价函数的选择。第一部分介绍最常见的几个代价函数,第二部分介绍论文中看到的不错的代价函数。
损失函数(Loss Function )是定义在单个样本上的,算的是一个样本的误差。
代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。
目标函数(Object Function)定义为:最终需要优化的函数。
目录
- 常见代价函数
- Mean Squared Error
- Mean Absolute Error
- Mean Absolute Percentage Error
- Mean Squared Logarithmic Error
- Log-Cosh
- Cross Entropy
- 多任务学习
- 多标签学习
- 论文中发现的代价函数
- 中心损失(Center Loss)
- 多任务学习:自适应加权的多任务代价函数
- 多标签学习:代价敏感的加权代价函数
1. 常见代价函数
- Mean Squared Error
M S E = 1 m ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 MSE=\frac{1}{m}\sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^2 MSE=m1i=1∑m(y(i)−y^(i))2
均方误差(MSE)是最常用的回归损失函数,计算方法是求预测值与真实值之间距离的平方和。计算方便,导数性能优秀。
回归问题代价函数的比较以均方误差为基准进行。
- Mean Absolute Error
M A E = 1 m ∑ i = 1 m ∣ y ( i ) − y ^ ( i ) ∣ MAE=\frac{1}{m}\sum_{i=1}^{m}\left|y^{(i)}-\hat{y}^{(i)}\right| MAE=m1i=1∑m∣∣∣y(i)−y^(i)∣∣∣
平均绝对误差(MAE)同样是一种用于回归模型的损失函数,是目标值和预测值之差的绝对值之和。其只衡量了预测值误差的平均模长,而不考虑方向。
MAE对异常值更鲁棒,在训练数据中存在异常点的时候性能优于MSE。但是在神经网络中使用时存在很严重的缺陷,它的梯度始终相同,即使在误差很小的情况下,也会有较大的权重更新,要避免该问题需要额外采用权重衰减的措施。
- Mean Absolute Percentage Error
M A P E = 100 × 1 m ∑ i = 1 m ∣ y ( i ) − y ^ ( i ) y ( i ) ∣ MAPE=100\times\frac{1}{m}\sum_{i=1}^{m}\left|\frac{y^{(i)}-\hat{y}^{(i)}}{y^{(i)}}\right| MAPE=100×m1i=1∑m∣∣∣∣y(i)y(i)−y^(i)∣∣∣∣
平均绝对百分误差(MAPE)关注绝对误差占真实值的比例。直观的看,显然将 1.0 1.0 1.0预测称 0.0 0.0 0.0和将 100.0 100.0 100.0预测成 99.0 99.0 99.0的影响是不一样的,而在MSE和MAE中两者会得到相同的损失。
- Mean Squared Logarithmic Error
M S L E = 1 m ∑ i = 1 m ( log y ( i ) − log y ^ ( i ) ) 2 MSLE=\frac{1}{m}\sum_{i=1}^{m}\left(\log{y^{(i)}}-\log\hat{y}^{(i)}\right)^2 MSLE=m1i=1∑m(logy(i)−logy^(i))2
均方对数损失,预先对数据取对数,是对MSE的改进,防止较大的预测值对较小的预测值的影响。在MSE中,较大的预测值会引导较小的预测值预测不准。
- Log-Cosh
L = ∑ i = 1 m log ( cosh ( y ( i ) − y ^ ( i ) ) ) L=\sum_{i=1}^{m}\log\left(\cosh\left(y^{(i)}-\hat{y}^{(i)}\right)\right) L=i=1∑mlog(cosh(y(i)−y^(i)))
Log-cosh是一种应用于回归问题中的,且比MSE更平滑的的损失函数。它的计算方式是预测误差的双曲余弦的对数。
基本类似于MSE,但不易受异常点的影响。损失较小时近似等于MSE,损失较大时近似等于MAE。而且其二阶可微。但若误差很大,梯度和Hessian矩阵会变成定值。
- Cross Entropy
L ( y ( i ) , y ^ ( i ) ) = − ∑ k = 1 K y k ( i ) ln y ^ k ( i ) L(y^{(i)},\hat y^{(i)})=-\sum_{k=1}^K y_k^{(i)}\ln \hat y^{(i)}_k L(y(i),y^(i))=−k=1∑Kyk(i)lny^k(i)
交叉熵主要用于分类问题,这里的 K K K表示的是类别标签的维数,也就是类别数。 i i i表示第 i i i个样本。
- 多任务学习
L ( y ( i ) , y ^ ( i ) ) = ∑ t = 1 T α t L t ( y ( i ) , y ^ ( i ) ) L(y^{(i)},\hat y^{(i)})=\sum_{t=1}^T\alpha_t L_t(y^{(i)},\hat y^{(i)}) L(y(i),y^(i))=t=1∑TαtLt(y(i),y^(i))
多任务学习的代价函数通常是不同任务代价函数的加权和。
- 多标签学习
深度学习中,多标签学习的代价函数通常是二分类损失,每个位置都进行sigmoid规范化,使其靠近0或者1。
2. 论文中的代价函数
- 中心损失(Center Loss)
用于分类问题,是softmax函数的改进,将softmax函数与聚类问题相结合,在损失函数中增大类间距离而减小类内距离,在人脸识别中有不错的效果,具体见文献。
参考文献:
【1】2016 A Discriminative Feature Learning Approach for Deep Face Recognition
论文地址:https://ydwen.github.io/papers/WenECCV16.pdf
代码链接:https://spaces.ac.cn/archives/4493
- 多任务学习:自适应加权的多任务代价函数
多任务学习的代价函数对不同的任务通常有不同的权重。
作者根据多任务学习设计的代价函数,通过观测噪声对不同尺度的损失自适应加权,能减少对多任务权重进行超参数优化的时间。
参考文献:
【1】Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics
论文地址:https://arxiv.org/abs/1705.07115v3
代码链接:https://github.com/yaringal/multi-task-learning-example
- 多标签学习:代价敏感的加权代价函数
多标签学习中,不同的代价函数对每个标签的敏感程度不同,因此通常需要给予每个标签不同的重要性。
参考文献:
【1】2018 Deep Learning with a Rethinking Structure for Multi-label Classification