标签平滑 label smoothing
文章目录
- 简介
- 什么是label smoothing
- label smoothing作用
- torch实现label smoothing
简介
label smoothing其实是机器学习和深度学习上比较常用的一个小 trick。
这里简单做一些记录。
什么是label smoothing
什么是标签平滑呢?
这里举一个例子:
面对一个多分类问题
假设我们的当前对于xi的ground truth 是[0, 0, 0, 1]
说明对于xi来说他属于第四类,但是一般来说我们输出的会是经过softmax激活的一个概率向量,也就是可能为:
[0.013, 0.001, 0.264, 0.721]
不可能输出一个非0即1的向量,这样的概率向量就会是用来计算loss的。
那么什么是label smoothing呢,就是我们将得到的target向量进行多一步的处理:
Element-wise:
targets = targets * (1.0 - smoothing) + 0.5 * smoothing
smoothing 是平滑系数,在0,1之间
这就是label smoothing。
label smoothing作用
很显然,当我们增加label smoothing的时候,loss就会增加。
但是为什么还要使用这样的处理呢。
因为这样能带来几方面的好处:
- 防止过拟合,防止了出现非0即1的情况出现
- 提高模型的泛性
- 提高鲁棒性,当然这我倒是并没有亲身体验,如果有对抗方向的朋友应该就会比较有感触了。
torch实现label smoothing
这里我写代码用到了label smoothing,这是一个分类问题,用的是BCELoss,然后增加了label smoothing。
这里提供一个label smoothing在torch框架下的实现模板:
from torch.nn.modules.loss import _WeightedLoss
## 继承_WeightedLoss类
class SmoothingBCELossWithLogits(_WeightedLoss):def __init__(self, weight=None, reduction='mean', smoothing=0.0):super(SmoothingBCELossWithLogits, self).__init__(weight=weight, reduction=reduction)self.smoothing = smoothingself.weight = weightself.reduction = reduction@staticmethoddef _smooth(targets, n_labels, smoothing=0.0):assert 0 <= smoothing < 1with torch.no_grad():targets = targets * (1 - smoothing) + 0.5 * smoothingreturn targetsdef forward(self, inputs, targets):targets = _smooth(targets, inputs.size(-1), self.smoothing)loss = F.binary_cross_entropy_with_logits(inputs, targets, self.weights)if self.reduction == 'sum':loss = loss.item()elif self.reduction == 'mean':loss = loss.mean()return loss
如果有什么错误,还请大家指正。
标签平滑 label smoothing相关推荐
- 标签平滑 Label smoothing / Temperature Softmax
标签平滑 Label smoothing 逻辑 为什么有效 Temperature Softmax 近期在查看一些训练技巧,无意中发现了标签平滑 Label smoothing,非常简单却有效的一个技 ...
- 标签平滑Label Smoothing
Lable Smoothing 是分类问题中错误标注的一种解决方法. 对于分类问题,特别是多分类问题,常常把向量转换成one-hot-vector(独热向量) one-hot带来的问题:(对于独热的简 ...
- 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作为一种简单的 ...
最新文章
- 智慧城市建设中的五个误区和四大难点
- 使用 jetty-maven-plugin发布maven项目
- 汤森路透为何一定要卖掉SCI?
- vim和NERD树扩展 - 添加文件
- python使用缩进作为语法边界-重庆铜梁高校邦数据科学通识课【Python基础语法】答案...
- HDU3068 最长回文
- Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景
- NGINX原理 之 SLAB分配机制(转)
- 精进:如何成为一个很厉害的人---书摘
- 用ICC编译MP3编码器LAME
- 室外定位篇:一文解读高精度RTK定位
- 拿大厂机器学习岗offer,吐血整理的面试秘籍!
- libVLC 播放控制
- Antd Card study
- 美国弗吉尼亚大学计算机科学,弗吉尼亚大学计算机科学专业
- 第四章 变形-学习笔记+练习题
- 英语语法回顾3——名词和名词性从句
- 【C语言详解】——文件操作(建议收藏)
- 云”到底是什么? 云计算类型细分
- 单摆模型,控制器及其MATLAB图形仿真