APP下载

三分钟看懂深度学习标签平滑(Label Smoothing)技巧

消息来源:baojiabao.com 作者: 发布时间:2024-05-07

报价宝综合消息三分钟看懂深度学习标签平滑(Label Smoothing)技巧

交叉熵(Cross-Entropy)损失函式是分类模型中的一种非常重要的目标函式。在二分类问题中,交叉熵损失函式的形式如下:

−[ylogp+(1−y)log(1−p)]

如果分类准确,交叉熵损失函式的结果是0(即上式中p和y一致的情况),否则交叉熵为无穷大。也就是说交叉熵对分类正确给的是最大激励。换句话说,对于标注资料来说,这个时候我们认为其标注结果是准确的(不然这个结果就没意义了)。但实际上,有一些标注资料并不一定是准确的。那么这时候,使用交叉熵损失函式作为目标函式并不一定是最优的。

在早期的神经网络研究中,也有发现,一些非标准的交叉熵损失函式表现会更好一点。

对于这个问题,我们还可以这么去理解。在分类任务中,我们通常对类别标签的编码使用[0,1,2,…]这种形式。在深度学习中,通常在全连线层的最后一层,加入一个softmax来计算输入资料属于每个类别的概率,并把概率最高的作为这个类别的输入,然后使用交叉熵作为损失函式。这会导致模型对正确分类的情况奖励最大,错误分类惩罚最大。如果训练资料能覆盖所有情况,或者是完全正确,那么这种方式没有问题。但事实上,这不可能。所以这种方式可能会带来泛化能力差的问题,即过拟合。

在2016年,Szegedy等人提出了inception v2的模型(论文:Rethinking the inception architecture for computer vision.)。其中提到了Label Smoothing技术,用以减轻这个问题。

我们先来看一下原理。假设我们的分类只有两个,一个是猫一个不是猫,分别用1和0表示。Label Smoothing的工作原理是对原来的[0 1]这种标注做一个改动,假设我们给定Label Smoothing的值为0.1:

[0,1]×(1−0.1)+0.1/2=[0.05,0.95]

可以看到,原来的[0,1]编码变成了[0.05,0.95]了。这个label_smoothing的值假设为ϵ,那么就是说,原来分类准确的时候,p=1,不准确为p=0,现在变成了p=1−ϵ和ϵ,也就是说对分类准确做了一点惩罚。

Label Smoothing在很多问题上对模型都有一定的提升。

在Tensorflow中使用方法时候只要在损失函式中加上label_smoothing的值即可,如下:

tf.losses.softmax_cross_entropy(

onehot_labels,

logits,

weights=1.0,

label_smoothing=0,

scope=None,

loss_collection=tf.GraphKeys.LOSSES,

reduction=Reduction.SUM_BY_NONZERO_WEIGHTS

)

2019-10-02 21:06:00

相关文章