机器学习常用的损失函数

it2023-09-01  69

在有监督学习中,损失函数刻画了模型的预测值与训练样本的匹配程度。令函数 f : X → Y f : X \rightarrow Y f:XY 表示我们的机器学习模型,模型关于第 i i i 个样本的输出为 f ( x i ) f(x_i) f(xi),为了刻画模型的预测值与训练样本的匹配程度,定义损失函数 J : Y × Y → R ≥ 0 J: Y\times Y \rightarrow R_{\geq 0} J:Y×YR0,损失函数的值 J ( f ( x i ) , y i ) ) J(f(x_i),y_i)) J(f(xi),yi)) 越小,表示模型匹配的越好。

针对回归问题和分类问题,使用的损失函数会有所不同。

1 回归问题

1.1 均方差损失(Mean Squared Error Loss, MSE)/ L2 损失

均方差损失是回归任务中最常用的一种损失函数,也称为 L2 Loss,其基本形式为:

J M S E = 1 N ∑ i = 1 N ( y i − f ( x i ) ) 2 J_{MSE}=\frac{1}{N} \sum_{i=1}^N (y_i - f(x_i))^2 JMSE=N1i=1N(yif(xi))2

1.1.1 原理

均方差损失函数假设模型的预测值于真实值之间的误差服从 标准的正态分布( μ = 0 , σ = 1 \mu=0,\sigma=1 μ=0,σ=1),则给定一个输入 x i x_i xi,模型输出真实值 y i y_i yi 的概率为:

p ( y i ∣ x i ) = 1 2 π exp ⁡ ( − ( y i − f ( x i ) ) 2 2 ) p(y_i|x_i)=\frac{1}{\sqrt{2\pi}} \exp(-\frac{(y_i-f(x_i))^2}{2}) p(yixi)=2π 1exp(2(yif(xi))2)

假设数据集中的 N N N 个样本点互相独立,根据条件独立性假设,则给定所有输入样本 x i x_i xi,输出所有真实值 y y y 的概率,即似然(Likelihood),为所有 p ( y i ∣ x i ) p(y_i|x_i) p(yixi) 的累积:

L ( x , y ) = ∏ i = 1 N p ( y i ∣ x i ) = ∏ i = 1 N 1 2 π exp ⁡ ( − ( y i − f ( x i ) ) 2 2 ) \begin{aligned} L(x,y) &= \prod_{i=1}^N p(y_i|x_i) \\ &= \prod_{i=1}^N \frac{1}{\sqrt{2\pi}} \exp(-\frac{(y_i-f(x_i))^2}{2}) \end{aligned} L(x,y)=i=1Np(yixi)=i=1N2π 1exp(2(yif(xi))2)

为了方便计算,对上式取对数,则它的对数似然(Log Likelihood, LL)为:

L L ( x , y ) = log ⁡ ( L ( x , y ) ) = − N 2 log ⁡ 2 π − 1 2 ∑ i = 1 N ( y i − f ( x i ) ) 2 \begin{aligned} LL(x,y) &= \log(L(x,y)) \\ &= -\frac{N}{2} \log 2\pi - \frac{1}{2} \sum_{i=1}^{N} (y_i-f(x_i))^2 \end{aligned} LL(x,y)=log(L(x,y))=2Nlog2π21i=1N(yif(xi))2

第一项与 f ( x i ) f(x_i) f(xi) 无关可以去掉,因此,最终问题可以转化为最小化负对数似然(Negative Log Likelihood, NLL):

N L L ( x , y ) = 1 2 ∑ i = 1 N ( y i − f ( x i ) ) 2 NLL(x,y)=\frac{1}{2} \sum_{i=1}^{N} (y_i-f(x_i))^2 NLL(x,y)=21i=1N(yif(xi))2

可以看出,上面的式子实际上就是均方差损失的形式。

综上所述,在模型输出与真实值的误差服从高斯分布的假设下,最小化均方差损失函数与极大似然估计本质上是一致的。因此在这个假设能被满足的场景中(比如回归),均方差损失是一个很好的损失函数选择。

