label smoothing:
交叉熵:
H ( p , q ) = − ∑ i = 1 n p ( x i ) log ( q ( x i ) ) H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right) H(p,q)=−i=1∑np(xi)log(q(xi))
其中p(xi)是真值, q(xi) 是预测值。
交叉熵的问题:
交叉熵的真值直接把正例设置为1,负例设置为0,非常的依赖标签的正确性,这样会可能会出现***过拟合***,神经网络最小化训练误差的时候会尽可能让网络的输出拟合label,但是在训练数据不足以表征所以的样本特征的情况下,这就会导致网络过拟合(只能区分训练集里面的数据)。
- 训练数据不足:过于拟合训练集而对于未见到的数据会分错
- 不均衡
- noise label: 会对训练集里出现的错误label数据拟合的很好等
label smoothing:
什么是label smoothing?
label smoothing是一种正则化的策略。可以让传统的one-hot类型标签更soft,这样在计算loss的时候能有效抑制过拟合现象,相当于减少真实样本标签的类别在计算损失函数时的权重,最终起到抑制过拟合的效果。
标签平滑被提出用于训练 Inception-v2 ,在Imagenet上有较少过拟合的效果。
公式:
q
′
(
y
∣
x
)
=
(
1
−
ϵ
)
∗
q
(
y
∣
x
)
+
ϵ
u
(
y
)
q^{\prime}(y | x)=(1-\epsilon) * q(y | x)+\epsilon u(y)
q′(y∣x)=(1−ϵ)∗q(y∣x)+ϵu(y)
ϵ
\epsilon
ϵ属于[0, 1],
q
′
(
y
∣
x
)
q^{\prime}(y | x)
q′(y∣x) 让label的真实分布和先验分布
u
(
y
)
u(y)
u(y)结合在了一起。一般另
u
(
y
)
=
1
/
(
k
−
1
)
或
1
/
k
u(y) = 1/(k-1)或1 / k
u(y)=1/(k−1)或1/k
代入交叉熵后:
H
(
q
′
,
p
)
=
−
∑
i
=
1
K
q
i
′
log
p
i
=
(
1
−
ϵ
)
H
(
q
,
p
)
+
ϵ
H
(
u
,
p
)
H\left(q^{\prime}, p\right)=-\sum_{i=1}^{K} q_{i}^{\prime} \log p_{i}=(1-\epsilon) H(q, p)+\epsilon H(u, p)
H(q′,p)=−∑i=1Kqi′logpi=(1−ϵ)H(q,p)+ϵH(u,p)
相当于减少了预测值和真值之间的惩罚,增加了预测值与先验分布之间的惩罚。一般可以设
ϵ
=
0.1
\epsilon = 0.1
ϵ=0.1
作用:
能够一定程度防止模型过拟合,解决对真值的依赖。
参考:
https://blog.csdn.net/e01528/article/details/85019274
https://blog.csdn.net/xys430381_1/article/details/89150027