Label Smoothing分析

小白学视觉

共 2532字,需浏览 6分钟

 ·

2022-05-16 08:11

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

作者丨王峰@知乎
来源丨https://zhuanlan.zhihu.com/p/302843504
编辑丨极市平台
转自 | 极市平台

导读

 

Label Smoothing在图像识别中能稳定涨点,但在人脸的loss里加上Label Smoothing却是掉点的,本文作者详细分析了该方法的问题,Label Smoothing起到的作用实际上是抑制了feature norm,此时只能控制角度,起到反向优化的作用,因此在人脸loss上加Label Smoothing效果会变差。 

有挺多人问过我一个问题:Label Smoothing在图像识别中能稳定涨点,在人脸的loss里加上Label Smoothing是否有用呢?


我挺早之前就注意到了这件事,当时也做了实验,发现直接应用在人脸相关的loss上,是掉点的。其实DL发展到现在,可以说如果你想到了一个非常简单的排列组合式idea,而经过survey没见过别人这么做,那大概率这个方法是不work的...


但这事到这当然不算完,我们得分析一下它为啥不work。


要引出Label Smoothing,首先我们要知道,Softmax Cross Entropy不仅可以做分类任务(目标为one-hot label),还可以做回归任务(目标为soft label)。设网络输出的softmax prob为p,soft label为q,那Softmax Cross Entropy定义为:


而Label Smoothing虽然仍是做分类任务,但其目标q从one-hot label变为soft label了,原来是1的位置变为  ,其他的原来是0的位置变为  ,  通常取0.1。


假设一个6分类任务,之前的  就变成了  ,直观上看,这个目标还是很奇怪的,如果一个样本网络非常确认其类别,给了个0.99的置信度,难道经过Label Smoothing,还要反向优化不成?


这个问题其实在概率层面上是没法解释的,从概率上看,确实会有发生反向优化的情况,但为什么这样可以涨点呢?


看看Hinton组对Label Smoothing的分析文章[1],里面有一张图比较有意思:



熟悉人脸识别loss的人会发现,这个Label Smoothing得到的特征分布,怎么跟人脸loss的效果这么像?竟然都可以起到让每个类别的样本聚拢的效果。


而少数细心的朋友可能会发现这里的玄机:不做Label Smoothing(标注为w/o LS)的feature norm,普遍比做了LS(标注为w/ LS)的要大很多!w/o LS时最大可以达到1.6,而w/ LS时只有0.4。


回顾之前的文章,减小feature norm实际上等效于降低s,较低的s会使softmax prob的最大值降低,如下图所示(来自于zhuanlan.zhihu.com/p/52 ):

可以看到,在较低的s的作用下,任何一个点,都不可能达到0.9以上的概率。也就是说,我们之前所担心的反向优化问题,实际上根本不会发生!即使优化到最好,也只能接近0.9,而到不了1。

但同时要注意到,Label Smoothing也并不要求p优化到1,而是优化到0.9即可。Softmax Cross Entropy 的loss曲线其实跟sigmoid类似,越靠近1的时候,loss曲线会越平缓:

sigmoid曲线

而在设置了  后,我们只会用到sigmoid曲线上中间的一段,平缓的区域基本上不存在了,样本的移动几乎永不终止,因此特征会比不加LS更加聚拢。

但是在人脸识别的loss里,s通常是固定住的,而且会固定在一个比较大的值上(例如32、64),这样Label Smoothing就无法让s降低来使最大概率降低,于是反向优化在人脸的loss上就成了真的会发生的事情:p>0.9后,loss会把特征往回拉,直至落在p=0.9附近震荡。理论上特征会在类中心周围形成一个环形的分布(我懒得做实验了,有兴趣的朋友可以做一个看看)。

总结一下,Label Smoothing起到的作用实际上是抑制了feature norm,此时softmax prob永远无法达到设定的  ,loss曲面上不再存在平缓区域,处处都有较大的梯度指向各个类中心,所以特征会更加聚拢。而之所以人脸上不work,是因为我们通常会使用固定的s,此时Label Smoothing无法控制feature norm,只能控制角度,就会起到反向优化的作用,因此在人脸loss上加Label Smoothing效果会变差。

参考

When Does Label Smoothing Help? https://arxiv.org/pdf/1906.02629.pdf


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 16
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报