深度学习面试题28:标签平滑(Label smoothing)

目录

  产生背景

  工作原理

  参考资料



产生背景

假设选用softmax交叉熵训练一个三分类模型,某样本经过网络最后一层的输出为向量x=(1.0, 5.0, 4.0),对x进行softmax转换输出为:

假设该样本y=[0, 1, 0],那损失loss:

按softmax交叉熵优化时,针对这个样本而言,会让0.721越来越接近于1,因为这样会减少loss,但是这有可能造成过拟合。可以这样理解,如果0.721已经接近于1了,那么网络会对该样本十分“关注”,也就是过拟合。我们可以通过标签平滑的方式解决。

以下是论文中对此问题的阐述:

返回目录


工作原理

假设有一批数据在神经网络最后一层的输出值和他们的真实标签

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

可以看出,损失比之前增加了,他的标签平滑的原理是对真实标签做了改变,源码里的公式为:

# new_onehot_labels = onehot_labels * (1 - label_smoothing) + label_smoothing / num_classes

new_onehot_labels = y * (1 - 0.001) + 0.001 / 3

print(y)

print(new_onehot_labels)

[[0 0 1]

[0 1 0]

[0 1 0]]

[[3.33333333e-04 3.33333333e-04 9.99333333e-01]

[3.33333333e-04 9.99333333e-01 3.33333333e-04]

[3.33333333e-04 9.99333333e-01 3.33333333e-04]]

然后使用平滑标签计算softmax交叉熵就能得到最终的结果了,我们也可以验证一下:

res3 = tf.losses.softmax_cross_entropy(onehot_labels=new_onehot_labels, logits=out, label_smoothing=0)

print(tf.Session().run(res3))

结果为:0.11647378653287888

完整代码:

import numpy as np
import tensorflow as tf

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]])

res = tf.losses.softmax_cross_entropy(onehot_labels=y, logits=out, label_smoothing=0)
print(tf.Session().run(res))

res2 = tf.losses.softmax_cross_entropy(onehot_labels=y, logits=out, label_smoothing=0.001)
print(tf.Session().run(res2))

# new_onehot_labels = onehot_labels * (1 - label_smoothing)
#                           + label_smoothing / num_classes

new_onehot_labels = y * (1 - 0.001) + 0.001 / 3
print(y)
print(new_onehot_labels)
res3 = tf.losses.softmax_cross_entropy(onehot_labels=new_onehot_labels, logits=out, label_smoothing=0)
print(tf.Session().run(res3))

返回目录


参考资料

Rethinking the Inception Architecture for Computer Vision

标签平滑(Label Smoothing)——分类问题中错误标注的一种解决方法

https://www.datalearner.com/blog/1051561454844661

返回目录

原文地址:https://www.cnblogs.com/itmorn/p/11254448.html

时间: 2024-10-14 09:26:58

深度学习面试题28:标签平滑(Label smoothing)的相关文章

标签平滑(label smoothing)的通俗理解

具体公式和思想可以看 https://www.cnblogs.com/itmorn/p/11254448.html 先说结果:label平滑可以减小过拟合 说白了,这个平滑就是一定程度缩小label中min和max的差距.损失函数实际上就是鼓励模型去接近对应的label,越接近loss越小,巴不得label为1的时候output是0.999... 但是这样真的好吗?或者说,是不是太过了,尤其针对像交叉熵这类loss,一旦output有些偏差,loss值就往无穷大走了,就逼迫模型去接近真实的lab

深度学习面试题29:GoogLeNet(Inception V3)

目录 使用非对称卷积分解大filters 重新设计pooling层 辅助构造器 使用标签平滑 参考资料 在<深度学习面试题20:GoogLeNet(Inception V1)>和<深度学习面试题26:GoogLeNet(Inception V2)>中对前两个Inception版本做了介绍,下面主要阐述V3版本的创新点 使用非对称卷积分解大filters InceptionV3中在网络较深的位置使用了非对称卷积,他的好处是在不降低模型效果的前提下,缩减模型的参数规模,在<深度学

