损失函数

1、什么是损失函数;

2、常用的损失函数及其特点;

3、绝对值与平方损失函数对比;

4、交叉熵损失和平方损失对比;

 

1、什么是损失函数;

损失函数(Loss Function)是用来评估模型好坏程度,即预测值f(x)与真实值的不一致程度;

损失函数衡量单个样本预测值与真实值的误差;

代价函数(Cost Function)是整个样本集的平均误差,对所有损失函数值的平均;

目标函数(Object Function)最终要优化的函数,也就是代价函数+正则化函数(经验风险+结构风险);

2、常用的损失函数及其特点;

  1. 0-1损失函数(0-1 Loss Function)主要用于感知机
  2. 平方损失函数(Quadratic Loss Function)主要用于最小二乘法(OLS)
  3. 绝对值损失函数(Absolute Loss Function)
  4. Huber Loss Function
  5. 对数损失函数(Logarithmic Loss Function,Cross Entropy Loss Function, Softmax Loss Loss Function)主要用于Logistic回归与Softmax分类
  6. 指数损失函数(Exponential Loss Function)主要用于Adaboost集成学习算法
  7. 铰链损失函数(Hinge Loss Function)主要用于支持向量机(SVM)

2.1 0-1损失函数(0-1 Loss Function)

 

 

可放宽至$\left | y-f(x) \right |<\delta $

当预测错误时,损失函数结果为1;当预测正确时,损失函数为0。该预测并不考虑具体的误差程度,直接进行二值化。

非凸,非光滑,可用于分类和回归;

优点:稳定的分类面,不连续,所以不可导,但是次梯度可导;

缺点:二阶不可导,有时候不存在唯一解;

2.2 平方损失函数(Quadratic Loss Function)

 

预测值与实际值的差的平方。

常用于回归,可用于梯度下降法;

优点:容易优化(一阶导数连续);

缺点:对异常点敏感,得不到最优的分类面;

2.3 绝对值损失函数(Absolute Loss Function)

分类时相当于0-1损失,常用于回归;

与平方损失函数类似,去实际值与测试值的差值的绝对值,但是不会被放大。

2.4 Huber Loss Function

相比平方误差损失,Huber损失对于数据中异常值的敏感性要差一些。在值为0时,它也是可微分的。它基本上是绝对值,在误差很小时会变为平方值。误差使其平方值的大小如何取决于一个超参数δ,该参数可以调整。当δ~ 0时,Huber损失会趋向于MAE;当δ~ ∞(很大的数字),Huber损失会趋向于MSE。
在这里插入图片描述
在这里插入图片描述
δ的选择非常关键,因为它决定了你如何看待异常值。残差大于δ,就用L1(它对很大的异常值敏感性较差)最小化,而残差小于δ,就用L2“适当地”最小化。

为何使用Huber损失函数?
使用MAE用于训练神经网络的一个大问题就是,它的梯度始终很大,这会导致使用梯度下降训练模型时,在结束时遗漏最小值。对于MSE,梯度会随着损失值接近其最小值逐渐减少,从而使其更准确。
在这些情况下,Huber损失函数真的会非常有帮助,因为它围绕的最小值会减小梯度。而且相比MSE,它对异常值更具鲁棒性。因此,它同时具备MSE和MAE这两种损失函数的优点。不过,Huber损失函数也存在一个问题,我们可能需要训练超参数δ,而且这个过程需要不断迭代;

2.5 对数损失函数(Logarithmic Loss Function)

当P(Y|X)分布在[0,1]时常用,就是说f(x)分布在[0,1]时常用;

多用于逻辑回归;

对数损失函数用到了极大似然估计的思想。P(Y|X)表示在当前模型上,样本X的预测值为Y的概率,也就是说对于样本X预测正确的概率。由于统计极大似然估计用到概率乘法,为了将其转为加法,对其取对数即可方便展开为加法;由于是损失函数,预测正确的概率应该与损失值成反比,这里对概率取反得到,转化一下可以得到。

