标签平滑Label Smoothing

article/2025/8/19 4:20:20

Lable Smoothing
是分类问题中错误标注的一种解决方法。

对于分类问题,特别是多分类问题,常常把向量转换成one-hot-vector(独热向量)
one-hot带来的问题:(对于独热的简单解释:https://blog.csdn.net/qq_43211132/article/details/96141409)
对于损失函数,我们需要用预测概率去拟合真实概率,而拟合one-hot的真实概率函数会带来两个问题:
1)无法保证模型的泛化能力,容易造成过拟合;
2) 全概率和0概率鼓励所属类别和其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难适应。会造成模型过于相信预测的类别

使用下面的 label smoothing 可以缓解这个问题:
在这里插入图片描述
原理:对于以Dirac函数分布的真实标签,我们将它变成分为两部分获得(替换)。

  1. 第一部分:将原本Dirac分布的标签变量替换为(1 - ϵ)的Dirac函数;

  2. 第二部分:以概率 ϵ ,在u(k) 中份分布的随机变量(u(k)是类别分之一)
    代码:

def label_smoothing(inputs, epsilon=0.1):K = inputs.get_shape().as_list()[-1]    # number of channelsreturn ((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


http://chatgpt.dhexx.cn/article/iyjEv4dD.shtml

相关文章

模型优化之Label Smoothing

1. 引言 Label Smoothing 又被称之为标签平滑,常常被用在分类网络中来作为防止过拟合的一种手段,整体方案简单易用,在小数据集上可以取得非常好的效果。 Label Smoothing 做为一种简单的训练trick,可以通过很少的代价&#xff08…

Smoothing

文章目录 返回主目录Add-one SmoothingAdd-K SmoothingInterpolationGood-Turning Smoothing 返回主目录 这是一个系列的文章,点击返回综合目录页 Add-one Smoothing P A d d − 1 ( W i ∣ W i − 1 ) C ( W i − 1 , W i ) 1 C ( W i ) V P_{Add-1}(W_i|W_{i-…

分类任务中常用的Label smoothing

目录 1.Label smoothing的原理 2.pytorh中如何使用Label smoothing 3.适用场景 1.Label smoothing的原理 交叉熵损失(softmax cross Entropy)中,常用公式: yi: 表示样本i的label,正类为1,负类为0; pi:…

平滑(smoothing)

1 问题的提出 由于在现实生活中,我们的观察尺度有限,我们的样本(输入)很可能没有办法包含所有可能的情况,那么我们怎么去处理先前看不见的事件呢? 举个例子,莎士比亚使用了30000个双连词(bigra…

【简单理解】自然语言处理-平滑方法(Smoothing)

【简单理解】自然语言处理-平滑方法(Smoothing) 简单介绍平滑策略 平滑策略的引入,主要使为了解决语言模型计算过程中出现的零概率问题。零概率问题又会对语言模型中N-gram模型的Perplexity评估带来困难。 零概率问题,就是在计算实例的概率时&#xf…

二十二、动网格Smoothing Spring方法及实例

1 概念介绍 最近一直忙着其他的事情,好久都没有更新,让各位家人们久等了。 今天我们接着聊一聊动网格问题,我们在文章二十一中介绍了动网格的Layering方法,但是Layering方法的局限性很高,只能对四边形网格或六面体网格…

numpy安装

1.以管理员的形式打开cmd 2.安装numpy插件 pip install numpy 3.安装成功后,输入pip list 命令查看是否安装成功 pip list 3.创建 #使用array创建一维数组 list01 [1,2,3,4] np01 np.array(list01) print(np01) print(type(np01)) #使用array创建二维数组 …

Matplotlib安装

安装matplotlib 使用python中pip命令安装 使用python中pip命令安装 第一步:使用winR输入cmd命令打开命令窗口,找到python安装目录下的Scripts目录,使用python -m pip install matplotlib命令 如果出现以下错误或警告,则需按照指示…

node安装

1、进入node官网,下载长期支持版,安装 2、输入node -v,能查询到版本号即为安装成功 3、为方便管理,修改默认的缓存和模块存放路径(C:\Users\Administrator\AppData\Roaming\npm),在nodede 安装文…

如何安装仿宋GB2312字体

步骤: 一、下载仿宋_GB2312.zip压缩包并解压缩; 百度网盘:https://pan.baidu.com/s/1L7yYKhoDmUw1RpNXVS5KDQ 提取码:eclz 阿里云盘:https://www.aliyundrive.com/s/ih3kDDidcGa 二、双击打开字体文件,…

安装Matplotlib

文章目录 一、pip安装二、conda安装1、anaconda navigator安装2、condan命令安装 一、pip安装 运行如下的命令即可 pip install matplotlib二、conda安装 Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等。conda是一个开源的…

cnpm安装

1.将node安装到D:\Program Files\nodejs目录。 2.设置npm全局安装路径与缓存路径 npm config set prefix "D:\Program Files\nodejs\node_global" npm config set cache "D:\Program Files\nodejs\node_cache" 3.安装cnpm npm install -g cnpm --regis…

torch安装

第n次安装了,每次都得结合很多篇才能安装成功,这次直接自己写一个。 一、安装anaconda 这个自己搜吧,挺简单的。 二、安装pytorch 进入anaconda prompt 创建一个虚拟环境(就不用再安装python了,创建之后直接就是用…

pytorch安装

(一)安装Anaconda 1、详细步骤这里不多说。anaconda安装时会自带安装相应的python版本。 安装完成后,可以运行cmd,使用conda --version查看anaconda的版本;用conda list查看安装的包,这里面也包含了python…

halcon21.11安装教程详解

文章目录 1.软件下载2.安装过程 halcon21.11安装教程详解 1.软件下载 a 官网:https://www.mvtec.com/cn b 百度网盘下载 链接:https://pan.baidu.com/s/1-Bdz1l54PQWxbDBkSlILlA 提取码:a5yg 2.安装过程 解压之后,双击som.exe…

安装TensorFlow

文章目录 1.准备工作2.安装TensorFlow3.激活tensorflow 1.准备工作 在安装TensorFlow之前得先安装Anaconda如果还没有进行安装,可以看我主页安装Anaconda教程 2.安装TensorFlow 我们打开Anaconda Prompt 输入python -m pip install -U pip,按回车等待…

Nodejs安装教程

目录 一、安装环境 二、安装步骤 三、验证安装 四、修改全局模块下载路径 五、更换npm源为淘宝镜像 六、全局安装基于淘宝源的cnpm 总结 一、安装环境 本教程演示的环境:win 10 64位node.js下载官网: nodejs官网. 点击选中图标下载到电脑本地即可。 二、安…

操作系统第一次作业

一.执行运行VirtualBox的安装程序 1、进入安装向导,点击下一步。 2、进入自定安装,软件的位置默认在c盘,可以将软件的位置自定义,注意这里需要点击VirtualBox Networking,选择将整个功能安装到本机硬盘,点…

如何安装Java、Idea、mysql

Java、Idea手把手教你如何安装 一、java 如何安装二、 java配置环境变量三、Idea 如何安装四、IDEA安装成功五、如何安装mysql1、下载mysql2、安装Mysql3.检查必需项(Check Requirements)5.进入配置界面 Product Configuration,Next6、进行服…

windows10 输入法 切换 热键 快捷键 更改 设置

windows10 输入法 切换 热键 快捷键 设置 点击左下角窗口图标“开始”,点击齿轮图标“设置”,输入“高级键盘设置”并选择, 点击“输入语言热键“ 选择要改的项目,点击”更改按键顺序“