【AI面试】Label Smoothing Loss 和 Smooth L1 Loss
创始人
2025-05-28 02:29:38
0

往期文章:

  1. AI/CV面试,直达目录汇总
  2. 【AI面试】NMS 与 Soft NMS 的辨析
  3. 【AI面试】L1 loss、L2 loss和Smooth L1 Loss,L1正则化和L2正则化

第一次听说Label Smoothing Loss ,还是在一次询问chatGPT时候,在他的回答中,提到了。其中下面的问题,和chatGPT的回答,都展示在了下面的地方。

smooth
原本我是想到了在faster RCNN目标检测算法中,对于目标框的位置回归部分,通常采用Smooth L1 Loss。于是我就想到,Smooth L1 Loss是否特能用于分类任务呢?当然,这里我就是脑洞一问,得知了用于分类任务中的Label Smoothing Loss

Label Smoothing LossSmooth L1 Loss里面,都有smooth,光滑的,平坦的,平整的。从Smooth L1 Loss,我们知道他是在L1 Loss的基础上,引入了L2 loss。在[1,1]的范围内,采用L2 loss,其他段都是L1 loss

一是避免了L1 lossx0的不可导,也使得在0附近的优化更加的平缓。具体的可以参考这里:【AI面试】L1 loss、L2 loss和Smooth L1 Loss,L1正则化和L2正则化

图

吸取Smooth L1 Loss的思想,在分类任务中,也想要Smooth 一些。于是,Label Smoothing运用而生。首席推荐阅读:

  1. 标签平滑 - Label Smoothing概述

上完上面,理解的,再看下面的:

  1. Wenet之LabelSmoothingLoss

实现方式:label_smoothing_loss.py

通过上述两个文章,大概就对Label Smoothing Loss 有了大概的了解,也知道他为什么要改写one-hot标签,而采用smooth的形式,平滑标签,使得参与损失loss计算的值,不只是局限于目标为1的点。

在这里插入图片描述

1、One Hot Label --> Smoothing Label

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

  • 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的损失呢:

2可以看出,根据CE-loss的公式,只有y中为1的那一维度参与了loss的计算,其他的都忽略了。这样就会造成一些后果:

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

总之,这都是由one-hot的不合理表示造成的,因为one-hot只是对真实情况的一种简化,其他错误并不参与损失计算。面对one-hot可能带来的容易过拟合的问题,有研究提出了Label Smoothing方法:

在这里插入图片描述
label smoothing就是把原来的one-hot表示,在每一维上都添加了一个随机噪音。这是一种简单粗暴,但又十分有效的方法,目前已经使用在很多的图像分类模型中了。

2、优劣势

one-hot 劣势:

  • 可能导致过拟合。0或1的标记方式导致模型概率估计值为1,或接近于1,这样的编码方式不够soft,容易导致过拟合。因为用于训练模型的training set通常是很有限的,往往不能覆盖所有的情况,特别是在训练样本比较少的情况下更为明显

Label Smoothing 优势:

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

Label Smoothing 劣势:

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

3、发散总结

Smooth L1 Loss中的Smooth,引申到分类任务中,在label部分引入Smooth操作,平滑one hot的标签,使得模型的优化目标不再是1,而是一个小于1的数值。避免了过分的追求完美,使得模型过拟合。

但是,经过自己的粗浅思考,这种方法对于分类目标类别之间的特征差异较小,分类较难的任务,应该是有比较好的改观的,主要的改观就体现在泛化性上面。

而对于分类目标类别之间的特征差异较大,比较好分开的分类任务中,就没有必要引入smooth的操作了。因为这样会使得训练没有充分的挖掘模型的分类能力。模型能考100分,非要考90就可以,可能泛化性不够。

除此之外,发散开来。如果对于类别之间界限没有那么的清晰的分类任务场景,比如等级分类。同一事物,介于5级和6级之间,那往6上分也可以,往5上分也行的标签,是不是可以采用更加smooth的方式,使得除去目标1外的标签,不是均等的。这种最终还是需要有一个最大的值,只是这个值的数可能会更小。

上述的内容,都还需要检验。先学习记录,待后续补充。

相关内容

热门资讯

Java Virtual Ma... Java Virtual Machine(JVM,Java虚拟机...
都说软件测试岗位是个人都会,但... 上一个说软件测试简单的,已经被面试官问emo了... 现在已经过了 ”不会但我会学“ ...
数据库面试题——锁 了解数据库的锁吗? 锁是数据库系统区别于文件系统的一个关键特性,锁机制用...
k8s pod 基本信息 1,最小部署单元 2,包含多个容器(一组容器的...
*9 set up 注意点 1、set up 执行的时机:beforeCreate 之前执行一次,t...
Maven的生命周期与插件 一、maven对项目构建的生命周期划分为运行三个阶段。 1、clean:清理工作。 ...
系统集成项目管理工程师:第10... 第10章项目质量管理 一、目录 10.1 项目质量管理概论 10.1.1 质量及质量管理概念 10...
数据结构--二叉树 目录1.树概念及结构1.1数的概念1.2数的表示2.二叉树概念及结构2.1二叉树的概念2.2数据结构...
vue项目关于iframe嵌套... 1.需求 这两天工作中遇到一个这样的需求,切换tab标签时,要求对应的t...
【springboot】单元测... 1、JUnit5 的变化 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元...
JVM学习笔记 01 - JV... JVM、JDK和JRE JVM全称 Java Virtual Machine,也就是我...
[ 红队知识库 ] Windo... 🍬 博主介绍 👨‍🎓 博主介绍:大家好...
Jmeter——性能测试的认知... 前言 性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,...
嵌入式软件开发之Linux下C... 目录 前沿 Hello World! 编写代码 编译代码 GCC编译器  gcc 命...
中国移动牵头定义【“1”个技术... 开放隐私计算 《中国移动“1+X”隐私计算平台纳管集成规范》于2月10日正式发布࿰...
Kubernetes Pod的... Kubernetes Pods被驱逐是什么意思?它们被终止了,通常是由于...
Python初学者必备技能,使... 哈喽兄弟们,今天来分享一下,Python初学者必须要学会的技能ÿ...
案例26-Nacos命名空间和... 目录 一、背景介绍 二、实现思路 三、集成Nacos 1.创建命名空间 2. 添加配置文件 3.创建...
Springboot是怎么解决... 什么是跨域?简单理解,就是在不前网页下,试图访问另外一个不...
< Linux > 多线程(单... 目录 1、单例模式         饿汉方式实现单例模式         懒汉方式实现单例模式   ...