常见损失函数

常见损失函数

@(cs231n)

文章目录

  • 常见损失函数
    • 损失函数定义
    • 0-1损失函数(zero-one loss)
    • 绝对值损失函数(Absolute loss)
    • log对数损失函数(Log Loss)
    • 平方损失函数(Square Loss)
    • 指数损失函数 (Exponential Loss)
    • SVM损失函数(Hinge Loss)
    • 感知损失函数(perceptron Loss)
    • 交叉熵损失函数 (Cross-entropy loss function)
    • Modified Huber Loss
    • 参考文献
    • 损失函数定义
    • 0-1损失函数(zero-one loss)
    • 绝对值损失函数(Absolute loss)
    • log对数损失函数(Log Loss)
    • 平方损失函数(Square Loss)
    • 指数损失函数 (Exponential Loss)
    • SVM损失函数(Hinge Loss)
    • 感知损失函数(perceptron Loss)
    • 交叉熵损失函数 (Cross-entropy loss function)
    • Modified Huber Loss
    • 参考文献

损失函数在机器学习尤其是监督学习中享有非常重要的地位,本文着重讨论一下机器学习的几个常见的损失函数。

损失函数定义

在机器学习中往往需要一个指标来评价模型真实值与预测值之间的整体差距,用于衡量这个差距的函数就叫做损失函数(loss function),损失函数这个最早来源于计量经济学,用于只管表示一些“成本”与事件的关联,所以也得名成本函数或代价函数(cost function)。它是一个非负实值函数,通常使用 L ( Y , f ( x ) ) L(Y, f(x)) L(Y,f(x))来表示,损失函数越小,模型的鲁棒性就越好。

损失函数分为经验风险损失函数结构风险损失函数

  • 经验风险损失函数指预测结果和实际结果的差别
  • 结构风险损失函数指经验风险损失函数加上正则项。

0-1损失函数(zero-one loss)

0-1损失是指预测值和目标值不相等为1, 否则为0,其函数表达式为:

