损失函数(loss function)

通常而言,损失函数由损失项(loss term)和正则项(regularization term)组成。发现一份不错的介绍资料:

http://www.ics.uci.edu/~dramanan/teaching/ics273a_winter08/lectures/lecture14.pdf (题名“Loss functions; a unifying view”)。
 
一、损失项
  • 对回归问题,常用的有:平方损失(for linear regression),绝对值损失;
  • 对分类问题,常用的有:hinge loss(for soft margin SVM),log loss(for logistic regression)。
 
说明:
  • 对hinge loss,又可以细分出hinge loss(或简称L1 loss)和squared hinge loss(或简称L2 loss)。国立台湾大学的Chih-Jen Lin老师发布的Liblinear就实现了这2种hinge loss。L1 loss和L2 loss与下面的regularization是不同的,注意区分开。
二、正则项
  • 常用的有L1-regularization和L2-regularization。上面列的那个资料对此还有详细的总结。

 

补充

 

## 机器学习中常见的损失函数  

  一般来说,我们在进行机器学习任务时,使用的每一个算法都有一个目标函数,算法便是对这个目标函数进行优化,特别是在分类或者回归任务中,便是使用损失函数(Loss Function)作为其目标函数,又称为代价函数(Cost Function)。   

损失函数是用来评价模型的预测值Y^=f(X)与真实值Y的不一致程度,它是一个非负实值函数。通常使用L(Y,f(x))来表示,损失函数越小,模型的性能就越好。   

