【机器学习基础】常见损失函数总结
在机器学习三步⾛中,其中最重要的就是第⼆步到⽤于衡量模型好坏的⽅法,也就是损失函数,通过求解最⼩化损失,从⽽求得模型的参数。前⾯分别对线性回归、LR以及实战部分的SVM、决策树以及集成学习算法进⾏了概述,其中都⽤到了不同的损失函数,今天在这⾥对机器学习中常见的损失函数进⾏⼀个总结。
常见损失函数总结
  上⾯说到,损失函数的选择对于模型训练起到了⾄关重要的作⽤,在不同的算法中往往有着不同的损失函数。
  甚⾄有时可能需要根据具体应⽤场景⾃定义损失函数,⽐如预测某个商品的销量,预测结果将直接影响利润,如多预测⼀个少赚1元,⽽少预测⼀个少赚10元,那么此时⽤均⽅误差损失函数就不太恰当。
  这⾥暂时不说⾃定义的损失函数,主要是对机器学习中⼀些常见的损失函数进⾏⼀个总结。
  均⽅误差损失函数是回归问题中(包括神经⽹络中也可以使⽤,但)最常见的损失函数,⽤于衡量样本真实值与预测值之间的差距,损失函数公式在线性回归中已经给出,这⾥再看下:
  通过最⼩化损失函数,求得w,b即为模型的参数。前⾯说到求解⽅法有解析解即最⼩⼆乘法,以及梯度下降的⽅法,这⾥就不再赘述。
  均⽅根误差损失就是均⽅误差损失函数的平⽅根,公式如下:
  均⽅根误差损失与均⽅误差损失函数在效果上是⼀样的,只不过如果对于均⽅误差数量级过⼤时,可以通过开⽅更好地描述数据,⽐较好理解。
  公式如下,跟均⽅误差损失差不多,也不再解释了
  对数损失也称为对数似然损失,前⾯关于LR的推导过程中,当给定x,其属于y的概率表⽰为:
  期望对所有的样本都能够正确分类,则有:
  然后对L两边取对数,注意这⾥是最⼤化。那么带⼊上式,然后两边再取负号,就变成最⼩化了,最终得到对数损失函数的形式为:
正则化损失函数  这⾥还要说⼀下,其实对数损失函数还有另外⼀种形式,在GBDT中利⽤GBDT处理分类问题时提到过,注意上⾯的类别取值为{0,1},我们只需将取值设为{-1,1},就可得到如下形式的对数损失函数:
  交叉熵损失和对数损失其实是⼀样的(很多资料中有提到),⼆者的表达式在本质上是⼀致的。在逻辑回归中说到,LR的损失函数就是交叉熵损失函数,不过是⼀种⼆值(⼆分类)的交叉熵损失。
  稍后会给出交叉熵损失的公式,这⾥既然提到了交叉熵,就顺便说⼀下交叉熵的概念。参考:
  交叉熵来源于信息论,是信息论中⼀个重要概念,交叉熵是⽤来衡量两个概率分布之间的差异程度。值越⼩,差异越⼩,两个分布就越相似。
  先来看⼀下⼏个交叉熵的⼏个前置理论概念。
  (1)信息量
  信息量是⽤来消除信息不确定的概念,⽤于衡量信息所含信息量⼤⼩的⼀个东西,⽐如“太阳从东边升起”这句话,由于太阳本⾝就是从东边升起的,这句话的不确定为0,相当于⼀句废话。
  因此,信息量是与事件的概率成反⽐的,公式为:
  (2)信息熵
  在决策树的开篇说到信息熵的概念,信息熵是信息量的期望值,⽽信息量与概率成反⽐,那么信息熵的公式如下:
  (3)KL散度(相对熵)
  相对熵(KL散度)是衡量两个概率分布之间的差异性的指标,假设同⼀随机变量的两个独⽴的分布P(x)和Q(x),那么相对熵(KL散度)的公式为:
  在机器学习中常常⽤P(x)表⽰样本真实的分布,Q(x)表⽰预测的分布,通过⽐较⼆者的分布,使其越接近越好。⽐如对于⼀个三分类,真实值y=[1,0,0],模型所预测的结为[0.7,0.2,0.1],那么KL散度计算为:
  KL散度越⼩,说明两个分布越接近。
  接下来我们将上述的KL散度公式进⾏展开:
  可以看出,前半部分即为信息熵,这个后半部分称为交叉熵,于是交叉熵的公式为:
  那么KL散度=交叉熵-信息熵。
  在机器学习中,由于P(x)是原本样本的真实标签,其分布是已知的,那么在KL散度中信息熵是确定的,因此只需后⼀项,即交叉熵来确定两个分布的差异程度就可以了。
  KL散度越⼩,两个分布就越接近,⼜因为KL散度等于交叉熵减去⼀个常量,因此,在机器学习中,只需要交叉熵来作为损失函数就可以了,只需要最⼩化交叉熵损失函数即可。
  综上,交叉熵损失函数的公式即为:
  根据上⾯举的那个例⼦,我们知道,交叉熵损失常⽤在多分类当中。
  因此对于对数损失是⼀种特殊的⼆分交叉熵损失的形式,交叉熵常⽤于多分类中,对数损失⽤于多分类也叫交叉熵损失