深度学习面试题27:非对称卷积(Asymmetric Convolutions)

目录 产生背景 举例 参考资料 产生背景 之前在深度学习面试题16:小卷积核级联卷积VS大卷积核卷积中介绍过小卷积核的三个优势: ①整合了三个非线性激活层,代替单一非线性激活层,增加了判别能力. ②减少了网络参数. ③减少了计算量 在<Rethinking the Inception Architecture for Computer Vision>中作者还想把小卷积核继续拆解,从而进一步增强前面的优势 返回目录 举例 一个3*3的卷积可以拆解为:一个3*1的卷积再串联一个1*3的卷积,实验证

深度学习面试题13:AlexNet(1000类图像分类)

目录 网络结构 两大创新点 参考资料 第一个典型的CNN是LeNet5网络结构,但是第一个引起大家注意的网络却是AlexNet,Alex Krizhevsky其实是Hinton的学生,这个团队领导者是Hinton,于2012年发表论文. AlexNet有60 million个参数和65000个 神经元,五层卷积,三层全连接网络,最终的输出层是1000通道的softmax.AlexNet利用了两块GPU进行计算,大大提高了运算效率,并且在ILSVRC-2012竞赛中获得了top-5测试的15.3%

深度学习面试题12:LeNet(手写数字识别)

目录 神经网络的卷积.池化.拉伸 LeNet网络结构 LeNet在MNIST数据集上应用 参考资料 LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务.自那时起,CNN的最基本的架构就定下来了:卷积层.池化层.全连接层.如今各大深度学习框架中所使用的LeNet都是简化改进过的LeNet-5(-5表示具有5个层),和原始的LeNet有些许不同,比如把激活函数改为了现在很常用的ReLu. 神经网络的卷积.池化.拉伸 前面讲了卷积和池化,卷积层可以从图像中提取特

深度学习面试题16:小卷积核级联卷积VS大卷积核卷积

目录 感受野 多个小卷积核连续卷积和单个大卷积核卷积的作用相同 小卷积核的优势 参考资料 感受野 在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小.再通俗点的解释是,特征图上的一个点对应输入图上的区域,如下图所示: 返回目录 多个小卷积核连续卷积和单个大卷积核卷积的作用相同 像LeNet.AlexNet网络,都是用了较大的卷积核,目的是提取出输入图像更大邻域范围的信息,一般是卷积与池化操

深度学习面试题14:Dropout(随机失活)

目录 卷积层的dropout 全连接层的dropout Dropout的反向传播 Dropout的反向传播举例 参考资料 在训练过程中,Dropout会让输出中的每个值以概率keep_prob变为原来的1/keep_prob倍,以概率1-keep_prob变为0.也就是在每一轮的训练中让一些神经元随机失活,从而让每一个神经元都有机会得到更高效的学习,会让网络更加健壮,减小过拟合. 在预测过程中,不再随机失活,也不在扩大神经元的输出. 卷积层的dropout 举例:以一个2*4的二维张量为例,参数

深度学习面试题17:VGGNet(1000类图像分类)

目录 VGGNet网络结构 论文中还讨论了其他结构 参考资料 2014年,牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发出了新的深度卷积神经网络:VGGNet,并取得了ILSVRC2014比赛分类项目的第二名(第一名是GoogLeNet,也是同年提出的)和定位项目的第一名. VGGNet探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能

深度学习面试题18:网中网结构(Network in Network)

目录 举例 参考资料 网中网结构通过多个分支的运算(卷积或池化),将分支上的运算结果在深度上连接 举例 一个3*3*2的张量, 与3个1*1*2的卷积核分别same卷积,步长=1, 与2个2*2*2的卷积核分别same卷积,步长=1, 与1个3*3*2的掩码最大值same池化,步长=1, 将得到的这3个结果在深度方向上拼接 GoogLeNet是基于类似网中网模块设计的网络结构,在GoogLeNet中该模块称为 Inception Module,多个Inception Module 模块可以组合成