首页 > 其他分享 >标签平滑-Label Smoothing

标签平滑-Label Smoothing

时间:2023-07-06 17:23:59浏览次数:53  
标签:Smoothing smoothing 函数 标签 分类 label Label

********************2023年07月06日17:13:20**********************

参考我的notability中的笔记学习更快

***********************************分割线****************************************************************
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 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

 

标签:Smoothing,smoothing,函数,标签,分类,label,Label
From: https://www.cnblogs.com/chentiao/p/17532760.html

相关文章

  • 2023-07-06 uview-ui组件u-checkbox设置label-disabled无效==》点击文本仍旧触发check
    解决方案:既然无效,那就给checkbox包裹的文本绑定一个点击事件,该点击事件使用.stop来阻止事件冒泡,这样点击文本就不会触发checkbox的change了,可以参考一下代码:<u-checkbox><[email protected]="stopBack"></View></u-checkbox>关键点:@click.stop注:改问题出自uview-ui1.......
  • 根据服务标签id优化表A与表B的数据匹配方法
    You两个表都有一个字段,ServiceTagIDsstringjson:"service_tag_ids"//服务标签id,用英文逗号隔开,怎么根据这些服务标签id从表A的记录找出表B的记录Genie要根据表A的记录中的服务标签id,找出表B的记录,你可以使用数据库查询语句来实现。假设表A的名称为table_a,字段名......
  • 5分钟学会img标签加载图片404错误解决方案
      在开发中,使用<imgsrc="/img/yys.png"/>加载图片时,会有404错误,也就是图片未找到问题。  现将解决办法 总结如下:  当图片未找到或者404时,就会触发<img/>标签的 onerror属性显示其中的图片。1、直接拼写路径方式:<imgsrc="img/yys.png"onerror="javascript......
  • Spring中bean标签的所有属性以及作用
    在Spring中,bean标签用于定义和配置bean对象。以下是常用的bean标签属性及其作用:id:指定bean的唯一标识符。在整个Spring容器中,每个bean都必须有一个唯一的id。class:指定bean的类名。通过该属性,Spring将实例化并管理指定类的对象作为bean。name:用于指定bean的名称。除了id属性......
  • Spring配置文件中的 context:property-placeholder标签 所有的属性以及作用
    <context:property-placeholder>是Spring框架中的一个标签,用于加载和解析属性文件,并将属性值注入到Spring容器中的bean中。以下是<context:property-placeholder>的常用属性及其作用:location:指定属性文件的位置。可以使用classpath前缀指定类路径下的属性文件,也可以使用文件系......
  • Spring配置文件中,bean标签下是各个子标签的作用解释
    bean标签的子标签propertyconstructor-argdescriptionlookup-methodmetaqualifierreplaced-method在Spring配置文件中,bean标签下是各个标签的作用解释:<property>:用于设置bean的属性值。它可以用于注入基本类型、引用类型或其他属性。通过指定属性名称和对应的值,可以......
  • el-select获取当前选择的label值
    例如<el-selectv-model="biaotou11"placeholder="请选择模型类别"clearable@change="biaotouchange"ref="dataTypeSelect1"><el-optionv-for="tabnamein......
  • cesium三维模型加文字标签
    给三维模型加文字标签,可以在找不到模型的时候双击标签,直接定位模型,但是模型是放在地球平面上的,它的中心点是底部中心点,label也显示在这个底部的中心点,想把这个label调整到合适的位置,可以使用 eyeOffset属性,设置文字的三维偏移,靠近还是远离眼睛,用的是z轴,负数表示靠近,正数表示远......
  • 记录--多行标签超出展开折叠功能
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言 记录分享每一个日常开发项目中的实用小知识,不整那些虚头巴脑的框架理论与原理,之前分享过抽奖功能、签字功能等,有兴趣的可以看看本人以前的分享。 今天要分享的实用小知识是最近项目中遇到的标签相关的功......
  • IOS开发-设置UILabel行间距lineSpacing
    1.如何设置UILabel行间距lineSpacing UILabel是没有这么一个直接暴露的属性的,想要修改lineSpacing,我们需要借助NSAttributedString来实现。NSMutableParagraphStyle*style=[NSMutableParagraphStylenew];style.lineSpacing=15;NSMutableDictionary*attribu......