代价函数简介
代价函数(Cost Function),通常也被称为损失函数(Loss Function)。这类函数是机器学习乃至整个数据科学学科中最为重要的一类函数模型,它直观的将数据的拟合程度呈现在我们面前。对于机器学习的目标,无非也就是最小化误差,也就是让代价函数最小化。训练模型的过程就是优化代价函数的过程,代价函数对每个参数的偏导数就是梯度下降中提到的梯度,防止过拟合时添加的正则化项也是加在代价函数后面的。因此我觉得有必要花点时间进行讨论一番。
我们先做一个代价函数的简单的定义,代价函数:假定有样本数据,函数模型为,参数为。拟合曲线用表示。代价函数是一个有点抽象的东西,理论上能反应拟合函数与真实值差异的函数都可以用来作为我们的代价函数。通常代价函数写成,不过我们一般会进行求均值,写成。代价函数是一个关于的函数,这点很好理解,因为我们知道,对于给定的算法,误差期望应该是一定的,但是拟合函数参数的变化却会影响误差。算法在寻找最优参数的过程,我们记为:
几种常见的代价函数
平均绝对误差(L1误差函数): 平均绝对误差(MAE)其实就是类似统计学中的标准差,它的具体公式如下:
它的图像:
均方误差函数(L2误差函数): 均方误差函数( MSE)也就是我们熟知的方差,它广泛的运用在一些线性问题上,下式中底的2,是为了方便求导约去,并无实际意义,它的公式如下:它的图像:
平滑平均绝对误差(Huber损失): Huber损失相比于平方损失来说对于异常值不敏感,但它同样保持了可微的特性。它基于绝对误差但在误差很小的时候变成了平方误差。我们可以使用超参数 来调节这一误差的阈值。当 它就退化成了MAE,而当 则退化为了MSE,其表达式如下,是一个连续可微的分段函数:它的图像:
对于Huber损失来说, 的选择十分重要,它决定了模型处理异常值的行为。当残差大于 时使用L1损失,很小时则使用更为合适的L2损失来进行优化。Huber损失函数克服了MAE和MSE的缺点,不仅可以保持损失函数具有连续的导数,同时可以利用MSE梯度随误差减小的特性来得到更精确的最小值,也对异常值具有更好的鲁棒性。而Huber损失函数的良好表现得益于精心训练的超参数。
Log-Cosh损失函数: Log-Cosh损失函数是一种比L2更为平滑的损失函数,利用双曲余弦来计算预测误差:
它的图像:
它的优点在于对于很小的误差来说 ,而对于很大的误差则与 很相近。这意味着log cosh损失函数可以在拥有MSE优点的同时也不会受到异常值的太多影响。它拥有Huber的所有优点,并且在每一个点都是二次可导的。但是Log-cosh损失并不是完美无缺的,它还是会在很大误差的情况下梯度和 hessian 变成了常数。 交叉熵CrossEntropy代价函数: 我们在之前已经极为详细的讲述过交叉熵的概念了,交叉熵通常用于分类问题上的代价函数,尤其在逻辑回归,神经网络中使用的更多。
一点比较:
均方误差(MSE)在误差较大点时的损失远大于平均绝对误差(MAE),它会给异常值赋予更大的权重,模型会全力减小异常值造成的误差,从而使得模型的整体表现下降。
所以当训练数据中含有较多的异常值时,平均绝对误差(MAE)更为有效。当我们对所有观测值进行处理时,如果利用MSE进行优化则我们会得到所有观测的均值,而使用MAE则能得到所有观测的中值。与均值相比,中值对于异常值的鲁棒性更好,这就意味着平均绝对误差对于异常值有着比均方误差更好的鲁棒性。
但MAE也存在一个问题,特别是对于神经网络来说,它的梯度在极值点处会有很大的跃变,及时很小的损失值也会长生很大的误差,这很不利于学习过程。为了解决这个问题,需要在解决极值点的过程中动态减小学习率。MSE在极值点却有着良好的特性,及时在固定学习率下也能收敛。MSE的梯度随着损失函数的减小而减小,这一特性使得它在最后的训练过程中能得到更精确的结果。
当然还有很多的代价函数,例如分位数损失等等,我们在这里就不进行一一展开讲述了,感兴趣的读者可以自行了解。 下一章,我们将仔细的讲解如何通过梯度进行最小化我们的代价函数。
Reference
5 Regression Loss Functions All Machine Learners Should Know MachineLearning CostFunction
我的掘金:WarrenRyan
我的简书:WarrenRyan
欢迎关注我的博客获得第一时间更新 blog.tity.online
我的Github:StevenEco