-
2020-12-21 20:55:28
论文题目:When Does Labels Smoothing Help?(2019谷歌大脑)
一、标签平滑
1. 什么是标签平滑
标签平滑(Label Smoothing)是一种正则化方法,常常用于分类问题。
2. 作用
标签平滑能够防止模型在训练过程中过于相信真实标签,从而提高模型在未知数据上的泛化能力。
举个栗子: 在二分类任务中,对猫和狗的图像进行分类。如果预测一只狗的照片,那么真实标签中:1代表狗,0代表猫。那么在训练CNN时,模型预测值会尽量往1和0两个方向移动。这就使得模型对所要预测的图像过于自信,降低了模型的泛化能力。同时,数据集中通常会包含错误标签的数据。这就意味着,模型应该对正确的标签持 ”怀疑态度“。因此,对于1的标签,可以设置为1 - smoothing(平滑系数),例如0.9。此时,意味着对于所要预测的图像,有0.9的概率是狗,0.1的概率是猫。二、主要工作
平滑标签能够防止神经网络变得过于自信,标签平滑技术被很多先进的网络所使用。
(1)对标签平滑如何提高网络的泛化能力进行了可视化论证
(2)标签平滑具有隐式的网络校正功能
(3)在知识蒸馏的情况下,不使用标签平滑二、可视化
在论文中,非常直观地展示了标签平滑对神经网络分类任务的影响。作者在常见分类数据集上进行了实验,如下图所示。
通过观察实验结果,可以看到的是:标签平滑强制对分类结果进行更紧密的分组,同时强制在聚类之间进行更等距的间隔。
总结: 标签平滑产生了更紧密的聚类和更大的类别间的分离。
三、标签平滑的校正功能
与未校准的网络相比,标签平滑极大地提高了置信度/准确率。其结果几乎与使用温度缩放进行手动调节相同。因此,使用标签平滑产生地网络具有更好ECE(预期校准误差)。四、什么时候不使用标签平滑
在论文中作者提到:在进行知识蒸馏的时候使用标签平滑并不有效。
更多相关内容 -
标签平滑论文笔记:2020《When Does Label Smoothing Help?》
2020-10-03 21:16:21标签平滑: 这里记倒数第二层的激活函数后输出值(在最后权重和softmax概率分布之前的值)为 x 。(倒数第二层偏置是1) pk是样本属于第k个类的概率值,wk表示最后一层对应第k类的权重。 把wk看成第k类的模板...介绍
看成距离:
这里记倒数第二层的激活函数(logistc函数,即sigmoid函数)后输出值(在最后权重和softmax概率分布之前的值)为 x 。(倒数第二层偏置是1)
pk是样本属于第k个类的概率值,wk表示最后一层对应第k类的权重。把wk看成第k类的模板(template),xTwk的值可以看成对欧式距离的一种简化表示(xTwk为负,对应x和带权重wk的第k类欧氏距离大,则分类的概率小;xTwk为正,对应欧氏距离小,分类的概率大):
其中 xTx在计算softmax输出时被分离出来,wkTwk是每个类的常数。损失函数(交叉熵):
此样本对应的标签的第k个类的概率值是yk(one-hot硬标签)。这个网络的损失函数(交叉熵):
标签平滑
平滑参数:α
标签平滑鼓励网络的输出在接近带权重w(模板)比例的正确类的同时,与不正确的带权重比例的类保持等距。(具体不是很理解,从实验1的可视化结果可看出来)
实验1:标签平滑作用
可视化过程:
- 选择三个类。
- 找到过这三个类的模板比例的平面的标准正交基。
- 把这三个类的样本的倒数第二层的激活函数的值投影在平面上。
实验:
数据集: CIFAR-10,CIFAR-100,ImageNet
网络结构: AlexNet,ResNet-56,Inception-v4没有标签平滑(without label smoothing)记为 w/o LS。
第一行:CIFAR-10/AlexNet 上的“飞机”、“汽车”和“鸟”三类。
第二行:CIFAR-100/ResNet-56上的“河狸”、“海豚”与“水獭”。
第三行:ImageNet/Inception-v4上的“猫鼬”、“鲤鱼”和“切刀肉”。
第四行:ImageNet/Inception-v4上的“玩具贵宾犬”、“ 迷你贵宾犬”和“鲤鱼”。注意第四行的不同,选了两个相似类和一个其他类。
前两列对应的分别没有标签平滑的训练集和验证集。后两列是平滑后的对比,明显看出标签平滑使得类间远离,类内缩进,毫无关系的三个类(不包括第四行)呈正三角形。
即标签平滑鼓励倒数第二层激活函数之后的结果靠近正确的类的模板,并且同样的远离错误类的模板。
实验2:针对ECE与温度缩放进行对比(作用相近)
expected calibration error (ECE)预期校准误差
郭等人已经表明,现代神经网络虽然比过去更好的校准网络具有更好的性能,但校准不佳且过于自信。为了测量校准,作者计算了估计的预期校准误差(ECE)。他们证明了一个简单的后处理步骤,温度缩放,可以减少ECE并校准网络。温度缩放包括在应用softmax运算符之前将logits乘以标量。在这里,我们展示标签平滑也减少了ECE,可用于校准网络而无需温度缩放。
【补充:2017《On Calibration of Modern Neural Networks》
因为测试集的样本数量有限,不能单纯的用测试集的正确率来说明模型的好坏。我们希望达到一个这样的想法:最高精确度达到p的测试样本的结果的置信度(Confidence)为p。即(完美校准calibration)
好好体会这个式子,简单解释就是预测样本是哪一类的概率值为p(神经网络的输出向量中的最大的一项的概率),希望对它的预测的正确率达到概率p。(即下图中第二行的图中,希望是对角线的效果。)
上图x轴均代表置信率(Confidence),即样本的输出向量的最大的概率p (属于[0,1]),% of samples表示对应的样本占总样本的百分比,比如说x轴0.8,y轴0.05表示样本输出向量的最大概率是0.8的样本数量占总样本的5%,实际上p的分布是连续的,但我们用离散试验(阶梯图)。具体如下图(下标i针对第i个样本)
accuracy代表真实的预测正确率,红色的框框代表真实试验和对角线的差距。我们希望调整模型使得confidence和accuracy一致,即ECE最小化:
具体的将数据集划分成M个小块Bm实验(其中总样本为n个):文章给出了调整ECE的方法之一:温度缩放,即
因为它仅改变输出的概率值,而不改变输出的预测结果。补充完】
可以说在对角线右下方的实验信心偏高,但实际准确率不足,效果不好。
参照对角线,既没有温度变换(T=1)又没有作标签平滑(α=0)的蓝线表现最差。
机器翻译:略。
实验3:标签平滑对知识蒸馏影响(变差)
数据集:MNIST
老师:one-hot+dropout的训练误差为0.67%
学生:知识蒸馏训练误差为0.74%老师:标签平滑的训练误差为0.59%
学生:知识蒸馏训练误差为0.91%数据集:CIFAR-10
老师:ResNet-56
学生:AlexNet
关注:
1. 老师用标签平滑的正确率(图中深蓝实线)
2. 学生用标签平滑的正确率(不用知识蒸馏,图中浅蓝实线)
3. 学生用知识蒸馏的正确率(对应老师用one-hot标签,蒸馏T变化,图中红虚线)
4. 学生用知识蒸馏的正确率(对应老师用平滑标签,蒸馏T=1,图中深蓝虚线)
对于1,2,γ=α(标签平滑度);对于3,4,γ定义为上图中式子,计算了教师在训练集上的错误样本分配。
由于γ意义不同,1,2同时比较(图中深蓝实线,浅蓝实线);3,4同时比较(图中红虚线,深蓝虚线)。
1,2:标签平滑率的不断增加可以提高教师的准确性,而略微降低学生网络的基准性能。
3,4:可以看出使用硬目标的教师网络做知识蒸馏得到的学生网络表现会更好一些。实验3知识蒸馏:互信息I(X;Y)
互信息I(X;Y),Mutual Information,缩写为MI,表示知道Y后X的不确定性是多少。这里简化计算X,Y互信息。
这里X是两个类中的600个样本的随机变量,Y表示每个样本输入神经网络的倒数第二层的激活函数后的再乘相应权重的两个值的差的随机变量。(至于细节文章并没有透露,反正Y表示的输出是一维,猜测是用到了真实和平滑的标签)即互信息I(X;Y)表示两个类的信息量(H(X))在知道Y后会变成多少( I(X;Y) = H(X) - H(X|Y) )。定义的互信息输出范围在(0,log(N))之间。
由图可以看到,未使用标签平滑的教师网络(蓝色线)会保存更多的两个类的信息,使用标签平滑的教师网络(红色线)的两个类的信息则会更少,这证实了标签平滑会造成一定信息损失的猜想。最终作者提出了一个结论:教师网络准确率更高并不是蒸馏一个好的学生网络的充分条件。【 补充:
KL散度D(p(x)||p(y)) 是描述两个分布的差异;
熵H(x) 表示随机变量x含的信息量(信息量多,则不确定量就大);
条件熵H(x|y) 表示已知y后,x的信息量;
互信息I(x;y)=H(x)-H(x|y)=KL(p(x,y)||p(x)p(y)) 表示知道y后x的信息量变成多少,当x,y无关时,H(x|y)=0,则知道y后x的信息量还是原来那么多。用散度理解是x,y的联合分布和边缘分布之积的差异。
补充完 】
链接
-
标签平滑Label Smoothing
2019-09-03 09:36:24在2016年,Szegedy等人提出了inception v2的模型(论文:Rethinking the inception architecture for computer vision.)。其中提到了Label Smoothing技术,用以减轻这个问题。 我们先来看一下原理。假设我们的分类...Lable Smoothing
是分类问题中错误标注的一种解决方法。对于分类问题,特别是多分类问题,常常把向量转换成one-hot-vector(独热向量)
one-hot带来的问题:(对于独热的简单解释:https://blog.csdn.net/qq_43211132/article/details/96141409)
对于损失函数,我们需要用预测概率去拟合真实概率,而拟合one-hot的真实概率函数会带来两个问题:
1)无法保证模型的泛化能力,容易造成过拟合;
2) 全概率和0概率鼓励所属类别和其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难适应。会造成模型过于相信预测的类别。
使用下面的 label smoothing 可以缓解这个问题:
原理:对于以Dirac函数分布的真实标签,我们将它变成分为两部分获得(替换)。-
第一部分:将原本Dirac分布的标签变量替换为(1 - ϵ)的Dirac函数;
-
第二部分:以概率 ϵ ,在u(k) 中份分布的随机变量(u(k)是类别分之一)
代码:
def label_smoothing(inputs, epsilon=0.1): K = inputs.get_shape().as_list()[-1] # number of channels return ((1-epsilon) * inputs) + (epsilon / K)
交叉熵(Cross-Entropy)损失函数是分类模型中的一种非常重要的目标函数。在二分类问题中,交叉熵损失函数的形式如下:
如果分类准确,交叉熵损失函数的结果是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]编码变成了[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 )
参考:
【1】https://blog.csdn.net/neveer/article/details/91646657
【2】https://www.datalearner.com/blog/1051561454844661 -
-
带有多标签平滑规则化的多标签学习,用于车辆重新识别
2021-03-31 05:51:00带有多标签平滑规则化的多标签学习,用于车辆重新识别 -
利用自适应标签平滑调整的多尺度车辆重新识别
2021-03-08 09:30:13利用自适应标签平滑调整的多尺度车辆重新识别 -
标签平滑
2021-01-13 12:13:46标签平滑的作用:就是小幅度的改变原有标签值的值域 原因:因为在理论上即使是人工的标注数据也可能并非完全正确, 会受到一些外界因素的影响而产生一些微小的偏差 因此使用标签平滑来弥补这种偏差, 减少模型对某一条...标签平滑的作用:就是小幅度的改变原有标签值的值域
原因:因为在理论上即使是人工的标注数据也可能并非完全正确, 会受到一些外界因素的影响而产生一些微小的偏差
因此使用标签平滑来弥补这种偏差, 减少模型对某一条规律的绝对认知, 以防止过拟合. 通过下面示例了解更多.
标签平滑理论:
在2016年,Szegedy等人提出了inception v2的模型(论文:Rethinking the inception architecture for computer vision.)。其中提到了Label Smoothing技术,用以减轻这个问题。
transformer中,可以直接导入标签平滑工具包, 该工具用于标签平滑,代码如下:# -*- coding: utf-8 -*- from pyitcast.transformer_utils import LabelSmoothing from torch.autograd import Variable import torch import matplotlib.pyplot as plt # 使用LabelSmoothing实例化一个crit对象. # 第一个参数size代表目标数据的词汇总数, 也是模型最后一层得到张量的最后一维大小 # 这里是5说明目标词汇总数是5个. 第二个参数padding_idx表示要将那些tensor中的数字 # 替换成0, 一般padding_idx=0表示不进行替换. 第三个参数smoothing, 表示标签的平滑程度 # 如原来标签的表示值为1, 则平滑后它的值域变为[1-smoothing, 1+smoothing]. crit = LabelSmoothing(size=5, padding_idx=0, smoothing=0.5) # 假定一个任意的模型最后输出预测结果和真实结果 predict = Variable(torch.FloatTensor([[0, 0.2, 0.7, 0.1, 0], [0, 0.2, 0.7, 0.1, 0], [0, 0.2, 0.7, 0.1, 0]])) # torch.FloatTensor([[0, 0.2, 0.7, 0.1, 0], # [0, 0.2, 0.7, 0.1, 0], # [0, 0.2, 0.7, 0.1, 0]])) # 标签的表示值是0,1,2;值域:[0,2] target = Variable(torch.LongTensor([2, 1, 0])) # print(target.shape) # 将predict, target传入到对象中 print("损失值:",crit(predict, target)) print("-------------") # true_dist:源码中定义的参数,平滑后的标签结果,值域:[-0.5,2.5] # 即就是:值域:[0,2]-->值域:[-0.5,2.5] # 满足公式:0-smoothing=0.5,2+smoothing=0.5 print(crit.true_dist) # tensor([[0.0000, 0.1667, 0.5000, 0.1667, 0.1667], # [0.0000, 0.5000, 0.1667, 0.1667, 0.1667], # [0.0000, 0.0000, 0.0000, 0.0000, 0.0000]]) # 绘制标签平滑图像 plt.imshow(crit.true_dist) plt.show() # 标签平滑图像分析: # 我们目光集中在黄色小方块上, 它相对于横坐标横跨的值域就是标签平滑后的正向平滑值域, 我们可以看到大致是从0.5到2.5. # 它相对于纵坐标横跨的值域就是标签平滑后的负向平滑值域, 我们可以看到大致是从-0.5到1.5, 总的值域空间由原来的[0, 2]变成了[-0.5, 2.5].
我们先来看一下原理。假设我们的分类只有两个,一个是猫一个不是猫,分别用1和0表示。Label Smoothing的工作原理是对原来的[0 1]这种标注做一个改动,假设我们给定Label Smoothing的值为0.1:
可以看到,原来的[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 )
-
标签平滑的原理
2020-10-01 22:19:56参考资料 在TensorFlow2.x版本中调用该函数,请看:基于 Keras 和 Tensorflow 的标签平滑实现. 1.产生背景 假设选用softmax交叉熵训练一个三分类模型,某样本经过网络最后一层的输出为向量x=(1.0, 5.0, 4.0),对x进行... -
label smooth标签平滑的理解
2021-03-31 11:35:02标签平滑的原理和作用 标签平滑的实现——训练过程中loss函数的使用 实践效果对比 -
我们谈一下标签正则化(标签平滑、知识蒸馏、知识精炼)
2022-04-28 16:27:430. 引言 关于正则化,大家都非常熟悉。...为了解决这个问题,已经开发了许多正则化方法,包括参数正则化(例如dropout)、数据正则化(例如数据增强)和标签正则化(例如标签平滑),以避免过度拟合问题。 -
深度学习中的标签平滑正则化(Label Smoothing Regularization)方法原理详解
2019-08-31 00:16:31(一)、为什么有标签平滑正则化(Label Smoothing Regularization, LSR)的方法? 在深度学习样本训练的过程中,我们采用one-hot标签去进行计算交叉熵损失时,只考虑到训练样本中正确的标签位置(one-hot标签为1的位置... -
【YOLOv4探讨 之四】标签平滑Label Smoothing
2021-03-30 22:35:59YOLOv4中,为了防止分类过拟合,使用了标签平滑Label Smoothing的技术。 Label Smoothing最早源于论文《Rethinking the inception architecture for computer vision》,这里不讨论。基本原理如下:通常YOLO模型中,... -
Label Smoothing标签平滑详解+Pytorch保姆级实际操作
2021-04-19 13:55:22简介 Label Smoothing是一个帮助多分类模型进行正则化的操作。 从提出Label Smoothing的论文出发 ...标签平滑也可以被简称为LSR(Label-Smoothing Regularization)。 不使用LS时的情况 假设我们有一个K分 -
【LSR标签平滑理解】
2021-05-13 11:22:44(一)、为什么有标签平滑正则化(Label Smoothing Regularization, LSR)的方法? 在深度学习样本训练的过程中,我们采用one-hot标签去进行计算交叉熵损失时,只考虑到训练样本中正确的标签位置(one-hot标签为1的位置... -
Google Brain最新论文:标签平滑何时才是有用的?
2021-04-25 15:25:271、标签平滑(Label Smoothing) 4、在这一节中,作者发现在知识蒸馏模型中,尽管标签平滑可以提高教师网络的准确率,但是使用标签平滑训练的教师网络相比于使用硬目标训练的教师网络,其相应的学生网络的表现却要更... -
通俗理解交叉熵和KL散度(包括标签平滑的pytorch实现)
2022-02-24 22:13:34本文介绍了熵、信息量、交叉熵、KL散度,通俗易懂。并给出pytorch中torch.nn.CrossEntropyLoss,NLLLoss(),torch.nn.KLDivLoss的使用。利用pytorch实现了一个基于标签平滑的KL损失。 -
标签平滑labelsmooth
2022-01-08 21:28:16Label smoothing 标签平滑 应用 借助弱监督 方式引入外部数据集中的高质量数据(这里引入的数据是没有标签的数据 )——解决了自行扩展数据集带来的测试偏移。步骤如下: 使用训练数据建立模型 预测爬取的数据的... -
i3d_crf:用于视频分类的I3D模型的PyTorch实现,与用于多标签分类的CRF平滑层混合
2021-04-28 04:38:29它使用I3D预训练模型作为基础分类器(Joao Carreira和Andrew Zisserman在论文“ ”中报告了I3D)。 该代码基于Deepmind的和AJ Piergiovanni的I3D管道的。 要求 该代码是使用Python 3.6和 0.4.0开发的。 它需要和 ... -
标签平滑&深度学习:Google Brain解释了为什么标签平滑有用以及什么时候使用它(SOTA tips)...
2019-12-11 07:30:00点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”作者:Less Wright编译:ronghuaiyang导读标签平滑算是一种常规技术了,但是这背后的原理不知道大家有没有深究过... -
通过局部平滑标签传播的显着区域检测:在注意力驱动的图像抽象中的应用
2021-03-28 11:58:17通过局部平滑标签传播的显着区域检测:在注意力驱动的图像抽象中的应用 -
Hinton等人最新研究:大幅提升模型准确率,标签平滑技术到底怎么用?
2019-07-06 19:30:55Hinton 等人的这篇论文就尝试对标签平滑技术对神经网络的影响进行分析,并对相关网络的特性进行了描述。本文贡献如下: 基于对网络倒数第二层激活情况的线性映射提出了一个全新的可视化方法; 阐释了标签平滑对... -
具有自适应平滑度约束的3D腹部Ct图像中基于图割的自动主动脉分割
2021-03-15 16:55:04基于以下想法开发了两种数据驱动的权重:具有相同标签的两个相邻体素的不连续性应与具有相同标签的两个相邻体素的不连续性不同。 通过使用图割优化成本函数来获得最终的细分。 我们通过在3D CT图像中进行腹主动脉... -
深度学习面试题28:标签平滑(Label smoothing)
2019-07-27 11:48:00可以看出,损失比之前增加了,他的标签平滑的原理是对真实标签做了改变,源码里的公式为: # new_onehot_labels = onehot_labels * (1 - label_smoothing) + label_smoothing / num_classes new_onehot_... -
CSL:圆形平滑标签的任意方向目标检测
2020-08-03 00:16:25CSL:圆形平滑标签的任意方向目标检测 -
Hinton平滑标签
2019-09-03 09:19:581.提要 soft target:是通过... 论文目的:标签平滑不仅能够提升模型的泛化能力,还能够提升模型的修正能力,并进一步提高模型的集束搜索能力。但在本文的实验中还发现,如果在teacher model 中进行标签平滑,对... -
正则化技巧:标签平滑(Label Smoothing)以及在 PyTorch 中的实现
2021-11-14 09:35:05过拟合和概率校准是训练深度学习模型时出现的两个问题。深度学习中有很多正则化技术可以解决过拟合问题;权重衰减、早停机制和...在本文中,我们将解释标签平滑的原理,实现了一个使用这种技术的交叉熵损失函数,并评 -
网络调参的技巧:使用平滑标签
2020-12-21 20:49:13标签平滑(Label smoothing),像L1、L2和dropout一样,是机器学习领域的一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地预测标签,改善泛化能力差的问题。 NIPS 2019上的这篇论文When Does ...