1.2 平均绝对误差损失(Mean Absolute Error Loss, MAE)/ L1损失

基本形式为:

J M A E = 1 N ∑ i = 1 N ∣ y i − f ( x i ) ∣ J_{MAE}=\frac{1}{N} \sum_{i=1}^N |y_i - f(x_i)| JMAE=N1i=1Nyif(xi)

1.2.1 原理

平均绝对误差损失函数假设模型的预测值于真实值之间的误差服从 拉普拉斯(Laplace)分布( μ = 0 , b = 1 \mu=0,b=1 μ=0,b=1),则给定一个输入 x i x_i xi,模型输出真实值 y i y_i yi 的概率为:

p ( y i ∣ x i ) = 1 2 exp ⁡ ( ∣ y i − f ( x i ) ∣ ) p(y_i|x_i)=\frac{1}{2} \exp(|y_i-f(x_i)|) p(yixi)=21exp(yif(xi))

与 MSE 中的推导类似,同样可以得到:

L ( x , y ) = ∏ i = 1 N 1 2 exp ⁡ ( ∣ y i − f ( x i ) ∣ ) L L ( x , y ) = − N 2 − ∑ i = 1 N ∣ y i − f ( x i ) ∣ N L L ( x , y ) = ∑ i = 1 N ∣ y i − f ( x i ) ∣ \begin{aligned} L(x,y) &= \prod_{i=1}^N \frac{1}{2} \exp(|y_i-f(x_i)|) \\ LL(x,y) &= -\frac{N}{2} - \sum_{i=1}^{N} |y_i-f(x_i)| \\ NLL(x,y) &= \sum_{i=1}^{N} |y_i-f(x_i)| \end{aligned} L(x,y)LL(x,y)NLL(x,y)=i=1N21exp(yif(xi))=2Ni=1Nyif(xi)=i=1Nyif(xi)

1.2.2 MAE 与 MSE 的对比

(1)MSE 通常比 MAE 可以更快的收敛

我们知道,在求解机器学习的参数值时,通常是采用梯度下降法求解的,MSE 损失的梯度为 − f ( x i ) -f(x_i) f(xi),而 MAE 的梯度一直是 ± 1 \pm 1 ±1,因此,MSE 梯度的绝对值会随着误差的变换而变化,而 MAE 不会,MAE 的这个特性非常不利于模型的训练。因此,MSE 通常比 MAE 可以更快的收敛,这也是 MSE 用的更多的原因。

(2)MAE 对异常点的鲁棒性更强,即 MAE 更不容易受到异常值的影响

可以从两个角度来分析,

MSE 的损失与误差是平方关系,当误差很大时,MSE 损失会远远大于 MAE 损失,对模型的训练会产生更大的影响,因此,MSE 更容易受异常值的影响。或者从两种损失的原理来分析,MSE 假设误差服从高斯分布,而 MAE 假设服从拉普拉斯分布,这两种分布相比,拉普拉斯对异常值的鲁棒性更强

1.3 Huber 损失 / 平滑平均绝对误差(Smooth Mean Absolute Error Loss)

因为 MAE 与 MSE 各有所长,各有所短,因此就有了 Huber 损失,Huber 损失是一种将 MSE 与 MAE 相结合、取两者优点的损失函数。

其基本原理就是在误差接近于 0 时使用 MSE,误差较大时使用 MAE,公式为:

J h u b e r = 1 N ∑ i = 1 N I ∣ y i − f ( x i ) ∣ ≤ δ ( y i − f ( x i ) ) 2 2 + I ∣ y i − f ( x i ) ∣ > δ ( δ ∣ y i − f ( x i ) ∣ − 1 2 δ 2 ) J_{huber}=\frac{1}{N} \sum_{i=1}^N I_{|y_i-f(x_i)|\leq \delta} \frac{(y_i - f(x_i))^2}{2} + I_{|y_i-f(x_i)| > \delta} (\delta|y_i-f(x_i)| - \frac{1}{2} \delta^2) Jhuber=N1i=1NIyif(xi)δ2(yif(xi))2+Iyif(xi)>δ(δyif(xi)21δ2)

