深度学习中的各种tricks_1.0_label_smoothing
深度学习中的各种tricks_1.0_label_smoothing
2017/11/16 - Thursday - 第一次修改
[ 用于整理遇到的NN设计中使用的不同结构和trick的原理与实现 ]
label smoothing (标签平滑)
在读cleverhans的示例代码时发现code中对于train_Y即训练标签做了label smoothing,于是找到paper中对于该方法的描述和理论分析,如下:
对于分类问题,常规做法时将类别做成one-hot vector,然后在网络最后一层全链接的输出后接一层softmax,softmax的输出是归一的,因此我们认为softmax的输出就是该样本属于某一类别的概率。由于标签是类别的one-hot vector, 因此表征我们已知该样本属于某一类别是概率为1的确定事件,而其他类别概率都为0。
softmax:
其中
cross entropy loss:
交叉熵对于logits可微,且偏导数形式简单:
对于groundtruth为one-hot的情况,即每个样本只有惟一的类别,则
因此提出一种机制,即要使得模型可以 less confident 。思路如下:考虑一个与样本无关的分布
可以理解为,对于 Dirac 函数分布的真实标签,我们将它变成以如下方式获得:首先从标注的真实标签的Dirac分布中取定,然后,以一定的概率
对于该操作的数学物理含义可以用交叉熵的概念说明:
可以认为 loss 函数分别以不同的权重对 predicted label 与标注的label 的差距 以及 predicted label 与 先验分布的差距 进行惩罚。根据文章的报告,可以对分类性能有一定程度的提升。(In our ImageNet experiments with K = 1000 classes, we used u(k) = 1/1000 and = 0.1. For ILSVRC 2012, we have found a consistent improvement of about 0.2% absolute both for top-1 error and the top-5 error )
reference:
- Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking the Inception Architecture for Computer Vision[C]// Computer Vision and Pattern Recognition. IEEE, 2016:2818-2826.
- https://github.com/tensorflow/cleverhans/blob/master/cleverhans_tutorials/mnist_tutorial_tf.py