标签平滑Label Smoothing

2023-11-09

转载:https://cloud.tencent.com/developer/article/1815786


关于label smoothing是一些比赛中,比较常用的技巧,特别是图像多分类之中,效果蛮好的。这边整理一下,该技巧的文章,其中文章[6]写的非常赞,由其开篇。
当然这里,还有多种对应的说法:

  • Hard target和Soft target
  • hard label 和 soft label

举一个文章[2]的例子,Hard target和Soft target:
在这里插入图片描述

另一个hard label转变成soft label,文章[5]:
在这里插入图片描述

One-hot -> Label Smoothing

文本分类和图像分类实际上在训练模式上是类似的,基本都遵循这样的一个流程:

  • step 1. 一个深度网络(DNN,诸如LSTM、CNN、BERT等)来得到向量表示
  • step 2. 一个softmax来输出预测的标签概率分布p
  • step 3. 使用Cross-entropy来计算真实标签(one-hot表示)与p之间的损失,从而优化

这里使用cross-entropy loss(简称CE-loss)基本上成了大家训练模型的默认方法,但它实际上存在一些问题。下面我举个例子:
比如有一个六个类别的分类任务,CE-loss是如何计算当前某个预测概率p相对于y的损失呢:
在这里插入图片描述
可以看出,根据CE-loss的公式,只有y中为1的那一维度参与了loss的计算,其他的都忽略了。这样就会造成一些后果

  • 真实标签跟其他标签之间的关系被忽略了,很多有用的知识无法学到,比如“鸟”和“飞机”本来也比较像,因此如果模型预测觉得二者更接近,那么应该给予更小的loss;
  • 倾向于让模型更加“武断”,成为一个“非黑即白”的模型,导致泛化性能差;
  • 面对易混淆的分类任务、有噪音(误打标)的数据集时,更容易受影响

总之,这都是由one-hot的不合理表示造成的,因为one-hot只是对真实情况的一种简化。

面对one-hot可能带来的容易过拟合的问题,有研究提出了Label Smoothing方法:
在这里插入图片描述
label smoothing就是把原来的one-hot表示,在每一维上都添加了一个随机噪音。这是一种简单粗暴,但又十分有效的方法,目前已经使用在很多的图像分类模型中了。

目前来看一下两者的优劣势:
one-hot 劣势:
可能导致过拟合。0或1的标记方式导致模型概率估计值为1,或接近于1,这样的编码方式不够soft,容易导致过拟合。为什么?

用于训练模型的training set通常是很有限的,往往不能覆盖所有的情况,特别是在训练样本比较少的情况下更为明显。

以神经机器翻译(NMT)为例:假设预测句子“今天下午我们去…”中,“去”后面的一个词。假设只有“去钓鱼”和“去逛街”两种搭配,且真实的句子是“今天下午我们去钓鱼”。

training set中,“去钓鱼”这个搭配出现10次,“去逛街”搭配出现40次。“去钓鱼”出现概率真实概率是20%,

“去逛街”出现的真实概率是80%。

因为采用0或1的表示方式,随着training次数增加,模型逐渐倾向于“去逛街”这个搭配,使这个搭配预测概率为100%或接近于100%,“去钓鱼”这个搭配逐渐被忽略。(文章[1])

  • 另外,也会造成模型对它的预测过于confident,导致模型对观测变量x的预测严重偏离真实的情况,比如上述例子中,把“去逛街”搭配出现的概率从80%放大到100%,这种放大是不合理的。

