zoukankan      html  css  js  c++  java
  • (5)label smooth

    参考博客https://blog.csdn.net/qiu931110/article/details/86684241

    在多分类任务中我们往往无论是使用sigmod函数还是softmax函数,最终都要经过交叉熵函数计算loss:

     最终在训练网络时,最小化预测概率和标签真实概率的交叉熵,从而得到最优的预测概率分布。如果分类正确p=y,loss=0,否则若p=1-y,loss趋近于无穷大。也就是说交叉熵会尽量拉大正确和错误的差值,这样有两个后果。

    1.如果我们的标注数据没有那么准确,导致模型混乱,也就是说鲁棒性不强;

    2.如果训练样本不能表征所有样本特征,那么这种强制拉大两者距离的做法很容易过拟合,导致模型泛化能力弱。

    为了解决这个问题,在2016年,Szegedy等人提出了inception v2的模型(论文:Rethinking the inception architecture for computer vision.)。其中提到了Label Smoothing技术,用以减轻这个问题。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将交叉熵损失函数作如下改变:

    其实我们可以理解为过拟合与模型的能力和参数个数有关,我们相当于在label空间内做了个data augmentation,或者理解为加入了噪声,用来缓解过拟合。

    在yolov3中这样使用(无论是focal loss 还是label smooth,yolov3都没有处理交叉熵):

  • 相关阅读:
    Shell脚本——DHCP自动部署
    Shell脚本——DNS自动部署
    (四)跟我一起玩Linux网络服务:DHCP服务配置之中继代理
    Java-线索二叉树的实现
    Java-堆排序
    Java-二叉树-插入、删除、遍历
    Java-进制转换
    Java--消除重复数字后的最大值
    Java-动态规划-最多苹果数量的方法
    Java-Pi的几种实现
  • 原文地址:https://www.cnblogs.com/super-zheng/p/13258128.html
Copyright © 2011-2022 走看看