1 损失函数、代价函数和目标函数
- 损失函数(Loss Function )是定义在单个样本上的,算的是一个样本的误差。
- 代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。(也被称作经验风险)
- 目标函数(Object Function)定义为:最终需要优化的函数。等于经验风险+结构风险(也就是代价函数 + 正则化项)。代价函数最小化,降低经验风险,正则化项最小化降低。
1.1 损失函数与代价函数
The loss function computes the error for a single training example; the cost function is the average of the loss funcitons of the entire training set. — — Andrew NG
根据NG的解释可以得出结论:损失函数(loss function)是单个样本的训练误差,而代价函数(cost function)是所有样本损失函数的期望。
1.2 常见的损失函数
损失函数是一个非负实数函数,用来量化模型预测和真实标签之间的差异。下面介绍几种常用的损失函数。
1. 0-1 损失函数(0-1 Loss Function) 最直观的损失函数是模型在训练集上的错误率,即0-1 损失函数: 其中 是指示函数即当预测错误时,损失函数为1,当预测正确时,损失函数值为0。该损失函数不考虑预测值和真实值的误差程度。只要错误,就是1。
虽然 0-1 损失函数能够客观地评价模型的好坏,但其缺点是数学性质不是很好:不连续且导数为0,难以优化.。因此经常用连续可微的损失函数替代。
2. 平方损失函数(Quadratic Loss Function) 平方损失函数经常用在预测标签 为实数值的任务中,定义为 是指预测值与实际值差的平方。
平方损失函数一般不适用于分类问题。
3. 绝对值损失函数(Absolute Loss Function) 该损失函数的意义和上面差不多,只不过是取了绝对值而不是求绝对值,差距不会被平方放大。
4. 对数损失函数(logarithmic loss function) 这个损失函数就比较难理解了。事实上,该损失函数用到了极大似然估计的思想。 通俗的解释就是:在当前模型的基础上,对于样本 ,其预测值为 ,也就是预测正确的概率。由于概率之间的同时满足需要使用乘法,为了将其转化为加法,我们将其取对数。最后由于是损失函数,所以预测正确的概率越高,其损失值应该是越小,因此再加个负号取个反。
5. Hinge损失函数(Hinge Loss Function) Hinge loss一般分类算法中的损失函数,尤其是SVM,其定义为:
或 ,,当为SVM的线性核时。
了解更多,请阅读:机器学习中的损失函数 (着重比较:hinge loss vs softmax loss)和损失函数 、代价函数、目标函数
2 风险函数
这部分内容参考自——西伯尔——机器学习,评估——风险函数和Traco——经验风险VS风险函数
2.1 定义
风险函数(risk function)= 期望风险(Expected Risk)= 期望损失(Expected Loss),可以认为是平均意义下的损失。
风险函数有两种,不考虑正则项的是经验风险(Empirical Risk),考虑过拟合问题,加上正则项的是结构风险(Structural Risk)。
监督学习的两种基本策略:经验风险最小化(ERM)和结构风险最小化(SRM)。
这样,监督学习问题就变成了经验风险或结构风险函数的最优化问题,即经验或结构风险函数是最优化的目标函数。
2.2 三种风险的关系
期望风险是理想,是白月光,是可望不可求的,只能用经验风险去近似,而结构风险是经验风险的升级版。
为什么可以用经验风险估计期望风险呢?
趋于无穷时,经验风险 趋于期望风险 。所以一个很自然的想法是用经验风险估计期望风险,即局部最优代替全局最优。
但是,由于现实中的训练样本数目有限,甚至很小,所以用经验风险估计期望风险常常并不理想,要对经验风险进行一定的矫正。这就关系到监督学习的两个基本策略:经验风险最小化和结构风险最小化。
1. 期望风险(Expected Risk)【全局,理想】
期望风险对所有样本预测错误程度的均值,基于所有样本点损失函数最小化。期望风险是全局最优,是理想化的不可求的。
的数学期望,在理论上,可以代入期望公式 ,也就是 但是由于联合概率密度函数
2. 经验风险(Empirical Risk)【局部,现实】
衡量整个训练集的预测值与真实值的差异,将整个训练集所有记录均进行一次预测,求取损失函数,将所有值累加,即为经验风险。经验风险是局部最优,是现实的可求的。
就是已知的数据按照现有的模型,测试预测值和真实值偏离的程度叫经验风险。
经验风险 = 经验损失 = 代价函数
关于训练集的平均损失被称为经验风险(empirical risk)或经验损失(empirical loss)。 这个公式的用意很明显,就是模型关于训练集的平均损失(每个样本的损失加起来,然后平均一下)。在实际中用的时候,我们也就很自然的这么用了。
3. 结构风险(Structural Risk) 结构风险,就是在经验风险上加上一个正则化项(regularizer)或者叫做罚项(penalty term),即
经验风险 vs 期望风险∶
- 期望风险往往无法计算,即联合分布
2.3 经验风险最小化和结构风险最小化
1. 经验风险最小化&结构风险最小化 经验风险最小化(empirical risk minimization,ERM),就是认为经验风险最小的模型是最优的模型,用公式表示:
这个理论很符合人的直观理解。因为在训练集上面的经验风险最小,也就是平均损失越小,意味着模型得到结果和“真实值”尽可能接近,表明模型越好。 当样本容量不大的时候,经验风险最小化模型容易产生“过拟合”的问题。为了“减缓”过拟合问题,就提出了结构风险最小的理论。
结构风险最小化(structural risk minimization,SRM),就是认为,结构风险最小的模型是最优模型,公式表示
2. 经验风险最小化的例子:极大似然估计(maximum likelihood estimation)
- 模型——条件概率分布;
- 损失函数——对数损失函数;
- 经验风险最小化等价于极大似然估计。
3. 结构风险最小化的例子:贝叶斯最大后验概率估计
- 模型——条件概率分布;
- 损失函数——对数损失函数;
- 模型复杂度——由先验概率表示;
- 结构风险=经验风险+正则项=后验概率+先验概率;
- 先验概率不变,结构风险最小化,等价于最大后验概率估计。
结构风险 vs 经验风险︰
- 防止过拟合现象的方式,就要降低决策函数的复杂度,让惩罚项
2.4 风险函数与对数损失函数
3 常用的代价函数
这部分内容参考自——【机器学习】代价函数(cost function)
3.1.1 均方误差(Mean Squared Error)
表示第 个样本, 表示样本总数) 通常用来做回归问题的代价函数。
3.1.2 均方根误差(RMSE)
均方根误差是均方误差的算术平方根,能够直观观测预测值与实际值的离散程度。 通常用来作为回归算法的性能指标。
3.1.3 平均绝对误差(Mean Absolute Error)
平均绝对误差是绝对误差的平均值 ,平均绝对误差能更好地反映预测值误差的实际情况。 MSE误差函数对噪声点比较敏感,因为噪声的误差一般比较大,经过平方后放大的倍数会影响模型的效果,此时可以选择对噪声不是非常敏感的’MAE’损失函数。
3.1.4 交叉熵代价函数(Cross Entry)
交叉熵是用来评估当前训练得到的概率分布与真实分布的差异情况,减少交叉熵损失就是在提高模型的预测准确率。其中 是指真实分布的概率,
3.1.5 Huber损失函数
- 当 接近于0时,Huber loss接近MAE 当
- 时,Huber loss接近MSE
3.1.6 Log-Cosh Loss
3.1.7 分位数损失函数
基于Quantile回归的目的是,在给定预测变量的某些值时,估计因变量的条件“分位数”。Quantile Loss实际上只是MAE的扩展形式(当分位数是第50个百分位时,Quantile Loss退化为MAE)。
3.2 各常见代价函数的优缺点
- 使用平方误差更容易求解, 但使用绝对误差对离群点更加鲁棒;
- 当数据存在离群点时,以MSE为损失的模型会赋予更高的权重给离群点;
- MAE损失适用于训练数据被离群点损坏的时候(即,在训练数据而非测试数据中,我们错误地获得了不切实际的过大正值或负值);
- 对所有的观测数据,如果我们只给一个预测结果来最小化MSE,那么该预测值应该是所有目标值的均值。但是如果我们试图最小化MAE,那么这个预测就是所有目标值的中位数。我们知道中位数对于离群点比平均值更鲁棒,这使得MAE比MSE更加鲁棒;
- 使用MAE损失(特别是对于神经网络)的一个大问题是它的梯度始终是相同的,这意味着即使对于小的损失值,其梯度也是大的。这对模型的学习可不好。为了解决这个问题,我们可以使用随着接近最小值而减小的动态学习率。MSE在这种情况下的表现很好, 即使采用固定的学习率也会收敛。 MSE损失的梯度在损失值较高时会比较大, 随着损失接近0时而下降,从而使其在训练结束时更加精确。
- 如果离群点是会影响业务、而且是应该被检测到的异常值,那么我们应该使用MSE。如果我们认为离群点仅仅代表数据损坏,那么我们应该选择MAE作为损失。
- L1损失对异常值更加稳健,但其导数并不连续,因此求解效率很低。L2损失对异常值敏感,但给出了更稳定的闭式解(closed form solution)(通过将其导数设置为0);
- 两种损失函数的问题:可能会出现这样的情况,即任何一种损失函数都不能给出理想的预测。例如,如果我们数据中90%的观测数据的真实目标值是150,其余10%的真实目标值在0-30之间。那么,一个以MAE为损失的模型可能对所有观测数据都预测为150,而忽略10%的离群情况,因为它会尝试去接近中值。同样地,以MSE为损失的模型会给出许多范围在0到30的预测,因为它被离群点弄糊涂了。这两种结果在许多业务中都是不可取的。
- Huber Loss对数据离群点的敏感度低于平方误差损失。它在0处也可导。基本上它是绝对误差,当误差很小时,误差是二次形式的。误差何时需要变成二次形式取决于一个超参数,该超参数可以进行微调。
- 使用MAE训练神经网络的一个大问题是经常会遇到很大的梯度,使用梯度下降时可能导致训练结束时错过最小值。对于MSE,梯度会随着损失接近最小值而降低,从而使其更加精确。在这种情况下,Huber Loss可能会非常有用,因为它会使最小值附近弯曲,从而降低梯度。另外它比MSE对异常值更鲁棒。因此,它结合了MSE和MAE的优良特性。但是,Huber Loss的问题是我们可能需要迭代地训练超参数 。
- 优点:log(cosh(x))对于小的 来说,其大约等于 ,而对于大的 来说,其大约等于 。这意味着log(cosh(x))的作用大部分与均方误差一样,但不会受到偶尔出现的极端不正确预测的强烈影响。它具有Huber Loss的所有优点,和Huber Loss不同之处在于,其处处二次可导。
4 各种算法的损失函数
这部分内容参考自——机器学习-损失函数 和课程总结04 - 损失函数、代价函数与目标函数 的整理。
4.1 逻辑回归模型
虽然名字里包含“回归”,但是实际上却是一种分类学习方法。优点:
- 直接对分类可能性进行建模,无需事先假设数据分布,避免了假设分布不准确的问题;
- 不是仅预测出“类别”,而是得到近似概率预测,对于需要利用概率辅助预测的任务很有用;
- 对率函数任意阶可到的凸函数,很多数值化优化算法都可以直接用于求解最优解。
4.1.1 代价函数
4.1.2 模型参数求解
模型参数的求解方法之一:采用最大似然估计的对数形式(对数是单调函数,求解参数的最大值,函数的对数和函数求出的最大值是一样的)构建函数,再利用梯度下降来求解:
4.1.3 逻辑回归多分类模型
4.2 决策树
4.2.1 决策树-整体损失函数
4.2.2 CART二叉树-最小二乘回归树
4.3 朴素贝叶斯
4.3.1 朴素贝叶斯代价函数
4.3.2 朴素贝叶斯参数估计-极大似然估计
4.4 KNN损失函数
4.5 SVM损失函数-hinge损失
4.6 提升方法损失函数
4.6.1 Adaboost
4.6.2 GBDT-梯度提升树模型
以上就是对机器学习中损失函数、风险函数、代价函数、目标函数的整理,由于水平有限,可能部分地方有误,欢迎大家指出,后续也会随着学习继续完善,祝学习愉快!
参考
- 代价函数,损失函数,目标函数区别:https://zhuanlan.zhihu.com/p/330126934
- 逻辑回归(Logistic Regression):https://zhuanlan.zhihu.com/p/28408516
- 课程总结04 - 损失函数、代价函数与目标函数:https://www.zybuluo.com/rianusr/note/1219975
- 机器学习-损失函数:http://www.csuldw.com/2016/03/26/2016-03-26-loss-function/
- 【机器学习】代价函数(cost function):
- 机器学习中的损失函数 (着重比较:hinge loss vs softmax loss):
- 损失函数(Loss Function)、代价函数(Cost Function)和目标函数(Object Function):
- 代价敏感学习初探-有偏损失函数设计: