0%

论文-代码-工程相关-样本不均衡问题

2021.8.10 update focal lossGHM

Focal LossGHM损失均是在目标检测任务,针对正负样本,其中正样本数量较少,难样本中正样本数量较多。

Focal Loss

论文链接:Focal Loss for Dense Object Detection

focal loss分别针对样本不平衡和难易程度不同的问题

最常用的分类损失为交叉墒损失函数,考虑二分类,其损失函数如下:

\mathcal{L}_{cross\_entropy} = -y\log\hat{y} - (1-y)\log(1-\hat{y})

为了解决样本类别不均衡问题,作者采用系数 \alpha 进行平衡,得到如下的式子:

\mathcal{L}_{focal\_loss} = \begin{cases} -\alpha\log\hat{y}, \ \ if \ \ y=1 \\ -(1-\alpha)\log(1-\hat{y}), \ \ if \ \ y=0 \end{cases}

为了解决样本难易程度不同问题,作者认为易分样本对模型的提升效果非常小,模型应该主要关注难分样本,故根据预测概率 \hat{y} 进行平衡,得到如下的式子:

\mathcal{L}_{focal\_loss} = \begin{cases} -(1-\hat{y})^{\gamma}\log\hat{y}, \ \ if \ \ y=1 \\ -\hat{y}^{\gamma}\log(1-\hat{y}), \ \ if \ \ y=0 \end{cases}

其中 \gamma 是超参数,用于缩放,当 \hat{y} 比较大时,则为正易和负难,此时正易权重降低,而负难权重增加;反之,当 \hat{y} 比较小的时候,则对应正难和负易,此时正难权重增加,而负易权重降低。

所以,最后focal loss的公式为:

\mathcal{L}_{focal\_loss} = \begin{cases} -\alpha(1-\hat{y})^{\gamma}\log\hat{y}, \ \ if \ \ y=1 \\ -(1-\alpha)\hat{y}^{\gamma}\log(1-\hat{y}), \ \ if \ \ y=0 \end{cases}

其中,原文作者设置 \alpha=0.25,\gamma=2 效果最好。

同理,多分类的focal loss为:

\mathcal{L}_{focal\_loss} = -\alpha(1-\hat{y}_i)^{\gamma}\log\hat{y}_i
GHM

论文链接:Gradient Harmonized Single-stage Detector

focal loss过分关注难样本,可能存在离群点;focal loss两个超参数需要联合调参

依旧考虑二分类问题,认为 \hat{y}=sigmoid(x) ,则作者对 x 进行求导,有:

\frac{\partial{\hat{y}}}{x} = \hat{y}(1-\hat{y})

根据求导的链式法则,则损失函数对于特征 x 的梯度为:

\begin{aligned} \frac{\partial{\mathcal{L}_{cross\_entropy}}}{x} = \frac{\partial{\mathcal{L}_{cross\_entropy}}}{\hat{y}} \cdot \frac{\partial{\hat{y}}}{x} = {\begin{cases} \hat{y} - 1, \ \ if \ \ y=1 \\ \hat{y}, \ \ if \ \ y=0 \end{cases} } = \hat{y} - y \end{aligned}

由此,作者定义一个梯度范数来表示难易程度,其式子为: g = |\hat{y} - y| ,分析可以看出对于难样本,其梯度范数值接近1,而对于易样本,其梯度范数值很小。作者通过统计样本的梯度范数与数量的关系,得到下图左边的分布图像:

作者的目的是既希望减少易样本的权重,其对模型更新意义不大减缓迭代,又希望减少极难样本的权重,其可能是离群点影响收敛。如上图的分布,在梯度范数值很小的时候,其数量很多,表明存在大量易样本;而在梯度范数值很大的时候,其数量较多,表明存在一些极难样本和离群点;梯度范数区间的中间部分数据则相对较少。所以作者根据样本数量去加上权重,定义梯度密度:

GD(g) = \frac{1}{l_\varepsilon(g)}\sum_{k=1}^N\delta_{\varepsilon}(g_k,g)

梯度密度 GD(g) 的定义为指定区间的样本个数,其中, l_\varepsilon(g) 表示区间 [g-\frac{\varepsilon}{2},g+\frac{\varepsilon}{2}] 的长度, \delta_{\varepsilon}(g_k,g) 表示对应区间上的样本个数,其公式定义如下:

\delta_{\varepsilon}(g_k,g) = \begin{cases} 1,\ \ if \ \ g-\frac{\varepsilon}{2} < g_k < g+\frac{\varepsilon}{2} \\ 0,\ \ otherwise \end{cases} \\ l_\varepsilon(g) = \min(g+\frac{\varepsilon}{2}, 1) - \max(g-\frac{\varepsilon}{2}, 0)

由此,根据上文定义得到调和参数 \beta_i = \frac{N}{GD(g_i)} ,其中 i 表示第 i 个样本, N 表示样本总量。当 GD(g_i) 较大时,则其权重较小。由此得到最终的分类损失函数:

\mathcal{L}_{GHM} = \frac{1}{N}\sum_{i=1}^{N}\beta_i\mathcal{L}_{cross\_entropy}

参考文献:

  • 5分钟理解Focal Loss与GHM——解决样本不平衡利器