『人脸识别系列教程』2·机器学习经典损失函数

原文出处:https://zhuanlan.zhihu.com/FaceRec

0-1损失(二分类)、交叉熵损失(分类)、Softmax Loss(多分类)、合页损失(SVM)、均方差(线性回归)、Modified Huber Loss(分类)、指数损失(Adaboost)

1 0-1 Loss

  • 一般来说,二分类机器学习模型包含两个部分:线性输出一般是s = wx;非线性输出比如是Sigmoid函数

,经过 Sigmoid 函数,g(s) 值被限定在 [0,1] 之间,若 s ≥ 0,g(s) ≥ 0.5,则预测为正类;若 s < 0,g(s) < 0.5,则预测为负类。

  • 表示正负类有两种方式: {+1, -1} 或 {1, 0} 。使用 y={+1, -1}时,若 ys ≥ 0,则预测正确,若 ys < 0,则预测错误。ys 的符号反映了预测的准确性和预测的置信程度。预测类别与真实类别的四种情况:

  • s ≥ 0, y = +1: 预测正确

  • s ≥ 0, y = -1: 预测错误

  • s < 0, y = +1: 预测错误

  • s < 0, y = -1: 预测正确

  • 0-1 Loss 是最简单的一种损失函数。对于二分类问题,如果预测类别 y^与真实类别 y 不同,则 L=1;如果 y_^= y ,则 L=0。

  • L 表示损失函数,横坐标为ys,下图为loss曲线:

  • 优点:非常直观容易理解

  • 缺点:实际应用中原始Loss 很少使用。

  • Loss 对每个错分类点都施以相同的惩罚(损失为 1),同等看待,这样对犯错比较大的点(ys 远小于 0)无法进行较大的惩罚,这不符合常理。

  • 不连续、非凸、不可导,难以使用梯度优化算法。

2 交叉熵损失 (Cross Entropy Loss)

  • 用于Logistic 回归与Softmax 分类,要与Sigmoid(二分类)或Softmax(多分类)联合使用。逻辑回归就是分类问题

  • 从Shannon信息论角度推导交叉熵:

  • 信息量:I(x)=−log( p(x) ),一个事件发生的概率越大,则它的信息量就越小。

  • 熵:对于一个随机变量X而言,它的所有可能取值的信息量的期望E[I(x)]就称为熵。

  • 期望:离散型随机变量的一切可能的取值xi与对应的概率p(xi)乘积之和称为期望E(x) 。它是简单算术平均的一种推广,类似加权平均。

  • 相对熵 (relative entropy):又称为KL散度、KL距离,是两个随机分布间距离的度量,D(p||q)。它可以度量当真实分布为p时,假设分布q的无效性。

  • 机器学习的目的就是希望计算得到的概率分布q尽可能地逼近真实概率分布p,从而使得相对熵接近最小值0。

  • 交叉熵:相对熵公式的后半部分就是交叉熵,也反映了分布p q的相似程度,值越小越相似。

  • 由于真实的概率分布是固定的,相对熵公式的前半部分就成了一个常数,那么相对熵达到最小值的时候,也意味着交叉熵达到了最小值。对q的优化就等效于求交叉熵的最小值。

  • 二分类的逻辑回归交叉熵损失函数:二分类时y^用Sigmoid,输出标签为{0,1}时如下式,当y=1但y^不为1时误差随着y^变小而变大:

  • 而多分类时y^用Softmax,L=-yi*log(yi^),i是真实类别

  • 从极大似然性的角度推导:对交叉熵求最小值,也等效于求最大似然估计。输出标签为{0,1}时预测类别的概率P可以写成,引入-log使概率 P(y|x) 越大-log P(y|x) 越小:

  • 当真实样本标签 y = 1 时忽略第二项; y = 0 时忽略第一项。

  • Loss曲线,当输出标签y用{1,0}表示时:

  • 当y=1时 L=-log(y^),将sigmoid的y^=1/(1+e^-s)代入,得到Loss曲线,线性输出s 越大于零,L 越小,左图,横坐标是s

  • 当y=0时 L=-log(1-y^),s 越小于零,L 越小,右图

  • 当输出标签y用{-1,+1}表示时:交叉熵loss是一样的,只是表示方式不同,用ys替换上面的s。把ys整合作为横坐标,容易作图且具有实际的物理意义。

  • 优点:是使用最广泛的损失函数之一

  • 在整个实数域内,Loss 近似线性变化,尤其是当 ys << 0 的时候,Loss 更近似线性。错误越大惩罚越大

  • 交叉熵 Loss 连续可导,便于求导计算

  • 模型受异常点的干扰就较小