其中 δ \delta δ 是 Huber Loss 的一个超参数, δ \delta δ 的值是 MSE 和 MAE 两个损失连接的位置。可以看出,第一项是 MSE 的部分,第二项是 MAE 的部分,公式中的 δ ∣ y i − f ( x i ) ∣ − 1 2 δ 2 \delta|y_i-f(x_i)| - \frac{1}{2} \delta^2 δyif(xi)21δ2 是为了保证当 ∣ y − f ( x ) ∣ = ± δ |y-f(x)|=\pm \delta yf(x)=±δ 时,MAE 与 MSE 的取值一致,进而保证 Huber Loss 损失连续可导。

2 分类问题

2.1 交叉熵损失(Cross Entropy Loss)

2.1.1 二分类

二分类的交叉损失熵损失函数为:

J C E = − ∑ i = 1 N ( y i l o g ( f ( x i ) ) + ( 1 − y i ) l o g ( 1 − f ( x i ) ) ) J_{CE}=-\sum_{i=1}^N (y_i log(f(x_i)) + (1-y_i)log(1-f(x_i))) JCE=i=1N(yilog(f(xi))+(1yi)log(1f(xi)))

2.1.2 多分类

在多分类问题中,真实值 y i y_i yi 是一个 One-hot 向量,除了目标类为 1 之外,其他类别的输出都为 0。

令类别的总数为 K K K,样本 x i x_i xi 的目标类为 c i c_i ci,则损失函数为:

J C E = − ∑ i = 1 N ∑ k = 1 K y i k log ⁡ ( f ( x i ) k ) = − ∑ i = 1 N y i c i log ⁡ ( f ( x i ) c i ) \begin{aligned} J_{CE} &=-\sum_{i=1}^N \sum_{k=1}^K y_i^k \log (f(x_i)^k) \\ &= -\sum_{i=1}^N y_i^{c_i} \log (f(x_i)^{c_i}) \end{aligned} JCE=i=1Nk=1Kyiklog(f(xi)k)=i=1Nyicilog(f(xi)ci)

2.1.3 交叉熵损失为什么适合于分类问题?

分类问题中为什么不用均方损失误差?

上面提到,均方损失误差的假设前提是误差服从高斯分布,但在分类问题中下这个假设是不成立的,因此效果会很差。

交叉熵损失为什么就适合呢?

可以从两个角度进行分析:

(1)交叉熵损失其实是一种最小化负对数似然

以二分类为例,令类别 y ∈ ( 0 , 1 ) y\in (0,1) y(0,1),则对样本 x i x_i xi 有:

p ( y i = 1 ∣ x i ) = f ( x i ) p ( y i = 0 ∣ x i ) = 1 − f ( x i ) \begin{aligned} p(y_i=1|x_i) &= f(x_i) \\ p(y_i=0|x_i) &= 1-f(x_i) \end{aligned} p(yi=1xi)p(yi=0xi)=f(xi)=1f(xi)

合并到一起,则对样本 x i x_i xi 的似然可以写作:

p ( y i ∣ x i ) = ( f ( x i ) ) y i ( 1 − f ( x i ) ) 1 − y i p(y_i|x_i)=(f(x_i))^{y_i}(1-f(x_i))^{1-y_i} p(yixi)=(f(xi))yi(1f(xi))1yi

假设数据样本之间互相独立,则在整个样本集上的似然函数可以写作:

L ( x , y ) = ∏ i = 1 N ( f ( x i ) ) y i ( 1 − f ( x i ) ) 1 − y i L(x,y)=\prod_{i=1}^N (f(x_i))^{y_i}(1-f(x_i))^{1-y_i} L(x,y)=i=1N(f(xi))yi(1f(xi))1yi

对上面的似然函数取对数,再加个负号,就变成了最小化负对数似然,即为交叉熵损失函数的形式:

N L L ( x , y ) = J C E = − ∑ i = 1 N ( y i l o g ( f ( x i ) ) + ( 1 − y i ) l o g ( 1 − f ( x i ) ) ) NLL(x,y) = J_{CE} = -\sum_{i=1}^N (y_i log(f(x_i)) + (1-y_i)log(1-f(x_i))) NLL(x,y)=JCE=i=1N(yilog(f(xi))+(1yi)log(1f(xi)))

