机器学习中常见的损失函数

mac2023-01-24  22

机器学习问题中,常采用结构经验最小化的目标函数作为学习目标: min ⁡ f 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ Ω ( f ) \min_f\frac{1}{N}\sum\limits_{i=1}^NL(y_i,f(x_i))+\lambda\Omega(f) fminN1i=1NL(yi,f(xi))+λΩ(f)其中前一项表示在样本上预测函数与真实值间误差的经验风险;而后一项则是对模型复杂度的正则化项。 而 L ( y i , f ( x i ) ) L(y_i,f(x_i)) L(yi,f(xi))即称为损失函数。

在监督式学习的回归或分类问题中,常采用各式损失函数。

一、分类问题

1. 0-1损失

当预测值与真实值一致时,损失为0;而当模型分类错误时,损失为1。 L ( y , f ( x ) ) = { 0 , y = f ( x ) 1 , y ≠ f ( x ) L(y,f(x))=\begin{cases}0,y=f(x)\\1,y\ne f(x)\end{cases} L(y,f(x))={0,y=f(x)1,y=f(x)0-1损失非常符合直觉想法,对错误者一视同仁。其缺点在于非连续函数,难以直接求最优解。因此,常取其连续上界函数作替代,以便于求得解析解或数值求解。

如在感知机模型中,对于判断错误的点,将0-1损失改写为 − y ( w x + b ) -y(wx+b) y(wx+b)

2. 指数损失

是一种基于二分类问题的损失函数,见于Adaboost算法。 L ( y , f ( x ) ) = e x p ( − y f ( x ) ) L(y,f(x))=exp(-yf(x)) L(y,f(x))=exp(yf(x))当预测值与分类相同( { + 1 , − 1 } \{+1,-1\} {+1,1}),且绝对值越大时(可理解为置信度)损失越小;反之,符号相异,且绝对值越大时损失越大。

3. log损失

是一种基于二分类问题的损失函数,见于逻辑回归算法。 L ( y , f ( x ) ) = l o g ( 1 + e x p ( − y f ( x ) ) ) L(y,f(x))=log(1+exp(-yf(x))) L(y,f(x))=log(1+exp(yf(x)))对于多分类问题,可将其拓展为交叉损失函数(也可理解为KL散度): L ( y , p ( x ) ) = ∑ m = 1 M − [ [ y = m ] ] l o g p ( x ) L(y,p(x))=\sum\limits_{m=1}^M-[[y = m]]logp(x) L(y,p(x))=m=1M[[y=m]]logp(x)

4. Hinge损失

是一种基于二分类问题的损失函数,见于SVM算法。 L ( y , f ( x ) ) = max ⁡ ( 0 , 1 − y f ( x ) ) L(y,f(x))=\max(0,1-yf(x)) L(y,f(x))=max(0,1yf(x))其忽略超过软间隔分隔面之外的点,仅对判断错误或者在软间隔分隔面之内的点进行惩罚。

下图给出了各常见回归损失函数的对照图。

二、回归问题

1. 平方损失

即各样本点预测值与真实值差的平方和,可由线性回归推导得,其背后数学原理在于假设误差符合正态分布。 L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L(y,f(x))=(y-f(x))^2 L(y,f(x))=(yf(x))2

2. 绝对值损失

即各样本点预测值与真实值差的绝对值。相较于平方损失,绝对值损失对异常值更加稳健,因此当数据中存在较多异常值时,绝对值损失表现往往更好。但注意其在0处不可导。 L ( y , f ( x ) ) = ∣ y − f ( x ) ∣ L(y,f(x))=|y-f(x)| L(y,f(x))=yf(x)

3. Tube损失

Tube损失是对绝对值损失的一种拓展,其允许预测值的偏差在一定范围内,见于SVM回归算法。 L ( y , f ( x ) ) = max ⁡ ( 0 , ∣ y − f ( x ) ∣ − ϵ ) , ϵ > 0 L(y,f(x))=\max(0,|y-f(x)|-\epsilon),\epsilon>0 L(y,f(x))=max(0,yf(x)ϵ),ϵ>0

4. Huber损失

Huber损失是平方损失和绝对值损失的折中。其通过设置一个误差范围 δ \delta δ,当误差不大于 δ \delta δ时,选择平方损失;而当误差大于 δ \delta δ时,选择绝对值损失。从而在使得损失函数对异常值更稳健的同时,保证了整个损失函数的连续可微。 L δ ( y , f ( x ) ) = { 1 2 ( y − f ( x ) ) 2 i . f . ∣ y − f ( x ) ∣ < δ δ ∣ y − f ( x ) ∣ − 1 2 δ 2 o t h e r w i s e L_\delta(y,f(x))=\begin{cases}\frac{1}{2}(y-f(x))^2\quad i.f.|y-f(x)|<\delta\\ \delta|y-f(x)|-\frac{1}{2}\delta^2\quad otherwise\end{cases} Lδ(y,f(x))={21(yf(x))2i.f.yf(x)<δδyf(x)21δ2otherwise

对于Huber损失,超参数 δ \delta δ的取值至关重要,其决定了对异常值的处理能力。当 δ \delta δ + ∞ +\infin +时,Huber损失蜕变为平方损失;而当 δ \delta δ 0 0 0时,Huber损失蜕变为绝对值损失。在实际使用中,一般取整个训练数据的某个分位数,或者通过交叉验证的方式选择最优值。

5. Log-Cosh损失函数

Log-Cosh损失利用双曲余弦函数的对数值来计算误差损失: L ( y , f ( x ) ) = log ⁡ ( cosh ⁡ ( y − f ( x ) ) ) L(y,f(x))=\log(\cosh(y-f(x))) L(y,f(x))=log(cosh(yf(x))) 对于较小的误差,其值与 x 2 2 \frac{x^2}{2} 2x2同阶;而对于较大的误差,其值与 ∣ x ∣ |x| x同阶。所以其与Huber损失一样,能够处理异常点。同时,其在整个定义域内二次可导,这意味着可以利用牛顿法(利用Hessian矩阵)进行最值求解。如在使用牛顿法的XGBoost优化模型。

6. Quantile损失函数

有时我们希望回归模型得到的预测值为一个范围,而非一个固定值。此时,便可以考虑使用Quantile损失,对应的回归可称为分位数回归。

L p ( y , f ( x ) ) = max ⁡ ( q ( f ( x ) − y ) , ( q − 1 ) ( f ( x ) − p ) ) L_p(y,f(x))=\max(q(f(x)-y),(q-1)(f(x)-p)) Lp(y,f(x))=max(q(f(x)y),(q1)(f(x)p))

上式表明当f(x)>y时,按照 q ( f ( x ) − y ) q(f(x)-y) q(f(x)y)惩罚;而当 f ( x ) < y f(x)<y f(x)<y时,按照 q ( f ( x ) − y ) q(f(x)-y) q(f(x)y)惩罚。其是一种不可导的线性损失函数,参数 q q q可理解为最优解对应的分位数。当 q = 0.5 q=0.5 q=0.5时候与MAE损失相当。

下图给出了各常见回归损失函数的对照图。

在实际问题中,损失函数的选择需要考虑问题类型、数据特点(如有无异常值)、算法、梯度下降求解的可行性和效率、upper bound程度等各方面的因素。

最新回复(0)