设总有N个样本的样本集为(X,Y)=(xi,yi)yi,i[1,N]为样本i的真实值,yi^=f(xi),i[1,N]为样本i的预测值,f为分类或者回归函数。 那么总的损失函数为:

       L=i=1N(yi,yi^)

   常见的损失函数(yi,yi^)有以下几种: ### Zero-one Loss Zero-one Loss即0-1损失,它是一种较为简单的损失函数,如果预测值与目标值不相等,那么为1,否则为0,即:

       ℓ(yi,yi^)={1,0,yiyi^yi=yi^

可以看出上述的定义太过严格,如果真实值为1,预测值为0.999,那么预测应该正确,但是上述定义显然是判定为预测错误,那么可以进行改进为Perceptron Loss。

### Perceptron Loss Perceptron Loss即为感知损失。即:

       ℓ(yi,yi^)={1,0,|yiyi^|>t|yiyi^|t

其中t是一个超参数阈值,如在PLA([Perceptron Learning Algorithm,感知机算法](http://kubicode.me/2015/08/06/Machine%20Learning/Perceptron-Learning-Algorithm/))中取t=0.5

### Hinge Loss Hinge损失可以用来解决间隔最大化问题,如在SVM中解决几何间隔最大化问题,其定义如下:

       ℓ(yi,yi^)=max{0,1yiyi^}
       yi{1,+1}

更多请参见:[Hinge-loss](https://en.wikipedia.org/wiki/Hinge_loss)。

### Log Loss 在使用似然函数最大化时,其形式是进行连乘,但是为了便于处理,一般会套上log,这样便可以将连乘转化为求和,由于log函数是单调递增函数,因此不会改变优化结果。因此log类型的损失函数也是一种常见的损失函数,如在LR([Logistic Regression, 逻辑回归](chrome-extension://ikhdkkncnoglghljlkmcimlnlhkeamad/pdf-viewer/web/viewer.html?file=https%3A%2F%2Fpeople.eecs.berkeley.edu%2F~russell%2Fclasses%2Fcs194%2Ff11%2Flectures%2FCS194%2520Fall%25202011%2520Lecture%252006.pdf))中使用交叉熵(Cross Entropy)作为其损失函数。即:

        ℓ(yi,yi^)=yilogyi^+(1yi)log(1yi^)
       yi{0,1}

规定

       0log=0

### Square Loss Square Loss即平方误差,常用于回归中。即:

      ℓ(yi,yi^)=(yiyi^)2
      yi,yi^R

### Absolute Loss Absolute Loss即绝对值误差,常用于回归中。即:

      ℓ(yi,yi^)=|yiyi^|
      yi,yi^R

### Exponential Loss Exponential Loss为指数误差,常用于boosting算法中,如[AdaBoost](https://en.wikipedia.org/wiki/AdaBoost)。即:

      ℓ(yi,yi^)=exp(yiyi^)
      yi{1,1}

正则

一般来说,对分类或者回归模型进行评估时,需要使得模型在训练数据上使得损失函数值最小,即使得经验风险函数最小化,但是如果只考虑经验风险(Empirical risk),容易过拟合(详细参见防止过拟合的一些方法),因此还需要考虑模型的泛化能力,一般常用的方法便是在目标函数中加上正则项,由损失项(Loss term)加上正则项(Regularization term)构成结构风险(Structural risk),那么损失函数变为: 

L=i=1N(yi,yi^)+λR(ω)


其中λ是正则项超参数,常用的正则方法包括:L1正则与L2正则,详细介绍参见:防止过拟合的一些方法

 

各损失函数图形如下:

loss_function



机器学习中的各种损失函数

SVM multiclass loss(Hinge loss)

这里写图片描述 
这里写图片描述 

这是一个合页函数,也叫Hinge function,loss 函数反映的是我们对于当前分类结果的不满意程度。在这里,多分类的SVM,我们的损失函数的含义是这样的:对于当前的一组分数,对应于不同的类别,我们希望属于真实类别的那个分数比其他的类别的分数要高,并且最好要高出一个margin,这样才是安全的。反映在这个函数中,就是0的那一项的取值范围,Syi表示的是xi样本的真实类别所得到的分数,而Sj指的是其他的类别的分数,如果真实类别的分数是最大的,且大一个margin 1,那么就表示满意,也就是说不惩罚,这一项的loss为0。如果不满足这一条件,我们用下面的一段,也就是Sj - Syi + 1, 1在这里是一个常数,可以使得函数连续起来,这个Sj - Syi表示,Syi,也就是真实样本的分数比别的少的越多,我们越不满意,具体计算方式有下面这个栗子:


这里写图片描述

有时候我们也会用hinge function的平方项作为loss函数。

考虑到很多W都能满足零loss,那么如何在这些W中做出选择?

这里就需要对W进行选择,也就是正则,引出了经验风险损失和结构风险损失的概念,正则的概念众所周知,此略。

这里乱入一下各种正则化,关于正则化的相关问题留作以后整理。


这里写图片描述

multinomial logistic regression (softmax loss)

就是常说的softmax的损失函数,通过将score变成probablity,从而每次只用计算属于正确的分类的那个概率,用对数最大似然的方法,将它变成prob == 1,也就是min -log 使其等于0 。


这里写图片描述
这里写图片描述

可以看出,如果类别标签是one-hot vector的话,那么实际上只对真实类别的一类进行求log并加负号。

但是,考虑到这一类的prob是由所有的logits的exp后的和归一化得来的,因此实际上还是对所有的score都有作用。相对于前面的SVM的hinge loss,可以这样对比描述:Hinge loss 对于那些对真实类别给分高的样本不进行过多奖励(loss小相当于奖励高),也就是说只要正确类别的分数比其他的大1以上,那么就认为这个score已经足够好了,这样就可以关注整体的loss,争取所有样本上表现都比较好。而softmax loss 是对概率分布进行优化,力图使所有的概率密度都向着正确分类样本上集中。

* 关于多分类问题的 softmax loss 和 二分类问题的 logistic 回归的 loss

二分类问题的logistic回归的loss函数是:

loss=1n[ylna+(1y)ln(1a)]loss=−1n∑[yln⁡a+(1−y)ln⁡(1−a)]

可以看出,二类别的分类是多分类的一个特殊情况,因此也可以用softmax的方式来处理。但是二分类又是一个特例,因为它的类别不用写成one-hot vector,而是直接用0到1之间的一个数字就可以表示,接近1就是正例,接近0就是反例。所以符合上面的这个公式。这个公式可以看出,y=0,即真实标签为0的时候,第一项就没有了,loss变成-(1-y)ln(1-a),也就是-ln(1-a),a越接近0,loss越小;y=1时反之,这样就使得a越来越趋近于真实答案。

考虑到a是logistic方程的输出,x为输入,w是要优化的weights,a在0-1之间,如果我们把两个类别按照多分类的方式,写成one-hot vector的话,那么可以是[1, 0] 和 [0 ,1] ,那么用softmax输出的结果分别是[1-a, a],其中a接近0,这个向量就接近[1,0]也就是第一类,a接近1,向量接近第二类。用softmax写出来,就和上面的logistic二分类的loss一样了。

logistic回归的loss是可以通过最大似然取对数写出来的,这里假设样本的label,也就是类别服从Bernoulli分布。在【统计学习方法(李航)】一书中有推导过程,如下:


这里写图片描述

交叉熵损失函数(cross entropy loss function)

交叉熵的公式:


这里写图片描述 

这个是来源于信息论的一个定义,表示的是用某个分布去编码另一个分布所需要的平均码长。

作为损失函数时,它可以用来度量两个分布的差异性,比如上述的 softmax 得到的概率分布,和one-hot的概率分布相比,差异性就可以用cross entropy来衡量。按照编码的规则,作为权重的p和在log里面的p两个分布分别代表着真实分布和用来编码的预测分布,这个函数越小,说明两个分布越相像。

用交叉熵损失函数的优势在于,可以避免MSE损失带来的梯度过小的问题。(mse求导后chain里面带着sigmoid的导数,这个导数在有的位置是接近于0的,也就是前面说的软饱和,而cross entropy的导数只和真实值和预测值的差异成正比,所以避免了这一问题。)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值