损失函数(Loss Function):是定义在单个样本上的,是指一个样本的偏差,度量模型一次预测的好坏。
代价函数(Cost Function)=成本函数=经验风险:是定义在整个训练集上的,是全部样本偏差的平均,也就是全部损失函数值的平均,度量平均意义下模型预测的好坏。
目标函数(Object Function)=结构风险=经验风险+正则化项=代价函数+正则化项:是指最终须要优化的函数,通常指的是结构风险。
html
正则化项(regularizer)=惩罚项(penalty term)。算法
损失函数度量模型一次预测的好坏,风险函数度量平均意义下模型预测的好坏。机器学习
风险函数分为两种,不考虑正则项的是经验风险(Empirical Risk),考虑过拟合问题,加上正则项的是结构风险(Structural Risk)。函数
是MSE的单个样本损失,又叫平方损失(squared loss)
性能
是指预测值与实际值差的平方。学习
有时候为了求导方便,在前面乘上一个1/2。优化
是MAE单个样本损失,又叫绝对偏差(absolute Loss)
atom
又称,对数似然损失函数(loglikelihood loss function)。spa
这个损失函数就比较难理解了。事实上,该损失函数用到了极大似然估计的思想。.net
P(Y|X)通俗的解释就是:在当前模型的基础上,对于样本X,其预测值为Y,也就是预测正确的几率。因为几率之间的同时知足须要使用乘法,为了将其转化为加法,咱们将其取对数。最后因为是损失函数,因此预测正确的几率越高,其损失应该越小,前面加了一个负号是由于log函数是单调递增的,在前面加上负号以后,最大化p(y|x)就等价于最小化L。所以再加个负号取个反。
下面说两点:
第一点就是对数损失函数很是经常使用。logistic回归,softmax回归等都用的是这个损失。
第二点就是对于这个公式的理解。这个公式的意思是在样本x在分类为y的状况下,咱们须要让几率p(y|x)达到最大值。就是利用目前已知的样本分布,找到最有可能致使这种分布的参数值。
其中最经常使用的是平方损失,然而其缺点是对于异常点会施以较大的惩罚,于是不够robust。
若是有较多异常点,则绝对值损失表现较好,但绝对值损失的缺点是在y−f(x)=0y−f(x)=0处不连续可导,于是不容易优化。
Huber损失是对两者的综合,当|y−f(x)||y−f(x)|小于一个事先指定的值δ时,变为平方损失,大于δ时,则变成相似于绝对值损失,所以也是比较robust的损失函数。
三者的图形比较以下:
也就是说,当预测错误时,损失函数为1,当预测正确时,损失函数值为0。该损失函数不考虑预测值和真实值的偏差程度。只要错误,就是1。
0-1损失不连续、非凸,优化困难,于是常使用其余的代理损失函数进行优化。
logistic Loss为Logistic Regression中使用的损失函数。
证实:http://www.javashuo.com/article/p-pyuhazbj-ey.html
Hinge loss通常分类算法中的损失函数,尤为是SVM。
hinge loss为svm中使用的损失函数,hinge loss使得yf(x)>1的样本损失皆为0,由此带来了稀疏解,使得svm仅经过少许的支持向量就能肯定最终超平面。
其中 y=+1或y=−1,f(x)=wx+bf(x)=wx+b ,当为SVM的线性核时。
推导:http://www.javashuo.com/article/p-pyuhazbj-ey.html
exponential loss为AdaBoost中使用的损失函数,使用exponential loss能比较方便地利用加法模型推导出AdaBoost算法 (具体推导过程)。
然而其和squared loss同样,对异常点敏感,不够robust。
modified huber loss结合了hinge loss和logistic loss的优势,既能在yf(x)>1时产生稀疏解提升训练效率,又能进行几率估计。
另外其对于(yf(x)<−1)样本的惩罚以线性增长,这意味着受异常点的干扰较少,比较robust。scikit-learn中的SGDClassifier一样实现了modified huber loss。
从上图能够看出上面这些损失函数均可以看做是0-1损失的单调连续近似函数,而由于这些损失函数一般是凸的连续函数,所以经常使用来代替0-1损失进行优化。
它们的相同点是都随着margin→−∞而加大惩罚;不一样点在于,logistic loss和hinge loss都是线性增加,而exponential loss是以指数增加。
值得注意的是上图中modified huber loss的走向和exponential loss差很少,并不能看出其robust的属性。其实这和算法时间复杂度同样,成倍放大了以后才能体现出巨大差别:
均方差 Mean Squared Error (MSE) 损失是机器学习、深度学习回归任务中最经常使用的一种损失函数,也称为 L2 Loss,又叫最小平方偏差、最小均方偏差、平方损失(square loss)。
平均绝对偏差 Mean Absolute Error (MAE) 是另外一类经常使用的损失函数,也称为 L1 Loss,又叫最小绝对值误差(LAE)。
L2损失相比L1一般能够更快地收敛。
L1损失对于 outlier 更加健壮,即更加不易受到 outlier 影响。L2损失函数对异常点比较敏感,由于L2将偏差平方化,使得异常点的偏差过大,模型须要大幅度的调整,这样会牺牲不少正常的样本。
而L1损失函数因为导数不连续,可能存在多个解,当数据集有一个微笑的变化,解可能会有一个很大的跳动,L1的解不稳定。
Huber Loss 是一种将 MSE 与 MAE 结合起来,取二者优势的损失函数,也被称做 Smooth Mean Absolute Error Loss 。
其原理很简单,就是在偏差接近 0 时使用 MSE,偏差较大时使用 MAE。
Huber Loss 结合了 MSE 和 MAE 损失,在偏差接近 0 时使用 MSE,使损失函数可导而且梯度更加稳定;在偏差较大时使用 MAE 能够下降 outlier 的影响,使训练对 outlier 更加健壮。缺点是须要额外地设置一个 delta超参数。
参考:
https://www.cnblogs.com/lliuye/p/9549881.html
https://blog.csdn.net/andyjkt/article/details/107599424
https://blog.csdn.net/Tianlock/article/details/88232467
http://www.javashuo.com/article/p-pyuhazbj-ey.html
更多损失函数:https://blog.csdn.net/qq_14845119/article/details/80787753【未整理】