美文网首页
标签平滑label smooth

标签平滑label smooth

作者: 三方斜阳 | 来源:发表于2021-05-22 21:05 被阅读0次

    概念:

    机器学习的样本中通常会存在少量错误标签,这些错误标签会影响到预测的效果。标签平滑采用如下思路解决这个问题:在训练时即假设标签可能存在错误,避免“过分”相信训练样本的标签。当目标函数为交叉熵时,这一思想有非常简单的实现,称为标签平滑(Label Smoothing)。

    以2类分类问题为例,此时训练样本为(xi,yi),其中yi是样本标签,为0或1。在训练样本中,我们并不能保证所有的样本标签都标注正确,如果某个样本的标注是错误的,那么在训练时,该样本就有可能对训练结果产生负面影响。一个很自然的想法是,如果我们有办法“告诉”模型,样本的标签不一定正确,那么训练出来的模型对于少量的样本错误就会有“免疫力”。

    实现方法:

    在每次迭代时,并不直接将(x_i,y_i)放入训练集,而是设置一个错误率\varepsilon ,以1-\varepsilon 的概率将(x_i,y_i)代入训练,以\varepsilon 的概率将(x_i,1-y_i)代入训练。这样,模型在训练时,既有正确标签输入,又有错误标签输入,可以想象,如此训练出来的模型不会“全力匹配”每一个标签,而只是在一定程度上匹配。这样,如果真的出现错误标签,模型受到的影响就会更小,这样训练出来的模型泛化能力会更强。

    采用交叉熵来描述损失函数时,对于每一个样本i,损失函数为:

    经过随机化之后,新的标签有1-\varepsilon 的概率与y_i相同,有\varepsilon 的概率不同(即1-y_i)。所以,采用随机化的标签作为训练数据时,损失函数有1-\varepsilon 的概率与上面的式子相同,有\varepsilon 的概率为:

    把上面两个式子按概率加权平均,就可以得到:

    为了简化上面的式子,我们yi'=ε(1-yi)+(1-ε)yi,可以得到:

    这个式子和原先的交叉熵表达式相比,只有y_i被替换成了y_{i}^1 ,其他的内容全部都没有变。这实际上等价于:把每个标签y_i替换成y_{i}^1 ,再进行常规的训练过程。因此,我们并不需要在训练前进行随机化处理,只需要把每个标签替换一下即可。

    为什么这个过程被成为标签平滑呢?我们可以从下面的式子看出来:

    也就是说,当标签为0时,我们并不把0直接放入训练,而是将其替换为一个比较小的数\varepsilon . 同样地,如果标签为1,我们也将其替换为较接近的数1-\varepsilon 。为了方便看出效果,我们可以给出交叉熵模型的表达式:

    由此可见,在交叉熵模型中,模型输出永远不可能达到0和1,因此模型会不断增大w,使得预测输出尽可能逼近0或1,而这个过程与正则化是矛盾的,或者说,有可能出现过拟合。如果我们把标签0和1分别替换成ε和1-ε,模型的输出在达到这个值之后,就不会继续优化。因此,所谓平滑,指的就是把两个极端值0和1变成两个不那么极端的值。

    当然,标签平滑也可以用在多类分类问题中,仍然是假设标签值在一定概率下不变,以一定概率变为其他值。只不过此时有多个其他值,我们可以假设均匀分布,也可以按一定的先验分布处理。如果假设均匀分布,那么标签平滑只需要把所有的标签1变为1-\varepsilon ,把所有的标签0变为\varepsilon /(k-1))即可,其中k是类别的数量。

    标签平滑的效果:

    在几乎所有的情况下,使用标签平滑训练可以产生更好的校准网络,从而更好地去泛化网络,最终对不可见的生产数据产生更准确的预测。因此,标签平滑应该是大多数深度学习训练的一部分。

    深度学习中的损失函数Loss实际上就是鼓励模型去接近对应的label,越接近loss越小,但是loss越小是否就越好呢?针对像交叉熵这类loss,一旦output有些偏差,loss值就往无穷大走了,就逼迫模型去接近真实的label。

    如果说好不容易接近label了,结果这条training data还是错的(是很有可能的),或者training data并没有完整覆盖所有类型,那就必须过拟合了,所以,适当调整label,让两端的极值往中间凑凑,可以增加泛化性能。

    参考:

    https://juejin.cn/post/6844903520089407502

    相关文章

      网友评论

          本文标题:标签平滑label smooth

          本文链接:https://www.haomeiwen.com/subject/nieojltx.html