文章目录

  • 简介
  • 什么是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就会增加。
但是为什么还要使用这样的处理呢。

因为这样能带来几方面的好处:

  1. 防止过拟合,防止了出现非0即1的情况出现
  2. 提高模型的泛性
  3. 提高鲁棒性,当然这我倒是并没有亲身体验,如果有对抗方向的朋友应该就会比较有感触了。

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相关推荐

  1. 标签平滑 Label smoothing / Temperature Softmax

    标签平滑 Label smoothing 逻辑 为什么有效 Temperature Softmax 近期在查看一些训练技巧,无意中发现了标签平滑 Label smoothing,非常简单却有效的一个技 ...

  2. 标签平滑Label Smoothing

    Lable Smoothing 是分类问题中错误标注的一种解决方法. 对于分类问题,特别是多分类问题,常常把向量转换成one-hot-vector(独热向量) one-hot带来的问题:(对于独热的简 ...

  3. Label Smoothing 标签平滑 (Label smooth regularization, LSR)

    Lable Smoothing 是分类问题中错误标注的一种解决方法.是一种正则化方法, 为了降低模型过拟合(overfitting) 出自inception v3,Transformer中就用到了 我 ...

  4. [轻笔记] label smoothing(标签平滑)

    看google AI最新的开源代码,发现有个技巧--label smoothing,网上查到的公式与代码中的公式不一样,于是做个笔记,并对见到的觉得有问题的关于label smoothing的博客也列 ...

  5. 深度学习--TensorFlow(7)拟合(过拟合处理)(数据增强、提前停止训练、dropout、正则化、标签平滑)

    目录 拟合 1.拟合情况 2.抵抗过拟合方法 过拟合处理(防止过拟合): 一.数据增强 1.设置图像生成器 2.载入图片 3.图像转三维数据 4.三维转四维 5.生成图片(用图像生成器) 代码 二.提 ...

  6. 【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正则化 在一次询问 ...

  7. 垃圾分类、EfficientNet模型、数据增强(ImageDataGenerator)、混合训练Mixup、Random Erasing随机擦除、标签平滑正则化、tf.keras.Sequence

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 垃圾分类.EfficientNet模型.数据增强(ImageD ...

  8. Label Smoothing介绍及其代码实现

    一.标签平滑(Label Smoothing)介绍 标签平滑(Label Smoothing)的原理其实很简单,它大部分的用处用一句话总结就是: 修改数据集的标签来增加扰动,避免模型的判断过于自信从而 ...

  9. label smooth标签平滑的理解

    今天我们来聊一聊label smooth这个tricks,标签平滑已经成为众所周知的机器学习或者说深度学习的正则化技巧.标签平滑--label smooth regularization作为一种简单的 ...

最新文章

  1. C#游戏开发快速入门教程Unity5.5教程
  2. opencv(2)- 处理像素值
  3. 【风控模型】神经网络DNN算法构建信用评分卡模型
  4. 如何让.net程序自动运行在管理员权限下
  5. 下载量过百万的吴恩达机器学习和深度学习笔记更新了!(附PDF下载)
  6. php小程序onload,微信小程序 loading 组件实例详解
  7. 描述符演练-01-完善代码,使得对象添加属性的行为可以成功
  8. java ui设计用什么_什么是UI设计?
  9. 鸿蒙os在3月底推送,华为鸿蒙OS Beta 3将从3月31日起推送
  10. 根据经纬度计算两点间的距离_全班学生被此奥数题难倒,理解两点间距离公式的几何意义是关键...
  11. 1032. Sharing (25)
  12. 阿里云的短信验证码功能实现
  13. 几何布朗 matlab,几何布朗运动
  14. 服务器运行cad慢,CAD绘图唯快不破(CAD运行用加速技巧)
  15. mysql CONCAT函数 用于隐藏银行卡号码
  16. Halting Problem的讨论
  17. 学习ARM开发(6)
  18. 摩拜单车用户行为数据分析报告
  19. npm install时cb() never called!错误解决方法
  20. 海康 大华 华为 宇视等安防摄像头、NVR、平台网关通过GB28181接入LiveGBS流媒体服务实现WEB无插件直播

热门文章

  1. 香蕉派(Banana Pi) BPI-M2 Zero 评测试,与树莓派 Zero同尺寸的开发板
  2. 网络经济与企业管理 章节图
  3. 计算机网络基础知识——网络层知识框架
  4. 场景判断方法expected_conditions
  5. 小象奶茶馆结算系统3.0版本(python)
  6. 基于SSM技术的汽车销售系统
  7. layui上传文件时显示正在加载
  8. 硬件创业的精益时代:从原型到生产都是泪
  9. allegro17.2转PADS VX2.5
  10. oracle查看rman进度,监控数据备份恢复完成进度(EXPDP/IMPDP/RMAN)