1、什么是损失函数;
2、常用的损失函数及其特点;
3、绝对值与平方损失函数对比;
4、交叉熵损失和平方损失对比;
1、什么是损失函数;
损失函数(Loss Function)是用来评估模型好坏程度,即预测值f(x)与真实值的不一致程度;
损失函数衡量单个样本预测值与真实值的误差;
代价函数(Cost Function)是整个样本集的平均误差,对所有损失函数值的平均;
目标函数(Object Function)最终要优化的函数,也就是代价函数+正则化函数(经验风险+结构风险);
2、常用的损失函数及其特点;
- 0-1损失函数(0-1 Loss Function)主要用于感知机
- 平方损失函数(Quadratic Loss Function)主要用于最小二乘法(OLS)
- 绝对值损失函数(Absolute Loss Function)
- Huber Loss Function
- 对数损失函数(Logarithmic Loss Function,Cross Entropy Loss Function, Softmax Loss Loss Function)主要用于Logistic回归与Softmax分类
- 指数损失函数(Exponential Loss Function)主要用于Adaboost集成学习算法
- 铰链损失函数(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)
,其中
,
Hinge Loss function 一般在分类算法使用的分类函数,尤其使用于SVM。
优点:稳定的分类面,凸函数。可以极大化分类间隔。
在机器学习算法中,hinge损失函数和SVM是息息相关的。在线性支持向量机中,最优化问题可以等价于下列式子:

[]_{+}表示大于0时取该值,小于0时取0;
下面来对式子做个变形,令:

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

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

前半部分中的 l 就是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激活函数,交叉熵损失函数肯定比均方差损失函数好用。


左图为交叉熵损失曲线,右图为最小二乘法损失曲线;
- 神经网络中如果预测值与实际值的误差越大,那么在反向传播训练的过程中,各种参数调整的幅度就要更大,从而使训练更快收敛,如果预测值与实际值的误差小,各种参数调整的幅度就要小,从而减少震荡。
- 使用平方误差损失函数,误差增大参数的梯度会增大,但是当误差很大时,参数的梯度就会又减小了。
- 使用交叉熵损失是函数,误差越大参数的梯度也越大,能够快速收敛。
逻辑回归+平方误差损失函数是非凸的,并不是sigmoid+平方损失函数是非凸的;
大部分深度学习的损失函数问题是非凸的;
如果使用sigmoid激活函数,则交叉熵损失函数一般肯定比均方差损失函数好;
如果是DNN用于分类,则一般在输出层使用softmax激活函数和对数似然损失函数;
softmax loss实际上是由softmax和cross-entropy loss组合而成

2万+

被折叠的 条评论
为什么被折叠?



