深度学习优化技巧--label smoothing

本文都是根据以下链接所得,方便个人知识整理,详情请见原文链接:
深度学习 优化技巧—label smoothing 标签平滑 理解实例

在分类问题中,常对类别的标签进行one-hot处理,但是one-hot存在如下的问题:

  1. 无法保证模型的泛化能力,容易造成过拟合;
  2. 全概率和0概率鼓励所属类别其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难adapt,会造成模型过于相信预测的类别。

一个不成熟的理解:某种物体属于某类别概率为1,其他概率为0,实在假设现有的类别之间时独立的,但是实际上有的类别是相似的,举个不恰当的例子,对于分类任务中:猴子、猩猩进行分类,一个猴脸one-hot编码为[1, 0],它们的脸很相似,对于一张猴脸从特征上看它或许由0.1的概率是猩猩脸,而直接用[1, 0]的概率表述过于绝对

原理:对于以Dirac函数分布的真实标签,我们将它变成分为两部分获得(替换)

  1. 第一部分:将原本Dirac分布的标签变量替换为(1 - ϵ)的Dirac函数;
  2. 第二部分:以概率 ϵ ,在u(k)u(k) 中份分布的随机变量。

代码对应:

def label_smoothing(inputs, epsilon=0.1):
    K = inputs.get_shape().as_list()[-1]    # number of channels
    return ((1-epsilon) * inputs) + (epsilon / K)

代码的第一行是取Y的channel数也就是类别数,第二行就是对应公式了。

下面用一个例子理解一下:

假设我做一个蛋白质二级结构分类,是三分类,那么K=3;

假如一个真实标签是[0, 0, 1],取epsilon = 0.1,

新标签就变成了 (1 - 0.1)× [0, 0, 1] + (0.1 / 3) = [0, 0, 0.9] + [0.0333, 0.0333, 0.0333]

= [0.0333, 0.0333, 0.9333]

实际上分了一点概率给其他两类(均匀分),让标签没有那么绝对化,留给学习一点泛化的空间。

从而能够提升整体的效果。

文章[2]表示,对K = 1000,ϵ = 0.1的优化参数,实验结果有0.2%的性能提升。

参考: [1]. https://blog.youkuaiyun.com/yiyele/article/details/81913031
[2]. Rethinking the Inception Architecture for Computer Vision

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值