Label Smoothing 优势:

  • 一定程度上,可以缓解模型过于武断的问题,也有一定的抗噪能力;
  • 弥补了简单分类中监督信号不足(信息熵比较少)的问题,增加了信息量;
  • 提供了训练数据中类别之间的关系(数据增强);
  • 可能增强了模型泛化能力;
  • 降低feature norm (feature normalization)从而让每个类别的样本聚拢的效果(文章[10]提及);
  • 产生更好的校准网络,从而更好地泛化,最终对不可见的生产数据产生更准确的预测。(文章[11]提及

Label Smoothing 劣势:

  • 单纯地添加随机噪音,也无法反映标签之间的关系,因此对模型的提升有限,甚至有欠拟合的风险。
  • 它对构建将来作为教师的网络没有用处,hard 目标训练将产生一个更好的教师神经网络。(文章[11]提及)

label smoothing 降低feature norm

文章[10]提及了一个有意思的知识点:

Hinton组对Label Smoothing的分析文章[When Does Label Smoothing Help? ],里面有一张图比较有意思:
在这里插入图片描述
熟悉人脸识别loss的人会发现,这个Label Smoothing得到的特征分布,怎么跟人脸loss的效果这么像?

竟然都可以起到让每个类别的样本聚拢的效果。
而少数细心的朋友可能会发现这里的玄机:

不做Label Smoothing(标注为w/o LS)的feature norm,普遍比做了LS(标注为w/ LS)的要大很多!w/o LS时最大可以达到1.6,而w/ LS时只有0.4。

Label Smoothing也并不要求p优化到1,而是优化到0.9即可。Softmax Cross Entropy 的loss曲线其实跟sigmoid类似,越靠近1的时候,loss曲线会越平缓:
在这里插入图片描述

标签平滑归一化:Label Smoothing Regularization (LSR)

文章[1][2]提及该方法:
Label Smoothing Regularization(LSR)是一种通过在输出y中添加噪声,实现对模型进行约束,降低模型过拟合(overfitting)程度的一种约束方法(regularization methed)。

LSR也是对“硬目标”的优化:
在这里插入图片描述
Label Smoothing Regularization(LSR)就是为了缓解由label不够soft而容易导致过拟合的问题,使模型对预测less confident,把预测值过度集中在概率较大类别上,把一些概率分到其他概率较小类别上。

该方法应用在较多的论文中,譬如:

  • Attentional Encoder Network for Targeted Sentiment Classification
  • Müller R, Kornblith S, Hinton G. When Does Label Smoothing Help?[J]. arXiv preprint arXiv:1906.02629, 2019.

label smoothing在什么场景有奇效?

文章[4]提及了一些NLP领域使用场景的思考:

  • 1.真实场景下,尤其数据量大的时候 数据里是会有噪音的(当然如果你非要说我100%确定数据都是完全正确的, 那就无所谓了啊),为了避免模型错误的学到这些噪音可以加入label smoothing
  • 2.避免模型太自信了,有时候我们训练一个模型会发现给出相当高的confidence,但有时候我们不希望模型太自信了(可能会导致over-fit 等别的问题),希望提高模型的学习难度,也会引入label smoothing
  • 3.分类的中会有一些模糊的case,比如图片分类,有些图片即像猫又像狗, 利用soft-target可以给两类都提供监督效果

hinton的这篇[when does label smoothing help? ]论文从另一个角度去解释了 label smoothing的作用:

多分类可能更效果, 类别更紧密,不同类别分的更开;小类别可能效果弱一些

发散一下,该策略如果用到序列标注等模型上,是不是效果会变好?

文章[5]提及,该策略可以使网络优化更加平滑:
在这里插入图片描述
label smoothing将hard label转变成soft label,使网络优化更加平滑。标签平滑是用于深度神经网络(DNN)的有效正则化工具,该工具通过在均匀分布和hard标签之间应用加权平均值来生成soft标签。

它通常用于减少训练DNN的过拟合问题并进一步提高分类性能。

targets = (1 - label_smooth) * targets + label_smooth / num_classes
在这里插入图片描述

文章[8]在**[观点阅读理解任务]比赛**中也使用该策略:

focal loss的损失函数中加入了标签平滑(label smoothing),标签平滑[6]是一种防止模型过拟合的正则化手段。

label smoothing是将真实的one hot标签做一个标签平滑处理,使得标签变成soft label。

其中,在真实label处的概率值接近于1,其他位置的概率值是个非常小的数。

在label smoothing中有个参数epsilon,描述了将标签软化的程度,该值越大,经过label smoothing后的标签向量的标签概率值越小,标签越平滑,反之,标签越趋向于hard label。

较大的模型使用label smoothing可以有效的提升模型的精度,较小的模型使用此种方法可能会降低模型精度。
本次比赛中,在多个roberta_large预训练模型微调过程中使用有一定的提升。
文章[9]提到在早先Google在Inception网络上就使用过这个技巧

对于Imagenet这个分类问题标签的种类是确定的K=1000类,所以在Inception论文[2]里直接用一个系数来控制平滑的强度,即平滑后的标签
在这里插入图片描述
但是如果用同样方法在这些长短不一的句子上做平滑,其实是不合适的。每个位置的平滑概率反比于句子的长度,也就是K,所以我认为更好的确定平滑强度的方法是先确定一个单位平滑强度,再根据句子总长来确定原标签的权重。

文章[10]的大佬还细细研究了该策略为什么不能在人脸任务取得效果:

Label Smoothing起到的作用实际上是抑制了feature norm,此时softmax prob永远无法达到设定的 ,loss曲面上不再存在平缓区域,处处都有较大的梯度指向各个类中心,所以特征会更加聚拢。

而之所以人脸上不work,是因为我们通常会使用固定的s,此时Label Smoothing无法控制feature norm,只能控制角度,就会起到反向优化的作用,因此在人脸loss上加Label Smoothing效果会变差。
文章[11]也提及了与文章[10]类似的结论:

标签平滑强制对分类进行更紧密的分组,同时强制在聚类之间进行更等距的间隔。
标签平滑为最终的激活产生了更紧密的聚类和更大的类别间的分离。

左:没有使用标签平滑进行训练,右:使用标签标签平滑进行训练
标签平滑可以产生更多的正则化和鲁棒的神经网络的主要原因,重要的是趋向于更好地泛化未来的数据

因此,标签平滑应该是大多数深度学习训练的一部分。然而,有一种情况是,它对构建将来作为教师的网络没有用处,hard 目标训练将产生一个更好的教师神经网络。

什么时候不使用标签平滑

文章[11]提及了一种不适用的场景:

尽管标签平滑可以产生用于各种任务的改进的神经网络……如果最终的模型将作为其他“学生”网络的老师,那么它不应该被使用。

尽管使用标签平滑化训练提高了教师的最终准确性,但与使用“硬”目标训练的教师相比,它未能向学生网络传递足够多的知识(没有标签平滑化)。

标签平滑“擦除”了在hard目标训练中保留的一些细节。

这样的泛化有利于教师网络的性能,但是它传递给学生网络的信息更少。

标签平滑产生的模型是不好的教师模型的原因可以通过初始的可视化或多或少的表现出来。

通过强制将最终的分类划分为更紧密的集群,该网络删除了更多的细节,将重点放在类之间的核心区别上。

这种“舍入”有助于网络更好地处理不可见数据。

然而,丢失的信息最终会对它教授新学生模型的能力产生负面影响。

因此,准确性更高的老师并不能更好地向学生提炼信息。

Label Smoothing 更进一步的思考研究

文章[6]针对label smoothing随机噪音 以及 smoothing值都为固定的缺陷,提出一个更优质的策略:

最终的目标,是能够使用更加合理的标签分布来代替one-hot分布训练模型,最好这个过程能够和模型的训练同步进行。

一个合理的标签分布,应该有什么样的性质。

① 很自然地,标签分布应该可以反映标签之间的相似性。比方下面这个例子:
在这里插入图片描述
② 标签间的相似性是相对的,要根据具体的样本内容来看。比方下面这个例子,同样的标签,对于不同的句子,标签之间的相似度也是不一样的:
在这里插入图片描述
③ 构造得到的标签分布,在01化之后应该跟原one-hot表示相同。

啥意思呢,就是我们不能构造出了一个标签分布,最大值对应的标签跟原本的one-hot标签还不一致,我们最终的标签分布,还是要以one-hot为标杆来构造。

根据上面的思考,我们这样来设计模型:

使用一个Label Encoder来学习各个label的表示,与input sample的向量表示计算相似度,从而得到一个反映标签之间的混淆/相似程度的分布。
最后,使用该混淆分布来调整原来的one-hot分布,从而得到一个更好的标签分布。

在这里插入图片描述
这个结构分两部分,左边是一个Basic Predictor,就是各种我们常用的分类模型。右边的则是LCM的模型。注意LCM是一个插件,所以左侧可以更换成任何深度学习模型。

参考文献

1 Label Smoothing Regularization_LSR原理是什么?
2 一文总览知识蒸馏概述
3 小方案蕴藏大改变,人物识别挑战赛TOP2团队依靠创新突围
4 label smoothing + knowledge distill + nlp
5 大道至简:算法工程师炼丹Trick手册
6 用模型“想象”出来的target来训练,可以提高分类的效果!
7 样本混进了噪声怎么办?通过Loss分布把它们揪出来!
8 百度人工智能开源大赛冠军分享——如何在观点阅读理解任务取得高分
9 Kaggle Tweet Sentiment Extraction 第七名复盘
10 Label Smoothing分析
11 标签平滑&深度学习:Google Brain解释了为什么标签平滑有用以及什么时候使用它

关联阅读

训练集 和 测试集分布是否一致——对抗验证(Adversarial Validation)

半监督学习:伪标签技术pseudo-label

笔记︱模型压缩:knowledge distillation知识蒸馏(一)

竞赛技巧:TTA(Test Time Augmentation)与数据增强

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

标签平滑Label Smoothing 的相关文章

随机推荐

  • Linux网络协议栈(五) -- 数据包的发送(based in 2.6.32)

    一 关键数据结构 对于输出封包 设备的数据结构主要包括两个 输出队列 queue 和输出队列规则 queue discipline 我们首先来看输出队列 2 6 18内核中无该结构体 struct netdev queue structne
  • 谈谈App混合开发

    混合开发的App Hybrid App 就是在一个App中内嵌一个轻量级的浏览器 一部分原生的功能改为Html 5来开发 这部分功能不仅能够在不升级App的情况下动态更新 而且可以在Android或iOS的App上同时运行 让用户的体验更好
  • 技术人修炼之道阅读笔记(六)解决对抗性思维方法

    技术人修炼之道阅读笔记 六 解决对抗性思维方法 网上经常看见产品经理和开发人员的段子 例如 杀死一个开发人员不用枪 只需要改三次需求 技术人开会 产品经理能安然无恙坐在这里 是因为门外有保安 等 这些都说明了产品经理和开发人员的矛盾 那么问
  • qt检查文件夹是否有写权限

    Qt 使用如下函数能够判断路径或者文件是否可写 bool QFileInfo isWritable const 对于win10系统实测 结果不准确 继续排查 官方文档描述 a 如果未启用 NTFS 权限检查 Windows 上的结果将仅反映
  • IDEA 程序包不存在,找不到符号但是明明存在对应的jar包 的解决方案

    注 本人刚开始是使用 Settings gt Build gt Build Tools gt Maven gt Runner gt 勾选上Delegagte IDE build run actions to Maven 这种办法 成功解决了
  • 内核管理-之进程虚拟内存-基于linux3.10

    关于启动过程内存管理见 内存管理 之启动 关于内核空间内存管理见 内存管理 之内核内存管理 如果需要 内存管理五章整理成pdf了 下载地址http download csdn net detail shichaog 8662135 进程的虚
  • hashmap 允许key重复吗_搞懂 HashMap,这一篇就够了

    HashMap 概述 如果你没有时间细抠本文 可以直接看 HashMap 概述 能让你对 HashMap 有个大致的了解 HashMap 是 Map 接口的实现 HashMap 允许空的 key value 键值对 HashMap 被认为是
  • Flutter页面关闭时Crash

    Flutter页面关闭时Crash 问题描述 项目中使用了Flutter的WebView组件来加载H5 关闭Activity时 如果FLutter页面中包含 WebView 就会导致Crash 页面中如果没有WebView 则正常关闭 Fl
  • 分布式一致性算法--Paxos

    分布式一致性算法 Paxos 2017 08 31 10 15 0人阅读 评论 0 收藏 编辑 删除 分类 Paxos 1 分布式一致性算法 Paxos Paxos算法是莱斯利 兰伯特 Leslie Lamport 1990年提出的一种基于
  • 深入探索Android稳定性优化

    前言 成为一名优秀的Android开发 需要一份完备的知识体系 在这里 让我们一起成长为自己所想的那样 众所周知 移动开发已经来到了后半场 为了能够在众多开发者中脱颖而出 我们需要对某一个领域有深入地研究与心得 对于Android开发者来说
  • Caffe解惑:为什么Caffe里头有mutable_cpu_data和cpu_data

    一开始看代码的时候会纳闷 为啥caffe里头又一个 cpu data 还要有一个mutable cpu data 其实从字面就可以看出来这个mutable就是易变的意思啦 二话不说翻出源代码看看究竟有啥区别 const void Synce
  • C# 入门教程

    C 简介 C 是一个简单的 现代的 通用的 面向对象的编程语言 它是由微软 Microsoft 开发的 下面列出了C 成为一种广泛应用的专业语言的原因 现代的 通用的编程语言 面向对象 面向组件 容易学习 结构化语言 它产生高效率的程序 它
  • clickhouse-jdbc代码优化实现无感知故障转移及负载均衡

    clickhouse数据库一直以单点功能强悍而闻名 在单点性能上 无人出其右 但是也需要指出的是 clickhouse集群的集群管理功能却是非常薄弱的 比如说无集群统一管理功能 无集群统一读写接口 仅依靠分布式表和副本表 实现了多节点之间数
  • cas cvm服务器虚拟化安装虚拟机,CAS系统如何安装虚拟机

    1 在CVM的云平台中选择一台物理服务器右击 在弹出的选项中选择 增加虚拟机 给虚拟机配置名称 选择操作系统版本 这一步一定要注意 这里选择的操作系统版本指的是会安装对应操作系统版本的驱动 如果这里选择的版本和实际安装的操作系统版本不一致会
  • 使用Python,OpenCV和Hough圆检测图像中的圆

    使用Python OpenCV和Hough圆检测图像中的圆 1 效果图 2 cv2 HoughCircles image method dp minDist 3 源码 参考 前几篇博客中有介绍 使用OpenCV检测图形中的三角形 正方形 矩
  • Oracle sys_guid()函数

    简介 SYS GUID 是Oracle 8i 后提供的函数 产生并返回一个全球唯一的标识符 类似于Java的UUID 使用方法 select sys guid from dual 运行效果 解决乱码 select RAWTOHEX sys
  • JAVA介绍

    1 Java的简单介绍 Java作为C语言和C 的衍生物 其有很多的功能与C语言及C 的功能相似 但是又不同与C语言及C 在Java的领域中 其相对于C语言及C 所具有的特征为没有指针 没有内存管理 具有真正的可移植性 及可以跨平台进行创作
  • 走进音视频的世界——RGB与YUV格式

    在图像的世界里 一般使用RGB作为存储格式 而在视频的世界里 一般使用YUV作为压缩存储格式 有时候面试官会问 为什么视频使用YUV来压缩存储 而不用RGB YUV与RGB有什么区别 两者如何转换的 常见的RGB格式有哪些 常见的YUV格式
  • LInux服务器巡检脚本模版

    Linux服务器巡检脚本模版可以用来定期检查服务器的状态和运行情况 以便及时发现并解决问题 下面是一个简单的巡检脚本模版供参考 bin bash 定义变量 LOG FILE var log server check log EMAIL AD
  • 标签平滑Label Smoothing

    转载 https cloud tencent com developer article 1815786 目录 One hot gt Label Smoothing label smoothing 降低feature norm 标签平滑归一