(cross_entropy),其实⼆者本质上是⼀样的,只不过所⽤的习惯不同。
  指数损失在后来添加AdaBoost推导部分的时候有提到,AdaBoost就是使⽤的指数损失,具体为什么AdaBoost要⽤指数损失,在李航《统计学习⽅法》8.3节中有详细证明,⽐较复杂,就不说了。
  指数损失公式如下:
  式中可以看出,当真实值y与预测值f(x)同号时,损失是⽐较⼩的,⽽当y与预测值f(x)异号时,则惩罚急剧增⼤,对误分类的惩罚增⼤,从⽽提升误分类样本的权重。
  因此指数损失对于噪声点的样本⽐较敏感,⼀旦分错,由于Boost⽅法属于串⾏的⽅式,因此会⼲扰后⾯的学习效果,这也是AdaBoost 的⼀个缺点。
  这个损失之前在SVM中也提到过,说当采⽤梯度下降的算法进⾏求解时需要定义出⼀个当样本被正确分类,且确定性较强时,损失为0,否则,损失就不为0。那么此时就需要⽤到Hinge Loss了,其图像为:
  可以看到,即样本标签y为{-1,1},预测值y'当其⼤于1或者⼩于-1时,损失函数为0,对于y'∈[-1,1]时,损失不为0。
  其公式为:
  y是真实值,y'是预测值
  在SVM中,当样本被确定正确分类,即预测结果⼤于1或者⼩于-1(注意这⾥并不是说只要⼤于1或者⼩于-1就⾏,⽽是要根据实际标签来说的)时,损失为0,就不再关⼼这些点了,⽽对于在[-1,1]之间的,或者分错的点会驱使“直线”进⾏移动,如图所⽰:
  上图所⽰,如果分割超平⾯误分类,则Hinge loss⼤于0。Hinge loss驱动分割超平⾯作出调整。如果分割超平⾯距离⽀持向量的距离⼩于1,则Hinge loss⼤于0,且就算分离超平⾯满⾜最⼤间隔,Hinge loss仍⼤于0。
  因此Hinge Loss的精髓在于,对于确定性强的点(被正确分类,且距离分隔超平⾯距离⼤于1)进⾏过
滤,⽽只关⼼那些误分类的和“⽀持向量”。
  在SVM的多分类中,同样也使⽤Hinge Loss作为损失函数,不过稍微有些改变:
  举个例⼦,加⼊有三张图⽚:猫、车和青蛙,通过SVM的输出值如下:
  那么根据上⾯多分类的Hinge Loss的计算⽅法:⾸先计算第⼀个样本的损失:
  然后依次求出第⼆个第三个样本的损失,进⾏求和并平均:
参考资料
  后⾯关于SVM这⼀部分在看完李宏毅⽼师从另⼀个⾓度的讲解后,以及structure SVM有关内容,后⾯会单独再开⼀⽚进⾏总结,这⾥就暂时不进⾏讨论了。
  下⾯图⽚来源于⽹络,不是很清晰,也算⼀个总结,后续如果遇到新的会再进⾏添加。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。