论文阅读:Gradient Harmonized Single-stage Detector

Gradient Harmonizing Mechanism (AAAI 2019)

文章
  Focal Loss之后又一篇针对one-stage detector中的imbalance问题发起挑战的论文。文章中方法与Focal Loss相同的地方在于会减小简单样本对于模型的梯度影响,但也有两个地方与Focal Loss不一样:1.针对过于困难的样本(即本文所说的gradient norm过大),该方法认为其实是outlier,也要减小梯度对模型的影响;2.不局限与对cross entropy的改进,还扩展到了regression部分的loss。


论文阅读:Gradient Harmonized Single-stage Detector_第1张图片

  从上图可以看到,当模型converged时,很多样本的梯度是接近0(简单)的,也有挺多的样本梯度还比较大(困难),由于CE不对简单样本的梯度做抑制,所以由于简单样本的数量巨大,导致最后简单样本的grad norm之和会很大,主导了模型的训练,但这对模型其实并没有太大意义。Focal Loss则主动减小了简单样本的梯度,从而使模型更注重其它样本的训练,从而提升了性能。而本文的方法就是,希望每种难度的样本影响都能比较均衡,具体方法如下。
  对于分类交叉熵损失,文章首先定义了loss关于输出x的gradient norm:


论文阅读:Gradient Harmonized Single-stage Detector_第2张图片

文章认为g代表了某个样本对于模型训练的影响,g越大,该样本对模型的训练影响也就越大。接下来就是本文的核心概念,gradient density:





论文阅读:Gradient Harmonized Single-stage Detector_第3张图片

其中N是本轮样本总数目,其实GD就代表了某个梯度g的一个邻域内的样本数目,那么接下来其实大家都能想到怎么做了,如果某块儿梯度的样本比较多,那么就应该减小这一部分梯度的大小,以减小它们共同带来的影响,所以得到一个harmonizing parameter



于是原本的CE损失就变成了:


论文阅读:Gradient Harmonized Single-stage Detector_第4张图片

但有一个问题是如果对每个样本都要单独求一个grad density的话,计算量是在太大了,因为对于one-stage detector来说,每轮的训练样本是非常多的(一个anchor就对应一个训练样本),因此文章采用了一种近似的方法:先将grad norm的取值区间(0,1)划分成几等份,然后grad norm位于相同range的样本梯度使用相同参数进行条件,而这个参数又由该range内的grad density决定,因此现在只需要进行一次排序和几个除法的时间复杂度就ok了,具体如下:


论文阅读:Gradient Harmonized Single-stage Detector_第5张图片



  然后一个要注意的是,在统计每个range内的样本数目的时候,文章使用了exponential moving average方法来使得gradient density更加stable:






  接着是将这个动态调节样本梯度的方法引入了regression,首先文章认为一般采用的smooth L1损失对于loss大一些的样本无法进行难度的区分,因为他们的grad norm都是1了,因此作者新设计了一个authentic smooth L1损失



和SL1相比如下图


论文阅读:Gradient Harmonized Single-stage Detector_第6张图片

其实还是比较像,但是在error较大时,样本之间仍然有区分性,然后继续像分类一样进行调节系数的计算就行了。

  最后是一些实验结果


论文阅读:Gradient Harmonized Single-stage Detector_第7张图片

  上表说明了本文的方法在精度上带来了提升,同时使用了近似方法之后可以不增加太多训练的时间。然后是下表和Focal Loss的比较,也是有一定提升的


论文阅读:Gradient Harmonized Single-stage Detector_第8张图片

其它的一些实验结果,有兴趣的朋友可以参考原论文。

你可能感兴趣的:(论文阅读:Gradient Harmonized Single-stage Detector)