L ( Y , f ( x ) ) = { 0 Y = f ( x ) 1 Y ≠ f ( X ) L(Y, f(x))=\left\{ \begin{aligned} 0& & Y = f(x) \\ 1& & Y \neq f(X) \end{aligned} \right. L(Y,f(x))={01Y=f(x)Y=f(X)

Zero-One loss应该算是最简单的一类损失函数了,他直接统计分类判断错误的个数,感知机就是用的这种损失函数,这种损失函数是一个非凸函数,关于非凸函数的定义和简单介绍参见大佬回答:在数学中一个非凸的最优化问题是什么意思。由于对凸函数来说任何局部最优解即为全局最优解,故而对于凸函数可以采用一个比较简单的局部算法进行凸优化,这个局部算法可以是贪婪算法(Greedy Algorithm)或者梯度下降(Gradient Decent)。但是对于非凸函数求解全局最优解的难度就成量级增加了,非凸函数相对于凸函数来说具有多个局部最优解,要获得全局最优解的话通常是一个NP难的问题,所以选择0-1 Loss作为损失函数显然是不太适用的。

同时对于上述直接相等的方式产生的损失函数,要求比较严苛,可以稍微放宽一点要求,将调减放缩成如下形式:

L ( Y , f ( x ) ) = { 0 ∣ Y − f ( x ) ∣ < T 1 ∣ Y − f ( X ) ∣ ≥ T L(Y, f(x))=\left\{ \begin{aligned} 0& & |Y - f(x)| < T \\ 1& & |Y - f(X)| \geq T \end{aligned} \right. L(Y,f(x))={01Yf(x)<TYf(X)T

0-1损失对每个错分类点都施以相同的惩罚,这样那些“错的离谱“ (即 [公式] )的点并不会收到大的关注,这在直觉上不是很合适。另外0-1损失不连续、非凸,优化困难,因而常使用其他的代理损失函数进行优化。

绝对值损失函数(Absolute loss)

在0-1 Loss的基础上衍生出了绝对值Loss function,绝对值Loss function通常适用于计算连续值之间的差距,表达式如下:
L ( Y , f ( x ) ) = ∣ Y − f ( X ) ∣ L(Y, f(x))= |Y - f(X)| L(Y,f(x))=Yf(X)

log对数损失函数(Log Loss)

逻辑斯特回归的损失函数就是对数损失函数,在逻辑斯特回归的推导中,它假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着用对数求极值(这里解释一下为什么要利用对数求极值,在实际MLE(Maximum Likelihood Estimation)环境下,直接求导计算最大值比较困难,所以一半都是先取对数,再求导求极值)。实际上逻辑斯特回归并没有求对数似然函数的最大值,而是把极大化当做一个思想,进而推导它的风险函数为最小化的负的似然函数。从损失函数的角度上,它就成为了log损失函数。 对数损失函数的标准形式为:

L ( Y , P ( Y ∣ X ) ) = − l o g P ( Y ∣ X ) L(Y, P(Y|X)) = - log P(Y|X) L(Y,P(YX))=logP(YX)

损失函数 L ( Y , P ( Y ∣ X ) ) L(Y, P(Y|X)) L(Y,P(YX))表达的是样本X在分类Y的情况下,使概率 P ( Y ∣ X ) P(Y|X) P(YX)达到最大值(换言之,就是利用已知的样本分布,找到最有可能(即最大概率)导致这种分布的参数值;或者说什么样的参数才能使我们观测到目前这组数据的概率最大)。因为log函数是单调递增的,所以 l o g P ( Y ∣ X ) logP(Y|X) logP(YX)也会达到最大值,因此在前面加上负号之后,最大化 P ( Y ∣ X ) P(Y|X) P(YX)就等价于最小化L了。

但是健壮性不强,相比于hinge loss对噪声更敏感,他还有一个名字叫做Logistic Loss是因为它主要用作逻辑回归的损失函数,log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。

在逻辑回归的时候,通常对于一个二分类问题,其 P ( Y = y ∣ x ) P(Y=y|x) P(Y=yx)中y的值通常为0或1,在Logistic Regression中使用了Sigmoid函数来预测概率:

g ( f ( x ) ) = P ( Y = 1 ∣ x ) = 1 1 + e − f ( x ) g(f(x))=P(Y=1|x)=\frac{1}{1+e^{-f(x)}} g(f(x))=P(Y=1x)=1+ef(x)1

P ( Y = 0 ∣ x ) = 1 − P ( Y = 1 ∣ x ) = 1 − 1 1 + e − f ( x ) = 1 1 + e f ( x ) = g ( − f ( x ) ) P(Y=0|x)=1-P(Y=1|x)=1-\frac{1}{1+e^{-f(x)}}=\frac{1}{1+e^{f(x)}}=g(-f(x)) P(Y=0x)=1P(Y=1x)=11+ef(x)1=1+ef(x)1=g(f(x)),因此在二分类的情况下,Loss可以写成

L ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] L(\theta)=-\frac{1}{m}\sum_{i=1}^m{[y^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)}) \log (1-h_\theta (x^{(i)}))]} L(θ)=m1i=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

平方损失函数(Square Loss)

最小二乘法是线性回归的一种方法,它将回归的问题转化为了凸优化的问题。最小二乘法的基本原则是:最优拟合曲线应该使得所有点到回归直线的距离和最小。通常用欧几里得距离进行距离的度量。平方损失的损失函数为:

L ( Y ∣ f ( X ) ) = ∑ N ( Y − f ( X ) ) 2 L(Y|f(X))=\sum_N{(Y-f(X))^2} L(Yf(X))=N(Yf(X))2

正如我上面所提到的,平方损失函数是度量所有样本点到回归直线的距离的,所以一般平方损失函数都用于回归问题,即测量预测值和真实值的距离,但是考虑如果有离群点或者噪声的话,平方操作会将整个噪声放大,所以平方损失对于噪声和离群点很敏感,鲁棒性不好。整个式子表示的是残差的平方和,而我们的目的就是最小化这个目标函数值(注:该式子未加入正则项),也就是最小化残差的平方和(residual sum of squares,RSS)。如果将上述平方误差稍作改变,就可以等到均方误差MSE:

M S E = L ( Y ∣ f ( X ) ) = 1 n ∑ i = 1 n ( Y − f ( X ) ) 2 MSE=L(Y|f(X))=\frac{1}{n}\sum_{i=1}^n{(Y-f(X))^2} MSE=L(Yf(X))=n1i=1n(Yf(X))2

再变变可以得到RMSE(Root Mean Square Error)均方根误差:

R M S E = L ( Y ∣ f ( X ) ) = 1 n ∑ i = 1 n ( Y − f ( X ) ) 2 RMSE=L(Y|f(X))=\sqrt{\frac{1}{n}\sum_{i=1}^n{(Y-f(X))^2}} RMSE=L(Yf(X))=n1i=1n(Yf(X))2

变变还可以得到MAE(Mean Absolute Error)平均绝对误差:

M A E = L ( Y ∣ f ( X ) ) = 1 n ∑ i = 1 n ∣ Y − f ( X ) ∣ MAE=L(Y|f(X))=\frac{1}{n}\sum_{i=1}^n{|Y-f(X)|} MAE=L(Yf(X))=n1i=1nYf(X)

上面提到了线性回归,这里额外补充一句,我们通常说的线性有两种情况,一种是因变量y是自变量x的线性函数,一种是因变量y是参数 α α α的线性函数。在机器学习中,通常指的都是后一种情况。

指数损失函数 (Exponential Loss)

AdaBoost就是一指数损失函数为损失函数的。指数损失函数的标准形式如下:

L ( Y ∣ f ( X ) ) = e − y f ( x ) L(Y|f(X))= e^{-yf(x)} L(Yf(X))=eyf(x)

其实一旦运用了指数函数的话,我们可以发现,如果存在离群点或者噪声点,在自然对数的指数帮助下数值将会变得异常大,所指数损失函数本身对于离群点或者噪声非常敏感,这样就降低了模型的鲁棒性。exponential loss为AdaBoost中使用的损失函数,使用exponential loss能比较方便地利用加法模型推导出AdaBoost算法 。

SVM损失函数(Hinge Loss)

这个损失函数翻译过来就是合页损失函数,因为他的函数图像长得像合页,就是那个门上的东西。从他另一个名字SVM我们知道它肯定和支持向量机有什么莫名的关系,其实他就是大多数支持向量机采用的损失函数。HInge Loss的标准形式如下:

L ( Y ∣ f ( X ) ) = m a x ( 0 , 1 − Y f ( X ) ) L(Y|f(X))=max(0,1-Yf(X)) L(Yf(X))=max(0,1Yf(X))

Hinge损失函数表示如果被分类正确,损失为0,否则损失就为 1 − Y f ( X ) 1-Yf(X) 1Yf(X) 。如果画出Hinge Loss的图像,你就可以知道Hinge Loss为什么叫合页损失函数了。hinge loss使得 Y f ( X ) > 1 Yf(X)>1 Yf(X)>1的样本损失皆为0,由此带来了稀疏解,使得svm仅通过少量的支持向量就能确定最终超平面。一般的 f ( X ) f(X) f(X) 是预测值,在-1到1之间, Y是目标值(-1或1)。其含义是, f ( X ) f(X) f(X)的值在-1和+1之间就可以了,并不鼓励 ∣ f ( x ) ∣ > 1 |f(x)|>1 f(x)>1 ,即并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差。 健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。

感知损失函数(perceptron Loss)

这个感知损失函数是一个Hinge Loss的变种,其实严格意义来说他都不算一个独立的损失函数,因为在Hinge Loss中我们取的是 m a x ( 0 , 1 − Y f ( X ) ) max(0,1-Yf(X)) max(0,1Yf(X)),其中这个1是我们认为的一个安全的阈值,其实这个1可以是一个任意实数,它叫做判定边界,根据不同的场景进行选用。如果这里我们选用0的话就是我们说的感知损失函数Perceptron Loss。Hinge Loss对于判定边界附近的样本点(正确端)来说惩罚力度很高,而perceptron loss只要样本的判定类别正确的话,它就满意,不管其判定边界的距离。它比Hinge loss简单,因为不是max-margin boundary,所以模型的泛化能力没 hinge loss强。还是写一下他的标准形式:

L ( Y ∣ f ( X ) ) = m a x ( 0 , − Y f ( X ) ) L(Y|f(X))=max(0,-Yf(X)) L(Yf(X))=max(0,Yf(X))

交叉熵损失函数 (Cross-entropy loss function)

交叉熵损失的标准形式如下:

C = − 1 n ∑ x [ y ln ⁡ a + ( 1 − y ) ln ⁡ ( 1 − a ) ] C=-\frac{1}{n}\sum_{x}{[y\ln a+(1-y) \ln (1-a)]} C=n1x[ylna+(1y)ln(1a)]

公式中 [公式] 表示样本, [公式] 表示预测的输出, [公式] 表示实际的输出, [公式] 表示样本总数量。咋一看似曾相识,天呐这不是我上面讲的log对数损失函数的二值化形式么。对的,交叉熵本质上就是一种对数似然函数,通常就是用于二分类或者多酚类问题中。当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。

Modified Huber Loss

Modified Huber loss的标准形式:

L ( Y , f ( x ) ) = { 0 i f    Y f ( X ) ≥ − 1 − 4 Y f ( X ) i f    Y f ( X ) < − 1 L(Y, f(x))=\left\{ \begin{aligned} 0& & if\ \ Yf(X)\geq -1 \\ -4Yf(X)& & if\ \ Yf(X)<-1 \end{aligned} \right. L(Y,f(x))={04Yf(X)if  Yf(X)1if  Yf(X)<1

modified huber loss结合了hinge loss和logistic loss的优点,既能在 [公式] 时产生稀疏解提高训练效率,又能进行概率估计。另外其对于 [公式] 样本的惩罚以线性增加,这意味着受异常点的干扰较少,比较robust。scikit-learn中的SGDClassifier同样实现了modified huber loss。

参考文献

yyHaker——常见的损失函数(loss function)总结
机器学习——机器学习-损失函数
databatman——算法中的P问题、NP问题、NP完全问题和NP难问题
忆臻——一文搞懂极大似然估计# 常见损失函数

@(cs231n)

文章目录

  • 常见损失函数
    • 损失函数定义
    • 0-1损失函数(zero-one loss)
    • 绝对值损失函数(Absolute loss)
    • log对数损失函数(Log Loss)
    • 平方损失函数(Square Loss)
    • 指数损失函数 (Exponential Loss)
    • SVM损失函数(Hinge Loss)
    • 感知损失函数(perceptron Loss)
    • 交叉熵损失函数 (Cross-entropy loss function)
    • Modified Huber Loss
    • 参考文献
    • 损失函数定义
    • 0-1损失函数(zero-one loss)
    • 绝对值损失函数(Absolute loss)
    • log对数损失函数(Log Loss)
    • 平方损失函数(Square Loss)
    • 指数损失函数 (Exponential Loss)
    • SVM损失函数(Hinge Loss)
    • 感知损失函数(perceptron Loss)
    • 交叉熵损失函数 (Cross-entropy loss function)
    • Modified Huber Loss
    • 参考文献

损失函数在机器学习尤其是监督学习中享有非常重要的地位,本文着重讨论一下机器学习的几个常见的损失函数。

损失函数定义

在机器学习中往往需要一个指标来评价模型真实值与预测值之间的整体差距,用于衡量这个差距的函数就叫做损失函数(loss function),损失函数这个最早来源于计量经济学,用于只管表示一些“成本”与事件的关联,所以也得名成本函数或代价函数(cost function)。它是一个非负实值函数,通常使用 L ( Y , f ( x ) ) L(Y, f(x)) L(Y,f(x))来表示,损失函数越小,模型的鲁棒性就越好。

损失函数分为经验风险损失函数结构风险损失函数

  • 经验风险损失函数指预测结果和实际结果的差别
  • 结构风险损失函数指经验风险损失函数加上正则项。

0-1损失函数(zero-one loss)

0-1损失是指预测值和目标值不相等为1, 否则为0,其函数表达式为:

L ( Y , f ( x ) ) = { 0 Y = f ( x ) 1 Y ≠ f ( X ) L(Y, f(x))=\left\{ \begin{aligned} 0& & Y = f(x) \\ 1& & Y \neq f(X) \end{aligned} \right. L(Y,f(x))={01Y=f(x)Y=f(X)

Zero-One loss应该算是最简单的一类损失函数了,他直接统计分类判断错误的个数,感知机就是用的这种损失函数,这种损失函数是一个非凸函数,关于非凸函数的定义和简单介绍参见大佬回答:在数学中一个非凸的最优化问题是什么意思。由于对凸函数来说任何局部最优解即为全局最优解,故而对于凸函数可以采用一个比较简单的局部算法进行凸优化,这个局部算法可以是贪婪算法(Greedy Algorithm)或者梯度下降(Gradient Decent)。但是对于非凸函数求解全局最优解的难度就成量级增加了,非凸函数相对于凸函数来说具有多个局部最优解,要获得全局最优解的话通常是一个NP难的问题,所以选择0-1 Loss作为损失函数显然是不太适用的。

同时对于上述直接相等的方式产生的损失函数,要求比较严苛,可以稍微放宽一点要求,将调减放缩成如下形式:

L ( Y , f ( x ) ) = { 0 ∣ Y − f ( x ) ∣ < T 1 ∣ Y − f ( X ) ∣ ≥ T L(Y, f(x))=\left\{ \begin{aligned} 0& & |Y - f(x)| < T \\ 1& & |Y - f(X)| \geq T \end{aligned} \right. L(Y,f(x))={01Yf(x)<TYf(X)T

0-1损失对每个错分类点都施以相同的惩罚,这样那些“错的离谱“ (即 [公式] )的点并不会收到大的关注,这在直觉上不是很合适。另外0-1损失不连续、非凸,优化困难,因而常使用其他的代理损失函数进行优化。

绝对值损失函数(Absolute loss)

在0-1 Loss的基础上衍生出了绝对值Loss function,绝对值Loss function通常适用于计算连续值之间的差距,表达式如下:
L ( Y , f ( x ) ) = ∣ Y − f ( X ) ∣ L(Y, f(x))= |Y - f(X)| L(Y,f(x))=Yf(X)

log对数损失函数(Log Loss)

逻辑斯特回归的损失函数就是对数损失函数,在逻辑斯特回归的推导中,它假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着用对数求极值(这里解释一下为什么要利用对数求极值,在实际MLE(Maximum Likelihood Estimation)环境下,直接求导计算最大值比较困难,所以一半都是先取对数,再求导求极值)。实际上逻辑斯特回归并没有求对数似然函数的最大值,而是把极大化当做一个思想,进而推导它的风险函数为最小化的负的似然函数。从损失函数的角度上,它就成为了log损失函数。 对数损失函数的标准形式为:

L ( Y , P ( Y ∣ X ) ) = − l o g P ( Y ∣ X ) L(Y, P(Y|X)) = - log P(Y|X) L(Y,P(YX))=logP(YX)

损失函数 L ( Y , P ( Y ∣ X ) ) L(Y, P(Y|X)) L(Y,P(YX))表达的是样本X在分类Y的情况下,使概率 P ( Y ∣ X ) P(Y|X) P(YX)达到最大值(换言之,就是利用已知的样本分布,找到最有可能(即最大概率)导致这种分布的参数值;或者说什么样的参数才能使我们观测到目前这组数据的概率最大)。因为log函数是单调递增的,所以 l o g P ( Y ∣ X ) logP(Y|X) logP(YX)也会达到最大值,因此在前面加上负号之后,最大化 P ( Y ∣ X ) P(Y|X) P(YX)就等价于最小化L了。

但是健壮性不强,相比于hinge loss对噪声更敏感,他还有一个名字叫做Logistic Loss是因为它主要用作逻辑回归的损失函数,log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。

在逻辑回归的时候,通常对于一个二分类问题,其 P ( Y = y ∣ x ) P(Y=y|x) P(Y=yx)中y的值通常为0或1,在Logistic Regression中使用了Sigmoid函数来预测概率:

g ( f ( x ) ) = P ( Y = 1 ∣ x ) = 1 1 + e − f ( x ) g(f(x))=P(Y=1|x)=\frac{1}{1+e^{-f(x)}} g(f(x))=P(Y=1x)=1+ef(x)1

P ( Y = 0 ∣ x ) = 1 − P ( Y = 1 ∣ x ) = 1 − 1 1 + e − f ( x ) = 1 1 + e f ( x ) = g ( − f ( x ) ) P(Y=0|x)=1-P(Y=1|x)=1-\frac{1}{1+e^{-f(x)}}=\frac{1}{1+e^{f(x)}}=g(-f(x)) P(Y=0x)=1P(Y=1x)=11+ef(x)1=1+ef(x)1=g(f(x)),因此在二分类的情况下,Loss可以写成

L ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] L(\theta)=-\frac{1}{m}\sum_{i=1}^m{[y^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)}) \log (1-h_\theta (x^{(i)}))]} L(θ)=m1i=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

平方损失函数(Square Loss)

最小二乘法是线性回归的一种方法,它将回归的问题转化为了凸优化的问题。最小二乘法的基本原则是:最优拟合曲线应该使得所有点到回归直线的距离和最小。通常用欧几里得距离进行距离的度量。平方损失的损失函数为:

L ( Y ∣ f ( X ) ) = ∑ N ( Y − f ( X ) ) 2 L(Y|f(X))=\sum_N{(Y-f(X))^2} L(Yf(X))=N(Yf(X))2

正如我上面所提到的,平方损失函数是度量所有样本点到回归直线的距离的,所以一般平方损失函数都用于回归问题,即测量预测值和真实值的距离,但是考虑如果有离群点或者噪声的话,平方操作会将整个噪声放大,所以平方损失对于噪声和离群点很敏感,鲁棒性不好。整个式子表示的是残差的平方和,而我们的目的就是最小化这个目标函数值(注:该式子未加入正则项),也就是最小化残差的平方和(residual sum of squares,RSS)。如果将上述平方误差稍作改变,就可以等到均方误差MSE:

M S E = L ( Y ∣ f ( X ) ) = 1 n ∑ i = 1 n ( Y − f ( X ) ) 2 MSE=L(Y|f(X))=\frac{1}{n}\sum_{i=1}^n{(Y-f(X))^2} MSE=L(Yf(X))=n1i=1n(Yf(X))2

再变变可以得到RMSE(Root Mean Square Error)均方根误差:

R M S E = L ( Y ∣ f ( X ) ) = 1 n ∑ i = 1 n ( Y − f ( X ) ) 2 RMSE=L(Y|f(X))=\sqrt{\frac{1}{n}\sum_{i=1}^n{(Y-f(X))^2}} RMSE=L(Yf(X))=n1i=1n(Yf(X))2

变变还可以得到MAE(Mean Absolute Error)平均绝对误差:

M A E = L ( Y ∣ f ( X ) ) = 1 n ∑ i = 1 n ∣ Y − f ( X ) ∣ MAE=L(Y|f(X))=\frac{1}{n}\sum_{i=1}^n{|Y-f(X)|} MAE=L(Yf(X))=n1i=1nYf(X)

上面提到了线性回归,这里额外补充一句,我们通常说的线性有两种情况,一种是因变量y是自变量x的线性函数,一种是因变量y是参数 α α α的线性函数。在机器学习中,通常指的都是后一种情况。

指数损失函数 (Exponential Loss)

AdaBoost就是一指数损失函数为损失函数的。指数损失函数的标准形式如下:

L ( Y ∣ f ( X ) ) = e − y f ( x ) L(Y|f(X))= e^{-yf(x)} L(Yf(X))=eyf(x)

其实一旦运用了指数函数的话,我们可以发现,如果存在离群点或者噪声点,在自然对数的指数帮助下数值将会变得异常大,所指数损失函数本身对于离群点或者噪声非常敏感,这样就降低了模型的鲁棒性。exponential loss为AdaBoost中使用的损失函数,使用exponential loss能比较方便地利用加法模型推导出AdaBoost算法 。

SVM损失函数(Hinge Loss)

这个损失函数翻译过来就是合页损失函数,因为他的函数图像长得像合页,就是那个门上的东西。从他另一个名字SVM我们知道它肯定和支持向量机有什么莫名的关系,其实他就是大多数支持向量机采用的损失函数。HInge Loss的标准形式如下:

L ( Y ∣ f ( X ) ) = m a x ( 0 , 1 − Y f ( X ) ) L(Y|f(X))=max(0,1-Yf(X)) L(Yf(X))=max(0,1Yf(X))

Hinge损失函数表示如果被分类正确,损失为0,否则损失就为 1 − Y f ( X ) 1-Yf(X) 1Yf(X) 。如果画出Hinge Loss的图像,你就可以知道Hinge Loss为什么叫合页损失函数了。hinge loss使得 Y f ( X ) > 1 Yf(X)>1 Yf(X)>1的样本损失皆为0,由此带来了稀疏解,使得svm仅通过少量的支持向量就能确定最终超平面。一般的 f ( X ) f(X) f(X) 是预测值,在-1到1之间, Y是目标值(-1或1)。其含义是, f ( X ) f(X) f(X)的值在-1和+1之间就可以了,并不鼓励 ∣ f ( x ) ∣ > 1 |f(x)|>1 f(x)>1 ,即并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差。 健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。

感知损失函数(perceptron Loss)

这个感知损失函数是一个Hinge Loss的变种,其实严格意义来说他都不算一个独立的损失函数,因为在Hinge Loss中我们取的是 m a x ( 0 , 1 − Y f ( X ) ) max(0,1-Yf(X)) max(0,1Yf(X)),其中这个1是我们认为的一个安全的阈值,其实这个1可以是一个任意实数,它叫做判定边界,根据不同的场景进行选用。如果这里我们选用0的话就是我们说的感知损失函数Perceptron Loss。Hinge Loss对于判定边界附近的样本点(正确端)来说惩罚力度很高,而perceptron loss只要样本的判定类别正确的话,它就满意,不管其判定边界的距离。它比Hinge loss简单,因为不是max-margin boundary,所以模型的泛化能力没 hinge loss强。还是写一下他的标准形式:

L ( Y ∣ f ( X ) ) = m a x ( 0 , − Y f ( X ) ) L(Y|f(X))=max(0,-Yf(X)) L(Yf(X))=max(0,Yf(X))

交叉熵损失函数 (Cross-entropy loss function)

交叉熵损失的标准形式如下:

C = − 1 n ∑ x [ y ln ⁡ a + ( 1 − y ) ln ⁡ ( 1 − a ) ] C=-\frac{1}{n}\sum_{x}{[y\ln a+(1-y) \ln (1-a)]} C=n1x[ylna+(1y)ln(1a)]

公式中 [公式] 表示样本, [公式] 表示预测的输出, [公式] 表示实际的输出, [公式] 表示样本总数量。咋一看似曾相识,天呐这不是我上面讲的log对数损失函数的二值化形式么。对的,交叉熵本质上就是一种对数似然函数,通常就是用于二分类或者多酚类问题中。当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。

Modified Huber Loss

Modified Huber loss的标准形式:

L ( Y , f ( x ) ) = { 0 i f    Y f ( X ) ≥ − 1 − 4 Y f ( X ) i f    Y f ( X ) < − 1 L(Y, f(x))=\left\{ \begin{aligned} 0& & if\ \ Yf(X)\geq -1 \\ -4Yf(X)& & if\ \ Yf(X)<-1 \end{aligned} \right. L(Y,f(x))={04Yf(X)if  Yf(X)1if  Yf(X)<1

modified huber loss结合了hinge loss和logistic loss的优点,既能在 [公式] 时产生稀疏解提高训练效率,又能进行概率估计。另外其对于 [公式] 样本的惩罚以线性增加,这意味着受异常点的干扰较少,比较robust。scikit-learn中的SGDClassifier同样实现了modified huber loss。

参考文献

yyHaker——常见的损失函数(loss function)总结
机器学习——机器学习-损失函数
databatman——算法中的P问题、NP问题、NP完全问题和NP难问题
忆臻——一文搞懂极大似然估计

常见损失函数_第1张图片
硬核引流:欢迎大家推广关注我的公众号啊(洋可喵)!!!

常见损失函数_第2张图片

你可能感兴趣的:(机器学习,深度学习,深度学习,数据挖掘,机器学习)