【正则化】Label Smoothing详解
1. 概述
Label Smoothing(标签平滑),像 L1、L2 和 Dropout 一样,是一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地预测标签,改善泛化能力差的问题(也是解决错误标注的一种方法)。
2. Label Smoothing
公式如下:
y’_i表示在原标签基础上修改后的标签值,y_i为原标签值。以二分类为例,原标签值为[0,1],经过计算之后,标签值就变为了[0.05,0.95]。简单来说就是把label给重置了一下。
以Cross Entropy为例;
解释如下:
上面提到y’_i为修改后的标签值,那么我们可以在原来Cross Entropy Loss的基础上将原来的标签y_i替换为y’_i,即将上面的公式带入到Cross Entropy Loss中,化简之后为(1-ε)H(y,p)+εH(u,p)
,即在原来loss的基础上又增加了一项。
● 通俗理解:
通俗理解:这个平滑就是一定程度缩小 label 中 min 和 max 的差距,label 平滑可以减 小过拟合,深度学习中的 Loss 实际上就是鼓励模型去接近对应的 label,越接近 Loss 越小。 但是这样真的好吗?或者说,是不是有点过了,尤其针对像交叉熵这类 Loss,一旦 output 有些偏差,Loss 值就往无穷大去了,就逼迫模型去接近真实的 label。万一好不容易接近 label 了,结果这条 training data 还是错的(是很有可能的),或者 training data 并没有完整覆盖所 有类型,那就必须过拟合了。所以,适当调整 label,让两端的极值往中间凑,可以增加泛 化能力。
3. 示例
假设有一批数据在神经网络最后一层的输出值和他们的真实标签
out = np.array([[4.0, 5.0, 10.0], [1.0, 5.0, 4.0], [1.0, 15.0, 4.0]])
y = np.array([[0, 0, 1], [0, 1, 0], [0, 1, 0]])
直接计算softmax交叉熵损失:
res = tf.losses.softmax_cross_entropy(onehot_labels=y, logits=out, label_smoothing=0)
print(tf.Session().run(res))结果为:0.11191821843385696
使用标签平滑后:
res2 = tf.losses.softmax_cross_entropy(onehot_labels=y, logits=out, label_smoothing=0.001)
print(tf.Session().run(res2))
结果为:0.11647378653287888
可以看出,损失比之前增加了,他的标签平滑的原理是对真实标签做了改变,
【正则化】Label Smoothing详解相关推荐
- 容器编排技术 -- Kubernetes kubectl label 命令详解
容器编排技术 -- Kubernetes kubectl label 命令详解 1 kubectl label 2 语法 3 示例 4 Flags kubectl label 更新(增加.修改或删除) ...
- 【正则化】DropBlock详解
1. 简介 Dropout 被广泛地用作全连接层的正则化技术,但是对于卷积层,通常不太有效.Dropout 在卷积层不 work 的原因可能是由于卷积层的特征图中相邻位置元素在空间上共享语义信息, 所 ...
- JS label关键字详解
在 JavaScript 中,使用 label 语句可以为一行语句添加标签,以便在复杂结构中,设置跳转目标.语法格式如下: label : states label 为任意合法的标识符,但不能使用保留 ...
- Label Smoothing标签平滑详解+Pytorch保姆级实际操作
目录 简介 从提出Label Smoothing的论文出发 不使用LS时的情况 不使用LS时可能带来的问题 LS作为正则化的一种方式 具体操作 为何LS可以避免偏激的输出 对LS的另一个角度理解 Py ...
- 标签平滑(Label Smoothing)详解
什么是label smoothing? 标签平滑(Label smoothing),像L1.L2和dropout一样,是机器学习领域的一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地 ...
- 【阿里云课程】详解深度学习优化:泛化与正则化,学习率与最优化
大家好,继续更新有三AI与阿里天池联合推出的深度学习系列课程,本次更新内容为第6课中两节,介绍如下: 第1节:泛化与正则化 第1节课内容为:泛化与正则化,讲述泛化的概念与重要性,各种正则化方法,包括显 ...
- Linux Jump Label/static-key机制详解
Linux Jump Label/static-key机制详解 RToax 2021年3 关于Linux Jump Label(x86)已经进行过概述,下面就static-key进行详述. 内核中有很 ...
- Tkinter 组件详解(一):Label
Tkinter 组件详解之Label Label(标签)组件用于在屏幕上显示文本或图像.Label 组件仅能显示单一字体的文本,但文本可以跨越多行.另外,还可以为其中的个别字符加上下划线(例如用于表示 ...
- Python Tkinter控件之 Label 详解
(Label)标签控件被用于显示文本和图像.标签可包含多行文本,但只能用一种字体. Python Tkinter 标签控件(Label):指定的窗口中显示的文本和图像 注:你如果需要显示一行或多行文本 ...
最新文章
- pandas高级处理-数据离散化
- swift_044(Swift 计算属性和存储属性的概念以及使用)
- Ajax基本案例详解之$.get的实现
- jfinal java搭建_Eclipse快速搭建Jfinal web应用 (一)
- vue中使用高德地图 amap--基础使用方法
- easypoi 导入oracle,记一次由openjdk导致的poi错误(easyexcel)
- SpringCloud学习笔记017---分布式之数据分片处理
- 被苹果“先捧后杀”的操作系统
- 数据结构与算法(二):线性表、栈、树(二叉树,AVL树)、图
- 什么是OpenStack
- java调用一个外部url_java 从程序内部调用外部url/接口
- 关于sybase数据库的连接
- 输入一个三位数,求个位十位百位java代码
- 人工神经网络心得体会_人工智能学习心得
- Windows 10升级无法选择保留个人文件、设置问题解决
- 反转单链表(C语言)
- 【JCC技术】JCC功能演示
- 07中华小姐大赛落幕 20岁佳丽曾光夺冠_longware_新浪博客
- 同事写了一个责任链模式,bug无数...
- 物联网温湿度显示控制项目(网页、Android双端显示搭载linux平台网关MQTT通信)
热门文章
- 判断给定的两个数是否是亲和数_动画演示LeetCode算法题:004-寻找两个有序数组的中位数...
- leecode-11盛最多水的容器C版-双指针的使用
- STM32串口开发之环形缓冲区
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之第一个驱动
- 【蓝桥杯单片机】超声波模块(测距原理,驱动方式)
- 单片机RAM和ROM
- 新格尔软件测试大师,新格尔神雕软件
- JavaScript重难点解析5(对象高级、浏览器内核与事件循环模型(js异步机制))
- Matlab添加BNT工具箱
- node express+socket.io实现聊天室