Focal Loss是为了处理样本不平衡问题而提出的,经时间验证,在多种任务上,效果还是不错的。在理解Focal Loss前,需要先深刻理一下交叉熵损失,和带权重的交叉熵损失。然后我们从样本权利的角度出发,理解Focal Loss是如何分配样本权重的。Focal是动词Focus的形容词形式,那么它究竟Focus在什么地方呢?
1 交叉熵 1.1 交叉熵损失(Cross Entropy Loss)有\(N\)个样本,输入一个\(C\)分类器,得到的输出为\(X\in \mathcal{R}^{N\times C}\),它共有\(C\)类;其中某个样本的输出记为\(x\in \mathcal{R}^{1\times C}\),即\(x[j]\)是\(X\)的某个行向量,那么某个交叉熵损失可以写为如下:
\[
\text{loss}\left( x,\text{class} \right)
=-\log \left( \frac{\exp \left( x\left[\text{class} \right] \right)}{\sum_j{\exp\left( x\left[ j \right] \right)}} \right)
=-x\left[\text{class} \right] +\log \left( \sum_j{\exp\left( x\left[ j \right] \right)} \right)
\tag{1}
\]
其中\(\text{class}\in [0,\ C)\)是这个样本的类标签,如果给出了类标签的权重向量\(W\in \mathcal{R}^{1\times C}\),那么带权重的交叉熵损失可以更改为如下:
\[ \operatorname{loss}(x, \text {class})=W[\text {class}]\left(-x[\text {class}]+\log \left(\sum_{j} \exp (x[j])\right)\right) \tag{2} \]
最终对这个\(N\)个样本的损失求和或者求平均:
\[ \ell = \begin{cases} \sum_{i}^{N}{\text{loss}(x^{(i)},\ \text{class}^{(i)})}&\text{, sum}\\ \dfrac{1}{N}\sum_{i}^{N}{\text{loss}(x^{(i)},\ \text{class}^{(i)})}&\text{, mean} \end{cases} \]
这个就是我们平时经常用到的交叉熵损失了。
1.2 二分类交叉熵损失(Binary Cross Entropy Loss)上面所提到的交叉熵损失是适用于多分类(二分类及以上)的,但是它的公式看起来似乎与我们平时在书上或论文中看到的不一样,一般我们常见的交叉熵损失公式如下:
\[ l = -y\log{\hat{y}}-(1-y)\log{(1-\hat{y})} \]
这是一个典型的二分类交叉熵损失,其中\(y\in\{0,\ 1\}\)表示标签值,\(\hat{y}\in[0,\ 1]\)表示分类模型的类别1预测值。上面这个公式是一个综合的公式,它等价于:
\[ l = \begin{cases} -\log{\hat{y}_0} &y=0 \\ -\log{\hat{y}_1} &y=1 \end{cases}; \quad \text{where}\quad \hat{y}_0+\hat{y}_1 = 1 \]
其中\(\hat{y}_0, \hat{y}_1\)是二分类模型输出的2个伪概率值。
例:如果二分类模型是神经网络,且最后一层为: 2个神经元+Softmax,那么\(\hat{y}_0, \hat{y}_1\)就对应着这两个神经元的输出值。当然它也可以带上类别的权重。
同样地,有\(N\)个样本,输入一个2分类器,得到的输出为\(X\in \mathcal{R}^{N\times 2}\),再经过Softmax函数,\(\hat{Y}=\sigma(X)\in \mathcal{R}^{N\times 2}\),标签为\(Y\in \mathcal{R}^{N\times 2}\),每个样本的二分类损失记为\(l^{(i)}, i=0,1,2,\cdots,N\),最终对这个\(N\)个样本的损失:
\[ \ell = \begin{cases} \sum_{i}^{N}l^{(i)}&\text{, sum}\\ \dfrac{1}{N}\sum_{i}^{N}l^{(i)}&\text{, mean} \end{cases}; \ \ \ l^{(i)} = -y^{(i)}\log{\hat{y}^{(i)}}-(1-y^{(i)})\log{(1-\hat{y}^{(i)})} \]
注:如果一次只训练一个样本,即\(N=1\),那么上面带类别权重的损失中的权重是无效的。因为权重是相对的,某一个样本的权重大,那么必然需要有另一个样本的权重小,这样才能体现出这一批样本中某些样本的重要性。\(N=1\)时,已没有权重的概念,它是唯一的,也是最重要的。\(N=1\),或者说batch_size=1这种情况在训练视频\文章数据时,是会常出现的。由于我们显示/内存的限制,而视频/文章数据又比较大,一次只能训练一个样本,此时我们就需要注意权重的问题了。
2 Focal Loss 2.1 基本思想一般来讲,Focal Loss(以下简称FL)是为解决样本不平衡的问题,但是更准确地讲,它是为解决难分类样本(Hard Sample)和易分类样本(Easy Sampel)的不平衡问题。对于样本不平衡,其实通过上面的带权重的交叉熵损失便可以一定程度上解决这个问题,但是在实际问题中,以权重来解决样本不平衡问题的效果不够理想,此时我们应当思考,表面上我们的样本不平衡,但实质上导致效果不好的原因也许并不是简单地因为样本不平衡,而是因为样本中存在一些Hard Sample,同时存在许多Easy Sample,Easy Sample虽然容易被分类器分辨,损失较小,但是由于其数量大,它们累积起来依然于大于Hard Sample的Loss值,因此我们需要给Hard Sample较大的权重,而Easy Sample较小的权重。