参考: 参考1 交叉熵损失函数公式推导

3 Softmax Loss

  • 多用于神经网络多分类问题

概念区分

  • Softmax回归:逻辑回归的一般形式,将logistic激活函数推广到了C个类别,C=2的Softmax回归就是逻辑回归。

  • Softmax分类器:是多类别的分类器。没有隐藏层的神经网络任何两个分类之间的决策边界都是线性的,但可以用多个不同的线性函数来分成多类(多个神经单元)。网络越深就可以学到更复杂的非线性决策边界。

  • Softmax层:在神经网络的最后一层输出层,有几个类别就设几个单元,算出各单元线性预测值z后,用Softmax激活函数算出各概率。

  • 图像分类的主干网络AlexNet/VGG/ResNet/MobileNet等预测模型的最后一层都是"Softmax",训练和验证模型的最后一层都是"Accuracy"+"SoftmaxWithLoss"。因为图像分类只需要对深度特征进行分离即可。

  • Softmax函数(激活函数):将z映射为概率的公式如下,它同时需要一个向量z_i,因为要结合所有输出归一化成概率,输出也是向量。它通常用在输出层上。

  • Sigmoid和ReLu激活函数都是只处理一个实数z,输出也是一个实数。二分类时的输出层用Sigmoid函数,隐藏层用ReLu函数。

  • Softmax-Loss(Softmax损失函数):带有Softmax输出层的神经网络的损失函数,Softmax分类器的损失函数,Softmax激活函数的计算结果作为Softmax分类器损失函数的输入。

  • Hardmax:将z中最大元素置1,其他位置都是0。而Softmax从z到概率的映射更温和,是具体概率值。

Softmax激活函数,求多类别概率

  • 在逻辑回归中的作用是将线性预测值转化为类别概率,Softmax函数定义如下:

  • 经典的深度神经网络顶层其实本来也就是一个逻辑回归分类器

  • 设zi=wx+b是第i个类别的线性预测结果,带入Softmax其实就是先对每一个zi取指数变成非负(避免相加时正负值相抵),然后除以所有项之和来进行归一化变成0~1间的各类别概率。现在每个oi=σi(z)就可以解释成数据 x 属于多个类别 i 的概率(m个类别,一个数据x有很多个特征x0,x1,x2...),或称似然 (Likelihood)。

  • 注意:逻辑回归中zi经过sigmoid激活函数,转换成了0~1间的概率值,计算数据x属于这个正确类y=1的概率。

Softmax分类器用的损失函数(交叉熵损失), Multinomial Logistic Loss

  • 逻辑回归的目标函数(代价函数,损失函数)是根据最大似然原则来建立的,假设数据x所对应的类别为y,o_y就是由Softmax函数算来的x属于正确类别y的概率。最大似然就是要最大化o_y,通常使用 negative log-likelihood 而不是 likelihood,也就是说最小化 -log(o_y) 的值,这两者结果在数学上等价。所以最小化代价函数就是最小化:

  • 在Softmax分类中一般用的损失函数是:(吴恩达解释)

  • 正确样本y2=1,其他样本都是0就舍弃了(公式是交叉熵损失函数)

  • 最小化损失函数,就是最大似然,就是最大化-log(o_y),就是最大化o_y。(o_y就是y2^)

  • 整个训练集的损失 J,是所有损失的和的平均值,前面的是单个训练样本的损失。这个的损失函数展开就是各网络层各单元的参数w b的代数式,求梯度时也是对它们求梯度。梯度下降时要求出损失函数对所有层所有单元中权重的梯度,同时更新所有的权重。

Softmax-Loss

  • Softmax-Loss就是将Softmax激活函数代入了上面的损失函数L,且参与的是实际类别的Softmax激活值s_yi和所有类别Softmax激活值的和s_j。下图是cs231n中的表示(R是正则项,惩罚W来减轻复杂度):

  • Softmax-Loss实际上是由softmax函数和交叉熵损失函数(Cross Entropy Loss)组合而成。

  • Softmax激活函数和Multinomial Logistic Loss是可以合并成一个Softmax-loss层,也可以是分开的,分开后更灵活一点,但有数值稳定性的问题,计算量也变大。

  • Loss曲线:当 s << 0 时,Softmax 近似线性;当 s>>0 时,Softmax 趋向于零。

  • 优点:Softmax 同样受异常点的干扰较小

