往期文章:
第一次听说Label Smoothing Loss ,还是在一次询问chatGPT时候,在他的回答中,提到了。其中下面的问题,和chatGPT的回答,都展示在了下面的地方。

原本我是想到了在faster RCNN目标检测算法中,对于目标框的位置回归部分,通常采用Smooth L1 Loss。于是我就想到,Smooth L1 Loss是否特能用于分类任务呢?当然,这里我就是脑洞一问,得知了用于分类任务中的Label Smoothing Loss。
Label Smoothing Loss和Smooth L1 Loss里面,都有smooth,光滑的,平坦的,平整的。从Smooth L1 Loss,我们知道他是在L1 Loss的基础上,引入了L2 loss。在[1,1]的范围内,采用L2 loss,其他段都是L1 loss。
一是避免了L1 loss在x为0的不可导,也使得在0附近的优化更加的平缓。具体的可以参考这里:【AI面试】L1 loss、L2 loss和Smooth L1 Loss,L1正则化和L2正则化

吸取Smooth L1 Loss的思想,在分类任务中,也想要Smooth 一些。于是,Label Smoothing运用而生。首席推荐阅读:
上完上面,理解的,再看下面的:
实现方式:label_smoothing_loss.py
通过上述两个文章,大概就对Label Smoothing Loss 有了大概的了解,也知道他为什么要改写one-hot标签,而采用smooth的形式,平滑标签,使得参与损失loss计算的值,不只是局限于目标为1的点。

文本分类和图像分类实际上在训练模式上是类似的,基本都遵循这样的一个流程:
这里使用cross-entropy loss(简称CE-loss)基本上成了大家训练模型的默认方法,但它实际上存在一些问题。下面我举个例子:
比如有一个六个类别的分类任务,CE-loss是如何计算当前某个预测概率p相对于y的损失呢:
可以看出,根据CE-loss的公式,只有y中为1的那一维度参与了loss的计算,其他的都忽略了。这样就会造成一些后果:
总之,这都是由one-hot的不合理表示造成的,因为one-hot只是对真实情况的一种简化,其他错误并不参与损失计算。面对one-hot可能带来的容易过拟合的问题,有研究提出了Label Smoothing方法:

label smoothing就是把原来的one-hot表示,在每一维上都添加了一个随机噪音。这是一种简单粗暴,但又十分有效的方法,目前已经使用在很多的图像分类模型中了。
one-hot 劣势:
Label Smoothing 优势:
Label Smoothing 劣势:
从Smooth L1 Loss中的Smooth,引申到分类任务中,在label部分引入Smooth操作,平滑one hot的标签,使得模型的优化目标不再是1,而是一个小于1的数值。避免了过分的追求完美,使得模型过拟合。
但是,经过自己的粗浅思考,这种方法对于分类目标类别之间的特征差异较小,分类较难的任务,应该是有比较好的改观的,主要的改观就体现在泛化性上面。
而对于分类目标类别之间的特征差异较大,比较好分开的分类任务中,就没有必要引入smooth的操作了。因为这样会使得训练没有充分的挖掘模型的分类能力。模型能考100分,非要考90就可以,可能泛化性不够。
除此之外,发散开来。如果对于类别之间界限没有那么的清晰的分类任务场景,比如等级分类。同一事物,介于5级和6级之间,那往6上分也可以,往5上分也行的标签,是不是可以采用更加smooth的方式,使得除去目标1外的标签,不是均等的。这种最终还是需要有一个最大的值,只是这个值的数可能会更小。
上述的内容,都还需要检验。先学习记录,待后续补充。