(2)从 KL 散度来分析交叉熵损失

对一个样本 x i x_i xi,假设存在一个最优的分布 y i ∗ y_i^* yi 可以真实的表示样本 x i x_i xi 属于各个类别的概率,那么,我们总是希望模型的输出 f ( x i ) f(x_i) f(xi) 可以尽可能地逼近这个最优分布。

在信息论中,我们常用 KL 散度来衡量两个分布之间的相似性。

KL 散度(Kullback–Leibler Divergence) 又称相对熵(Relative Entropy),两个分布 P P P Q Q Q 的 KL 散度记为 K L ( P ∥ Q ) KL(P\| Q) KL(PQ),计算公式为: K L ( P ∥ Q ) = E x ∼ P ( x ) [ log ⁡ P ( x ) Q ( x ) ] = ∑ i = 1 n [ P ( x i ) log ⁡ P ( x i ) Q ( x i ) ] KL(P\| Q)=E_{x\sim P(x)}[\log\frac{P(x)}{Q(x)}]=\sum_{i=1}^n [P(x_i) \log\frac{P(x_i)}{Q(x_i)}] KL(PQ)=ExP(x)[logQ(x)P(x)]=i=1n[P(xi)logQ(xi)P(xi)]

在我们这个分类问题中,共有 K K K 个类别,则对两个分布 P P P Q Q Q ,它们的 KL 散度可以写作:

K L ( P ∥ Q ) = ∑ k = 1 K P k log ⁡ ( P k ) − ∑ k = 1 K P k log ⁡ ( Q k ) KL(P\| Q)=\sum_{k=1}^K P^k \log(P^k) - \sum_{k=1}^K P^k \log(Q^k) KL(PQ)=k=1KPklog(Pk)k=1KPklog(Qk)

其中,式子的第一项为分布 P P P 的信息熵,第二项为分布 P P P Q Q Q 的交叉熵。

令最优分布 y i ∗ y_i^* yi 和输出分布 f ( x i ) f(x_i) f(xi) 分别为分布 P P P Q Q Q 并代入,得到:

K L ( y i ∗ ∥ f ( x i ) ) = ∑ k = 1 K y i ∗ k log ⁡ ( P k ) − ∑ k = 1 K y i ∗ k log ⁡ ( f ( x i ) k ) KL(y_i^* \| f(x_i))=\sum_{k=1}^K y_i^{*k} \log(P^k) - \sum_{k=1}^K y_i^{*k} \log(f(x_i)^k) KL(yif(xi))=k=1Kyiklog(Pk)k=1Kyiklog(f(xi)k)

我们希望最优分布 y i ∗ y_i^* yi 和输出分布 f ( x i ) f(x_i) f(xi) 尽可能地相似,即它们的 KL 散度最小。其中第一项的信息熵仅与最优分布 y i ∗ y_i^* yi 有关,因此在求最小值时可以忽略,简化后的最小化目标函数即为:

− ∑ k = 1 K y i ∗ k log ⁡ ( f ( x i ) k ) - \sum_{k=1}^K y_i^{*k} \log(f(x_i)^k) k=1Kyiklog(f(xi)k)

由于最优分布 y i ∗ y_i^* yi 未知,我们可以将训练样本中的真实类别信息 y i y_i yi 看作是 y i ∗ y_i^* yi 的一个近似分布,则单个样本的最小化目标函数就可以写作:

L ( x i ) = − ∑ k = 1 K y i k log ⁡ ( f ( x i ) k ) L(x_i)=- \sum_{k=1}^K y_i^{k} \log(f(x_i)^k) L(xi)=k=1Kyiklog(f(xi)k)

考虑整个数据集,则损失函数可以写作:

