什么是label smoothing?
标签平滑(Label smoothing),像L1、L2和dropout一样,是机器学习领域的一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地预测标签,改善泛化能力差的问题。
为什么需要label smoothing?
对于分类问题,我们通常认为训练数据中标签向量的目标类别概率应为1,非目标类别概率应为0。传统的one-hot编码的标签向量
y
i
y_i
yi为,
y
i
=
{
1
,
i
=
t
a
r
g
e
t
0
,
i
≠
t
a
r
g
e
t
y_i= \begin{cases} 1,i=target \\ 0,i\neq target\\ \end{cases}
yi={1,i=target0,i=target
在训练网络时,最小化损失函数H(y,p)= ∑ i K y i log ( p i ) \sum^{K}_{i}{y_i\log(p_i)} ∑iKyilog(pi),其中 p i p_i pi由对模型倒数第二层输出的logits向量z应用Softmax函数计算得到,pi= exp ( z i ) ∑ j K exp ( z j ) \exp(z_i) \over \sum^{K}_{j}{\exp(z_j)} ∑jKexp(zj)exp(zi)
传统one-hot编码标签的网络学习过程中,鼓励模型预测为目标类别的概率趋近1,非目标类别的概率趋近0,即最终预测的logits向量(logits向量经过softmax后输出的就是预测的所有类别的概率分布)中目标类别zi的值会趋于无穷大,使得模型向预测正确与错误标签的logit差值无限增大的方向学习,而过大的logit差值会使模型缺乏适应性,对它的预测过于自信。在训练数据不足以覆盖所有情况下,这就会导致网络过拟合,泛化能力差,而且实际上有些标注数据不一定准确,这时候使用交叉熵损失函数作为目标函数也不一定是最优的了。
label smoothing的数学定义
label smoothing结合了均匀分布,用更新的标签向量y^i来替换传统的ont-hot编码的标签向量yhot:
y
i
^
=
y
h
o
t
(
1
−
α
)
+
α
/
K
\hat{y_i}=yhot (1−α)+α/K
yi^=yhot(1−α)+α/K
其中K为多分类的类别总个数,α是一个较小的超参数(一般取0.1),即
y
i
^
=
{
1
−
α
,
i
=
t
a
r
g
e
t
α
/
K
,
i
≠
t
a
r
g
e
t
\hat{y_i}= \begin{cases} 1-α,i=target \\ α/K,i\neq target\\ \end{cases}
yi^={1−α,i=targetα/K,i=target
这样,标签平滑后的分布就相当于往真实分布中加入了噪声,避免模型对于正确标签过于自信,使得预测正负样本的输出值差别不那么大,从而避免过拟合,提高模型的泛化能力。
NIPS 2019上的这篇论文When Does Label Smoothing Help?用实验说明了为什么Label smoothing可以work,指出标签平滑可以让分类之间的cluster更加紧凑,增加类间距离,减少类内距离,提高泛化性,同时还能提高Model Calibration(模型对于预测值的confidences和accuracies之间aligned的程度)。但是在模型蒸馏中使用Label smoothing会导致性能下降。
文章来源:https://www.cnblogs.com/irvingluo/p/13873699.html