利用深度学习来给机器学习赋能(2)——label smooth

  • 2021 年 4 月 9 日
  • AI

When Does Label Smoothing Help?blog.csdn.net图标

关于label smooth的技术,可以将其看作和dropout,l1、l2正则化等一个label的针对分类问题使用的正则化技术。

label smooth的两个优点:

1、提高模型泛化能力;

2、降低迭代次数

关于label smooth的两篇讲的比较好的文章;

王峰:Label Smoothing分析zhuanlan.zhihu.com图标十块钱:简单的label smooth为什么能够涨点呢zhuanlan.zhihu.com图标

label smooth最初是用于cv问题的,关于cv中能够提升泛化能力的解释不是太清楚。我的理解来看,label smooth的思路很清晰简单。

label smooth做的事情很简单:

把hard label变为soft label,
原来是1的位置变为 1 - \alpha ,其他的原来是0的位置变为 \alpha/(K-1) , \alpha 通常取0.1,K是类别的数量
假设一个6分类任务,之前的 q=[1,0,0,0,0,0] 就变成了 q=[0.9,0.02,0.02,0.02,0.02,0.02] ,

首先从二点 降低迭代次数来说,

对于分类问题,无论是nn还是gbdt,抽象来看,就是一个model+一个softmax层,softmax公式如上,显然,在使用交叉熵的情况下,我们希望标签为1的样本的预测结果为无穷大,标签为0的样本的预测结果为负无穷大,这样softmax之后的结果才会分别无限趋近于0和1,所以在进入softmax之前,我们的预测结果得是一个非常大的值。

对于nn来说,这意味着输入不变的情况下,权重的绝对值需要变得比较大,对于gbdt来说,需要使用更多的tree。大量次数的迭代意味着模型的过拟合:

以上图的二分类问题为例,过多的迭代次数,更低的logloss,模型的分类超平面会过度考虑training data的信息,从而导致泛化能力差的问题。

而当我们施加了label smooth之后,模型不用预测那么大的预测结果了,比如原来我们的正类的预测结果要是99999,现在只要预测999就行了,那么这样我们就不需要那么多的迭代次数了,nn的权重不用那么大,gbdt的tree不用那么多。这样我们的model的分类超平面就能从上图的overfiting转化到just right上了。从而提高了模型的泛化能力,即第一点。

这样我们的交叉熵就变成了:

eps是超参数,常用0.1,可调;

剩下的事情就比较简单了,torch的smoothloss实现一大堆,再结合之前的方法:

马东什么:利用深度学习来给机器学习赋能(1)zhuanlan.zhihu.com图标

可以比较容易的应用到lgb或者xgb中了。

个人感觉,smooth loss比较适用于噪声较多的问题,就是training data中存在一些错误标注的数据,通过引入smooth loss,使得模型的分类超平面不会那么地贴近原始的数据,对于噪声会更加的鲁棒一些。