J K L = ∑ i = 1 N L ( x i ) = − ∑ i = 1 N ∑ k = 1 K y i k log ⁡ ( f ( x i ) k ) = − ∑ i = 1 N y i c i log ⁡ ( f ( x i ) c i ) \begin{aligned} J_{KL} &= \sum_{i=1}^N L(x_i) \\ &= - \sum_{i=1}^N \sum_{k=1}^K y_i^{k} \log(f(x_i)^k) \\ &= - \sum_{i=1}^N y_i^{c_i} \log (f(x_i)^{c_i}) \end{aligned} JKL=i=1NL(xi)=i=1Nk=1Kyiklog(f(xi)k)=i=1Nyicilog(f(xi)ci)

因此,最小化 KL 散度得到的目标函数与交叉熵损失是一致的。

2.2 合页损失(Hinge Loss)

合页损失是一种二分类损失函数,适合于基于最大间隔的分类算法,如 SVM。

合页损失的标准公式为:

J h i n g e = ∑ i = 1 N m a x ( 0 , 1 − y i f ( x i ) ) , y i = ± 1 J_{hinge}=\sum_{i=1}^N max(0, 1 - y_i f(x_i)), y_i = \pm 1 Jhinge=i=1Nmax(0,1yif(xi)),yi=±1

2.2.1 Hinge 损失与 SVM

Hinge损失函数和 SVM 是息息相关的。

根据 支持向量机(Support Vector Machine, SVM),在线性分类中,带有松弛变量的 SVM 算法在 Hinge 损失下的目标函数为:

min ⁡ w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 m m a x ( 0 , 1 − y i ( w T x i + b ) ) \min_{{\bf w},b} \frac{1}{2}{\|{\bf w}\|^2}+C\sum_{i=1}^m max(0, 1-y_i({\bf w}^T{\bf x}_i+b) ) w,bmin21w2+Ci=1mmax(0,1yi(wTxi+b))

该式中,第一项为正则项,第二项即为 Hinge 损失。

2.2.2 求解

合页损失在 y f ( x ) = 1 y f(x)=1 yf(x)=1 处不可导,因此不能用梯度下降法求解,一般采用 次梯度下降法(Subgradient Descent Method)。

2.3 对数损失函数(Logarithmic loss)

Log 对数损失函数的标准形式为:

L ( Y , P ( Y ∣ X ) ) = − log ⁡ P ( Y ∣ X ) L(Y,P(Y|X))=-\log P(Y|X) L(Y,P(YX))=logP(YX)

假设各个样本都是独立同分布的,有:

J l o g = − log ⁡ P ( Y ∣ X ) = − log ⁡ ∏ i P ( y i ∣ x i ) = − ∑ i log ⁡ P ( y i ∣ x i ) J_{log}=-\log P(Y|X)= - \log \prod_{i} P(y_i|x_i) = -\sum_{i} \log P(y_i|x_i) Jlog=logP(YX)=logiP(yixi)=ilogP(yixi)

分析

(1)Log 对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。

(2)相比于 Hinge loss,Log 损失对噪声更敏感。

(3)逻辑回归的损失函数就是log对数损失函数。

2.4 0-1损失

0-1 损失是一种二分类的损失函数,它的思想非常简单,若 x i x_i xi 预测的类别标签相同,则损失为 0,否则为 1,因此,即对 x i x_i xi 的损失为:

L 0 − 1 ( x i , y i ) = { 1 f ( x i ) ≠ y i 0 f ( x i ) = y i L_{0-1}(x_i,y_i) = \begin{cases} 1 & f(x_i) \neq y_i\\ 0 & f(x_i) = y_i \end{cases} L01(xi,yi)={10f(xi)=yif(xi)=yi

因此,对所有样本的损失函数为:

J 0 − 1 = ∑ i = 1 N L 0 − 1 ( x i , y i ) J_{0-1} = \sum_{i=1}^N L_{0-1}(x_i,y_i) J01=i=1NL01(xi,yi)

分析

0-1损失虽然非常简单、直观,但由于其非凸、非光滑的特点,使得算法很难对该函数进行优化。

交叉熵损失 与 合页损失 都是 0-1损失相对紧的凸上界,因此都可以作为 0-1 损失的代理函数。

最新回复(0)