weighted softmax loss(加权softmax)

  • 假如我们是一个分类问题,只有两类,但是两类的样本数目差距非常之大。比如边缘检测问题,边缘像素的重要性是比非边缘像素大的,此时可以针对性的对样本进行加权。

  • wc就是这个权重,c=0代表边缘像素,c=1代表非边缘像素,则我们可以令w0=1,w1=0.001,即加大边缘像素的权重。当然也可以自适应权重。

参考: Softmax与Softmax-Loss AI之路

4 合页损失 (Hinge Loss)

  • Hinge Loss 一般多用于支持向量机SVM(大间距分类器)中,体现了 SVM 距离最大化的思想。

  • 优点:当 Loss>0时是线性函数,便于梯度下降算法求导。

Hinge loss用于二分类

  • 以SVM的线性输出模型为例y^=s=wx,L 为下列公式,loss曲线以ys=y*y^为横轴

  • 若y*y^<1,则损失为 1-y*y^ 大于零,分类错误

  • 输出标签y=-1时,-1<y^<0,y=1时,0<y^<1,此范围loss都不等于0

  • 若y*y^>=1,则损失为 0,分类正确

  • 输出标签y=-1时,y^<=-1,y=1时,y^>=1,此范围loss都等于0

Hinge loss用于最大间距

  • 代表正负样本得分的间距:

  • y'>y+m时,loss=0,即正样本的预测值大于负样本的预测值加间距

  • y是正样本的得分,y' 是负样本的得分,m是两者间距。

  • 希望正样本分数越高越好,负样本分数越低越好,但二者得分之差最多到m就足够了,差距增大并不会有任何奖励。

  • cs231n中的表示:

5 均方差 (MSE, mean squared error)

  • 用于线性回归问题,属于最小二乘法(OLS)

  • 最小二乘的基本原则是:最优拟合直线应该是使各点到回归直线的距离和最小的直线,即平方和最小。

  • 用均方差(MSE)作为一项衡量指标:

  • 线性回归为什么不能用交叉熵?交叉熵公式对于线性回归问题,任意取一个值比如 -1.5,就没法计算 log(-1.5),所以一般不用交叉熵来优化回归问题。

  • 分类问题为什么不能用MSE?分类问题需要用 one hot 的形式计算各 label 的概率,然后用 argmax 来决定分类,计算概率的时候通常用 softmax。用 MSE 计算 loss 的问题在于,通过 Softmax 输出的曲线是波动的,有很多局部的极值点,非凸优化问题。而 cross entropy 计算 loss,则依旧是一个凸优化问题,可用梯度下降求解。

参考: 方差、MSE等公式 为什么分类问题用 cross entropy,而回归问题用 MSE

6 Modified Huber Loss

  • scikit-learn 中的 SGDClassifier 就使用了它。

  • Huber Loss 也能应用于分类问题中,称为 Modified Huber Loss:

  • Loss曲线:Modified Huber Loss 结合了 MSE、Hinge Loss 和 交叉熵 Loss 的优点。

  • 优点:一方面能在 ys > 1 时产生稀疏解提高训练效率;另一方面对于 ys < −1 样本的惩罚以线性增加,这意味着受异常点的干扰较少。

7 指数损失 (Exponential Loss)

  • 多用于AdaBoost 中

  • 指数损失:

  • Exponential Loss 与交叉熵 Loss 类似,但它是指数下降的,梯度更大。

  • 缺点:受异常点的干扰较大

比较各loss对异常点的容忍性

  • 绘制5种Loss,左图 ys 的取值范围是 [-2,+2],右图范围[-5,+5]:

  • Exponential Loss 远远大于其它 Loss。从训练的角度来看,如果样本中存在离群点,Exponential Loss 会给离群点赋予更高的惩罚权重,但却可能是以牺牲其他正常数据点的预测效果为代价,降低模型的整体性能

  • 相比 Exponential Loss,其它四个 Loss,包括 Softmax Loss,都对离群点有较好的“容忍性”,受异常点的干扰较小,模型较为健壮。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值