参考Seesaw Loss:一种面向长尾目标检测的平衡损失函数 - 深情的电脑的文章 - 知乎
https://zhuanlan.zhihu.com/p/339126633
上面文章讲过的这里就不赘述了,主要解释一些东西。
Motivation中,“来自头部类别的样本会对尾部类别施加过量的负样本梯度,淹没了来自尾部类别自身的正样本梯度”
要理解这句话,得先理解loss反向传播的过程
为啥头部类别还能对尾部类别施加梯度呢?
以全连接为例
设1为头部类别。现在就是头部类别的预测情况,这个样本的gt为头部类别,Loss为交叉熵损失,所以为-log(0.7)
同时交叉熵损失函数对预测结果求偏导:
d d x l o s s = 1 / x frac{mathrm{d} }{mathrm{d} x}loss=1/x dxdloss=1/x
x这里为0.7。而同时x是经softmax得到的, x = e x 2 e x 1 + e x 2 + e x 3 x=frac{e^{x_2}}{e^{x_1}+e^{x_2}+e^{x_3}} x=ex1+ex2+ex3ex2
因此x对 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3都求偏导
然后继续 x 1 对 x_1对 x1对构成x_1的权重求偏导
显然,target要求0.2变为0,即0类的分类权重会被降低,即为头部类别对他施加的负样本梯度