本文都是根据以下链接所得,方便个人知识整理,详情请见原文链接:
深度学习 优化技巧—label smoothing 标签平滑 理解实例
在分类问题中,常对类别的标签进行one-hot处理,但是one-hot存在如下的问题:
- 无法保证模型的泛化能力,容易造成过拟合;
- 全概率和0概率鼓励所属类别其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难adapt,会造成模型过于相信预测的类别。
一个不成熟的理解:某种物体属于某类别概率为1,其他概率为0,实在假设现有的类别之间时独立的,但是实际上有的类别是相似的,举个不恰当的例子,对于分类任务中:猴子、猩猩进行分类,一个猴脸one-hot编码为[1, 0],它们的脸很相似,对于一张猴脸从特征上看它或许由0.1的概率是猩猩脸,而直接用[1, 0]的概率表述过于绝对
原理:对于以Dirac函数分布的真实标签,我们将它变成分为两部分获得(替换)
- 第一部分:将原本Dirac分布的标签变量替换为(1 - ϵ)的Dirac函数;
- 第二部分:以概率 ϵ ,在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
486

被折叠的 条评论
为什么被折叠?



