标签平滑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 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
标签平滑Label Smoothing相关推荐
- 标签平滑 Label smoothing / Temperature Softmax
标签平滑 Label smoothing 逻辑 为什么有效 Temperature Softmax 近期在查看一些训练技巧,无意中发现了标签平滑 Label smoothing,非常简单却有效的一个技 ...
- 标签平滑 label smoothing
文章目录 简介 什么是label smoothing label smoothing作用 torch实现label smoothing 简介 label smoothing其实是机器学习和深度学习上比 ...
- Label Smoothing 标签平滑 (Label smooth regularization, LSR)
Lable Smoothing 是分类问题中错误标注的一种解决方法.是一种正则化方法, 为了降低模型过拟合(overfitting) 出自inception v3,Transformer中就用到了 我 ...
- [轻笔记] label smoothing(标签平滑)
看google AI最新的开源代码,发现有个技巧--label smoothing,网上查到的公式与代码中的公式不一样,于是做个笔记,并对见到的觉得有问题的关于label smoothing的博客也列 ...
- 深度学习--TensorFlow(7)拟合(过拟合处理)(数据增强、提前停止训练、dropout、正则化、标签平滑)
目录 拟合 1.拟合情况 2.抵抗过拟合方法 过拟合处理(防止过拟合): 一.数据增强 1.设置图像生成器 2.载入图片 3.图像转三维数据 4.三维转四维 5.生成图片(用图像生成器) 代码 二.提 ...
- 【AI面试】hard label与soft label,Label Smoothing Loss 和 Smooth L1 Loss
往期文章: AI/CV面试,直达目录汇总 [AI面试]NMS 与 Soft NMS 的辨析 [AI面试]L1 loss.L2 loss和Smooth L1 Loss,L1正则化和L2正则化 在一次询问 ...
- 垃圾分类、EfficientNet模型、数据增强(ImageDataGenerator)、混合训练Mixup、Random Erasing随机擦除、标签平滑正则化、tf.keras.Sequence
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 垃圾分类.EfficientNet模型.数据增强(ImageD ...
- Label Smoothing介绍及其代码实现
一.标签平滑(Label Smoothing)介绍 标签平滑(Label Smoothing)的原理其实很简单,它大部分的用处用一句话总结就是: 修改数据集的标签来增加扰动,避免模型的判断过于自信从而 ...
- label smooth标签平滑的理解
今天我们来聊一聊label smooth这个tricks,标签平滑已经成为众所周知的机器学习或者说深度学习的正则化技巧.标签平滑--label smooth regularization作为一种简单的 ...
最新文章
- 票房破五十亿!用Python分析李焕英为啥能逆袭《唐探3》
- InteractiveGraph 实现酷炫关系图谱之前瞻
- 数据结构与算法试题集锦
- Processing Orders With Windows Workflow
- angular 路由页面不刷新
- EasyStruct.js轻松创建可填入式html模板结构
- 数据结构 链表(一)
- linux配置apache tomcat,linux下apache+tomcat的配置实现
- 阅读书源最新2020在线导入_书源篇三及6.5.0版本介绍
- 剩余 大小 查看内存_JVM的内存分配策略以及进入分代的条件
- 会议系统m900服务器网口灯,【中兴视频会议多点控制单元ZXV10 M900-64MA 今日特卖】价格,厂家,视讯会议系统-搜了网...
- android ble 调试工具,分享一个蓝牙BLE调试小程序LightBlue
- 手动配置S2SH三大框架报错(三)
- MPQ8873电源芯片配置
- c# u盘使用记录_用 C# 编写 USB 存储设备使用痕迹检测和删除工具
- 计算机硬件广告语,硬件防毒广告宣传语
- 最新版火车头织梦内容发布规则_火车头采集 - 织梦图集发布模块的制作
- MugLife静态照片变3D动画算法研究
- Channel 是什么?
- 十一、SpringCloud实用篇_Gateway服务网关
热门文章
- 所有国家的信息数据(包含图片对应、区号前缀、国家名字、国家缩写)js、ts
- 5G基站用电难题的转机?8大突破案例、25项政策支持!
- AD10: 操作环境中英文切换
- hexo博客matery主题个性化配置
- Android Bitmap内存限制
- uni-app微信小程序开发,引入微信同声传译插件
- 交易开拓者在哪里回测_请问这个策略有偷价或者未来函数行为吗?回测效果很好-开拓者知识 -程序化交易(CXH99.COM)...
- 服务器上运行Selenium
- 漏洞复现 - - - 未授权访问漏洞Redis
- 开发板可以ping通百度IP,但是不能ping百度域名 提示ping: bad address 'www.baidu.com'