常见损失函数

article/2025/10/11 17:36:58

常见损失函数

@(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难问题
忆臻——一文搞懂极大似然估计

在这里插入图片描述
硬核引流:欢迎大家推广关注我的公众号啊(洋可喵)!!!

在这里插入图片描述


http://chatgpt.dhexx.cn/article/3q49n313.shtml

相关文章

【常见的损失函数总结】

文章目录 损失函数的定义神经网络的学习为何要设定损失函数&#xff1f;常见的损失函数1. 0-1损失函数(zero-one loss)2. 对数损失函数3. 平方损失函数MSE(均值平方差&#xff09;4. Hinge 损失函数5. 交叉熵损失函数 (Cross-entropy loss function) 损失函数的定义 损失函数&…

神经网络损失函数汇总

目录 一、基础知识 二、分类 &#xff08;1&#xff09;二分类交叉熵损失函数&#xff08;binary_crossentropy&#xff09; &#xff08;2&#xff09;categorical_crossentropy损失函数 &#xff08;3&#xff09;sparse_categorical_crossentropy &#xff08;4&#…

Jmeter 使用正则表达式提取器将返回值全部保存到一个文件中

目标&#xff1a;将响应数据 {"errorCode":0,"message":"success","data":null} 中的message字段的值全部保存到一个文件中。 1.正则表达式提取器 正则表达式&#xff1a;提取内容的正则表达式【()表示提取&#xff0c;对于你要提取的…

Jmeter性能测试报告模板

性能测试报告 一、测试内容 针对当当网——服务器&#xff0c;进行性能测试&#xff0c;主要针对的核心业务是&#xff1a;注册&#xff0c;登录&#xff0c;查看商品信息与提交订单等。 二、测试方法 本次采用Apache的开元测试工具jmeter&#xff0c;采用本地动态拼装请求数据…

Jmeter5.4.1测试批量上传文件(参数化)

0、下载jmeter5.4.1 jmeter5.4.1-Java文档类资源-CSDN下载 注意需要java环境哦 jdk1.8-java_sdk_jre-Java文档类资源-CSDN下载 启动命令&#xff1a; java -jar ApacheJMeter.jar 用这个启动才是中文版本&#xff0c;另外启动后&#xff0c;界面字体太小&#xff0c…

Jmeter接口测试参数化详解

接口测试是目前最主流的自动化测试手段&#xff0c;它组合不同的参数向服务器发送请求&#xff0c;接受和解析响应结果&#xff0c;通过测试数据的交换逻辑来验证服务端程序工作的正确性。我们在测试过程中需要考虑不同的输入组合&#xff0c;来覆盖不同的测试范围&#xff1b;…

Jmeter学习之用户定义变量与用户变量

一、User Defined Variables 1、添加方法&#xff1a;选择“线程组”&#xff0c;右键点击添加&#xff0d;Config Element&#xff0d;User Defined Variables&#xff0c;定义你所需要的参数&#xff0c;如 2、在对应的需要使用参数的位置&#xff0c;使用${host}替代。 …

jmeter请求get接口报错(java.net.URISyntaxException: Illegal character in query at index 153: http://qa....)

log: 问题描述&#xff1a; 接口请求类型&#xff1a;get 请求参数&#xff1a;{"canshu1":"17600000005","canshu2":"test-0004","canshu3":"2021090301"},如下&#xff1a; 请求的时候报错如下&#xff1a; …

jmeter文件上传请求配置:文件,图片,语音、视频上传

图片上传http请求配置&#xff1a; 跟一般的http请求相对&#xff0c;图片上传的配置请求参数多了以下3个部分 1.点击图中【高级】&#xff0c;将客户端实现方式改为java 2.点击【参数】&#xff0c;按照基本请求参数配置即可 3.点击【文件上传】&#xff0c;配置图片路径&am…

JMeter外观配置与汉化

1、JMeter外观配置 推荐使用系统默认的外观&#xff0c;原因&#xff1a;不会出现窗口拉伸、变形等问题。 路径&#xff1a;选项->外观->System 2、JMeter汉化 方法1&#xff1a;修改JMeter设置&#xff08;一次性的&#xff0c;下次打开JMeter还会恢复默认配置&#x…

16、Jmeter如何创建桌面快捷带图方式(亲测有效)

First step** 1、先找到jmeter文件安装的bin目录—>jmeter.bat文件&#xff0c;创建桌面快捷方式。 ** 2、右键&#xff0c;点击“发送到”---->桌面快捷方式”。然后再选中桌面快捷方式&#xff0c;右键&#xff0c;点击“属性”&#xff0c;修改“属性”里的路径为&am…

11、jmeter读取CSV文件之元件数据文件设置基础页面了解(1)

使用场景以及好处&#xff1a; 读取用例的方法通常有两种&#xff0c;1、通过建立多个请求信息实现接口的入参参数化&#xff0c;2、通过读取csv文件&#xff0c;加载测试用例。第一种方法会导致脚本过于冗余&#xff0c;不便于维护&#xff0c;因此多数情况我们会使用读取csv文…

JMeter的基本使用

目录 一、下载JMeter 二、设置语言为简体中文 三、JMeter外观设置 三、添加线程组 四、添加HTTP请求 五、添加信息头管理器 ​六、创建察看结果树 七、运行查看结果 一、下载JMeter 下载地址&#xff1a;Apache JMeter - Apache JMeter™ 下载zip文件解压后运行bin目录…

使用Jmeter进行性能测试的基本操作方法

Jmeter是一款轻量型的优秀测试软件产品&#xff0c;在很多场合如个人测试&#xff0c;企业测试中都有广泛应用。相比体积巨大的我们在某些场合可能更倾向于对Jmeter的使用&#xff0c;那么我们要如何利用该软件进行性能测试呢&#xff1f; 我们需要下载安装这款全免费的测试软件…

JMeter下载安装及入门教程

1 JMeter介绍 JMeter使用了不同技术和协议&#xff0c;是一款可以进行配置和执行负载测试、性能测试和压力测试的工具。负载测试、性能测试和压力测试概念&#xff1a; 负载测试: 这类测试使系统或者应用程序在预先设计好的极端场景下测试运行。这类测试用来评估系统或者程序…

Jmeter模拟selenium操作浏览器

前言 selenium是一个web自动化测试的开源框架&#xff0c;它支持多语言&#xff1a;python/java/c#… selenium支持多语言&#xff0c;是因为selenium与浏览器驱动之间是通过http协议进行通信的。只关心通信的数据是否能够正确解读 &#xff0c;并不关心这个数据是从哪个客户…

jmeter 安装与配置

目录 一、jmeter 安装配置与启动 1、安装 2、配置 3、启动 &#xff08;若要求在 Linux 下启动&#xff0c;则用bin --> jmeter.sh 打开&#xff09; 二、jmeter 插件安装 一、jmeter 安装配置与启动 &#xff08;需要Java环境&#xff09; 1、安装 安装与JDK版本对…

JMeter执行顺序与作用域

两个线程组之间是不可以直接传入参数的 执行顺序 一般情况下JMeter按照如下顺序执行∶ 0.配置元件 1.定时器 2.前置处理器 3.取样器 4. 后置处理器 5.断言 6&#xff0e;监听器 一个简单的例子∶ -Test Plan -Thread Group -HTTP Requesto 4  …

Jmeter测试全流程学习教程

Jmeter测试全流程学习教程,本文从jmeter的下载安装到具体的测试流程做了详细的介绍,并在文章中介绍了一些长见问题及处理方法。适合刚刚接触jmeter测试的新手小白参考,若有错误之处,欢迎指正,大神勿喷。 1. 安装与配置 1.1. 下载 官网地址:https://jmeter.apache.org/…

jmeter测试服务器性能测试报告,Jmeter的性能测试

需要分析的系统信息 需要分析的业务信息 性能需求评估 确定性能测试点: 关键业务: 确定被测项目是否属于关键业务,有哪些主要的业务逻辑点,特别是跟交易相关的功能点。例如转账,扣款等接口。如果项目(或功能点)不属于关键业务(或关键业务点) 日请求量: 确定被测项目各功能…