浅谈损失函数
Frozen_Ladybug · · 算法·理论
注:本文部分来源于之前的笔记,在此之上加以自己的理解,供参考,有不同意见欢迎评论区交流。
\text{Part I.} 损失函数的概念和作用
损失函数是用来估量模型的预测值
损失函数越小,模型的性能越好。损失函数是经验风险函数的核心部分,也是结构风险函数的重要组成部分。
模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子:
下面解释一下这个表达式中各个参量的意义。
\text{Part II.} 常用损失函数
-
$L_1$ 是最小绝对值偏差,它把目标值与预测值的绝对值差的总和最小化。 $$L_1=\displaystyle\sum^n_{i=1}|Y_i-f(x_i)|$$ $L_2$ 是最小平方误差,它把目标值与预测值的差值的平方和最小化。 $$L_2=\displaystyle\sum^n_{i=1}(Y_i-f(x_i))^2$$ $L_2$ 损失函数对异常点比较敏感,因为 $L_2$ 将误差平方化,使得异常点的误差过大,模型需要大幅度的调整,这样会牺牲很多正常的样本。 而 $L_1$ 损失函数由于导数不连续,可能存在多个解,当数据集存在一个微小的变化时,解可能存在一个很大的跳动,$L_1$ 的解不稳定。 $L_2$ 损失函数曲线呈现单调性,它越大梯度越大,便于反向传播时的快速优化,因而常使用交叉熵损失函数。 -
交叉熵损失函数
交叉熵损失函数是两个概率分布之间的距离。交叉熵描述的是通过概率分布
q 来表达概率分布p 的困难程度。其中
p 为真实分布,q 为预测分布,交叉熵越小,两个概率分布越近。H(p,q)=-\sum p(x)\log q(x) C=-\dfrac{1}{n}\displaystyle\sum_x(y\ln a+(1-y)\ln(1-a))r 公式中
x 表示样本,y 表示实际的标签,a 表示预测的输出,n 表示样本总数量。二分类中:
L=-\dfrac{1}{n}\displaystyle\sum_x(y\ln a+(1-y)\ln(1-a)) 多分类中:
L=-\dfrac{1}{n}\displaystyle\sum_i y_i\ln a_i -
$$L(y,f(x))=\begin{cases} 1&\text{if } y=f(x)\\ 0&\text{if }y\neq f(x) \end{cases}$$ 仅当预测为真时取 $1$,其余为 $0$。$0-1$ 损失非凸非光滑,使得算法很难直接对函数进行优化。 -
Logistic Loss
是 0-1 损失的代理损失函数,函数处处光滑,和交叉熵的二分类一样。
H(p,q)=-\displaystyle\sum_x p(x)\log q(x)=\displaystyle\sum_y-(y\log\hat y-(1-y)\log(1-\hat y)) 但这种损失函数有一个问题,其健壮性不强,对噪声更敏感。 逻辑回归的损失函数就是 $\log$ 对数损失函数。 -
Hinge 损失函数
L(y,f(x))=\max(0,1-yf(x)) Hinge 损失函数是
0-1 损失的一个代理损失函数,当yf(x) 大于1,不做任何惩罚。其在
yf(x)=1 处不可导,不能用梯度下降法进行优化,而是用次梯度下降法。通常支持向量机使用 Hinge 损失函数:加入松弛变量的软间隔的支持向量机采用 Hinge 损失函数依然可以保持稀疏性,即软间隔的支持向量机的模型还是和支持向量有关。
-
感知损失函数
L(y,f(x))=\max(0,-f(x)) 是 Hinge 损失函数的一个变种,Hinge 函数对判定边界附近的点(正确端)惩罚力度很高。
而感知损失函数只要样本的判定类别正确的话,它就满意,不管其判定边界的距离。
它比 Hinge 函数简单,因为不是 max-margin boundary,所以模型的泛化能力没 Hinge 函数强。
-
指数损失函数
L(y,f(x))=e^{-yf(x)} 指数损失函数经过推导以后,分类误差率和定义是一样的。
-
Smooth
L_1 损失函数在目标检测任务中,在 reg 坐标中用到 Smooth
L_1 损失函数:L_{\operatorname{loc}}(t^u,v)=\displaystyle\sum_{i\in\{x,y,w,h\}}\operatorname{smooth}_{L_1}(t_i^u-v_i) 其中:
0.5x^2&\text{if }|x|<1\\ |x-0.5|&\text{otherwise} \end{cases} Smooth
L_1 损失函数可以让离群点不那么重要,相比于L_1 损失函数,其对离群点、异常值不敏感,可以控制梯度的量级使训练不容易跑飞。另外,Smooth
L_1 在零点处变得可导,函数更加的平滑。
\text{Part III.} 常见优化方式
不止这些,这里列出三种最常用的方法。
-
随机梯度下降法(SGD)
基本原理:SGD 每次迭代只使用一个或几个样本来计算损失函数的梯度,并更新模型参数。
优点:计算效率高,适用于大规模数据集。
缺点:容易陷入局部最优解,且收敛速度可能较慢。
-
动量法(Momentum)
基本原理:在 SGD 的基础上引入动量项,通过积累之前的梯度来加速收敛过程。
优点:可以加快收敛速度,并有助于跳出局部最优解,类似惯性一样。
缺点:需要额外存储动量信息,增加了内存开销。
-
自适应学习率方法以及优化
首先可以为每个参数分配独立学习率,自动调整学习步伐。(但可能会因为累积过大而导致学习率过早地变得极小,这时候就要调整系数)
其次引入衰减系数避免过重的惩罚。我的想法是用指数衰减形式(
e^{x_0-x} )或特定情况(如错误点)有所惩罚。这样能有效处理非稳态目标函数,自动调整学习率可以让模型更适用于大规模数据和参数场景。
对于梯度下降,算法的自适应公式可以表示为:
其中
在一般拟合情景下,步长