优点:稳定的分类面,严格凸,且二阶导数连续。

2.6 指数损失函数(Exponential Loss Function)

学过Adaboost算法的人都知道,它是前向分步加法算法的特例,是一个加和模型,损失函数就是指数函数。在Adaboost中,经过m此迭代之后,可以得到fm(x):

Adaboost每次迭代时的目的是为了找到最小化下列式子时的参数α 和G:

而指数损失函数(exp-loss)的标准形式如下

可以看出,Adaboost的目标式子就是指数损失,在给定n个样本的情况下,Adaboost的损失函数为:

2.7铰链损失函数(Hinge Loss Function)

L(w, b)=max\begin{Bmatrix} 0,1-yf(x) \end{Bmatrix},其中y=\pm 1f(x)=wx+b

Hinge Loss function 一般在分类算法使用的分类函数,尤其使用于SVM。

优点:稳定的分类面,凸函数。可以极大化分类间隔。

在机器学习算法中,hinge损失函数和SVM是息息相关的。在线性支持向量机中,最优化问题可以等价于下列式子:

[]_{+}表示大于0时取该值,小于0时取0;

下面来对式子做个变形,令:

于是,原式就变成了:

如若取λ=1/(2C),式子就可以表示成:

可以看出,该式子与下式非常相似:

前半部分中的 就是hinge损失函数,而后面相当于L2正则项。

Hinge 损失函数的标准形式

3、绝对值损失函数与平方损失函数对比;

绝对值损失函数平方损失函数
 更易受异常值影响,因为对误差有个平方的扩大
梯度始终相同梯度随损失函数的下降而减小,估计更准确

而Huber 结合了绝对值损失函数与平方损失函数,其中detal取决于对异常值的定义,但detal训练;

 4、激活函数为sigmoid时,使用交叉熵损失和平方损失对比;

优点:

Sigmoid的取值范围在(0, 1),而且是单调递增,比较容易优化

Sigmoid求导比较容易,可以直接推导得出。

缺点:

Sigmoid函数收敛比较缓慢
由于Sigmoid是软饱和,容易产生梯度消失,对于深度网络训练不太适合(从图上sigmoid的导数可以看出当x趋于无穷大的时候,也会使导数趋于0)
Sigmoid函数并不是以(0,0)为中心点

当使用交叉熵时,我们输出层δL的梯度情况。

对比一下均方差损失函数时在δL梯度

使用交叉熵,得到的的δl梯度表达式没有了σ′(z),梯度为预测值和真实值的差距,这样求得的Wl,bl的梯度也不包含σ′(z),因此避免了反向传播收敛速度慢的问题。通常情况下,如果我们使用了sigmoid激活函数,交叉熵损失函数肯定比均方差损失函数好用。

 

左图为交叉熵损失曲线,右图为最小二乘法损失曲线;

  1. 神经网络中如果预测值与实际值的误差越大,那么在反向传播训练的过程中,各种参数调整的幅度就要更大,从而使训练更快收敛,如果预测值与实际值的误差小,各种参数调整的幅度就要小,从而减少震荡。
  2. 使用平方误差损失函数,误差增大参数的梯度会增大,但是当误差很大时,参数的梯度就会又减小了。
  3. 使用交叉熵损失是函数,误差越大参数的梯度也越大,能够快速收敛

 

 

逻辑回归+平方误差损失函数是非凸的,并不是sigmoid+平方损失函数是非凸的;

大部分深度学习的损失函数问题是非凸的;

如果使用sigmoid激活函数,则交叉熵损失函数一般肯定比均方差损失函数好;

如果是DNN用于分类,则一般在输出层使用softmax激活函数和对数似然损失函数;

softmax loss实际上是由softmax和cross-entropy loss组合而成

转载于:https://www.cnblogs.com/danniX/p/11295986.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值