前言
Focal Loss前前后后看了好几遍了,总是会忘记,写下来时常看看吧!
问题:为什么引入focal loss?
focal loss的提出背景是two-stage阶段速度慢,准确率高,可是one-stage阶段速度高,准确率差,能不能想办法在保持one-stage速度高的前提下,提升其准确率呢?
引入Focal Loss的思考过程:
one-stage准确率为什么不如two-stage的呢?作者认为是类别不均衡造成的,不均衡的原因有两个:
- 正负样本不均衡
- 预测正确和预测错误的不均衡
接下来就以完整的梯度下降为例进行说明
θ
j
+
1
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
=
θ
j
−
α
∂
∂
θ
j
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
i
\begin{aligned} \theta_{j+1} &=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta) \\ &=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} \frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} \\ &=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{i} \end{aligned}
θj+1=θj−α∂θj∂J(θ)=θj−α∂θj∂2m1i=1∑m(hθ(x(i))−y(i))2=θj−αm1i=1∑m(hθ(x(i))−y(i))xji
这里
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}
J(θ)=2m1∑i=1m(hθ(x(i))−y(i))2,我们可以将所有的样本分成4部分:TP,FP,FN,TN。这四部分对于参数
θ
\theta
θ的变化都有影响。
预测(列) | label为正 | label为负 |
---|---|---|
预测为正样本 | TP(真正例) | FP(假正例) |
预测为负样本 | FN(假例) | TN(真反例) |
当假设负样本数量过大,正样本数量很小,如下表所示,那么参数 θ \theta θ的变化量 α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j i \alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{i} αm1∑i=1m(hθ(x(i))−y(i))xji其实大部分都是TN造成的,也就是负样本中预测为负样本的那些,同时还有少量的FP,但是降低这部分的损失对于网络分类性能没有任何提升,应该更看重的是分类错误的样本FP和FN,也就是更关注错误分类的样本,同时需要提升这两类样本在损失函数中的占比,首先可以做的就是减小负样本在损失中的占比
预测(列) | label为正(1份) | label为负(10份) |
---|---|---|
预测为正样本 | TP(真正例)(0.9)份 | FP(假正例)(1份) |
预测为负样本 | FN(假例)(0.1)份 | TN(真反例)(9份) |
focal loss的出发点是从交叉熵损失出发
C
E
(
p
,
y
)
=
{
−
log
(
p
)
if
y
=
1
−
log
(
1
−
p
)
otherwise
\mathrm{CE}(p, y)=\left\{\begin{array}{ll} -\log (p) & \text { if } y=1 \\ -\log (1-p) & \text { otherwise } \end{array}\right.
CE(p,y)={−log(p)−log(1−p) if y=1 otherwise
接着引入一个记号
p
t
p_t
pt:表示形式为:其中
p
t
p_t
pt是关于
y
y
y的函数
p
t
=
{
p
if
y
=
1
1
−
p
otherwise
p_{\mathrm{t}}=\left\{\begin{array}{ll} p & \text { if } y=1 \\ 1-p & \text { otherwise } \end{array}\right.
pt={p1−p if y=1 otherwise
这样我们可以将交叉熵损失计作
C
E
(
p
,
y
)
=
C
E
(
p
t
)
=
−
log
(
p
t
)
\mathrm{CE}(p, y)=\mathrm{CE}\left(p_{\mathrm{t}}\right)=-\log \left(p_{\mathrm{t}}\right)
CE(p,y)=CE(pt)=−log(pt)
对于单个样本来说,交叉上损失的计算
−
log
(
p
t
)
-\log \left(p_{\mathrm{t}}\right)
−log(pt),对于正样本和负样本我们可以乘上不同的权重参数,比如
−
α
t
log
(
p
t
)
-\alpha_t\log \left(p_{\mathrm{t}}\right)
−αtlog(pt),来调整正负样本的权重,
这里的
α
t
\alpha_t
αt同样和类别相关,
α
t
=
{
α
if
y
=
1
1
−
α
otherwise
\alpha_{\mathrm{t}}=\left\{\begin{array}{ll} \alpha & \text { if } y=1 \\ 1-\alpha & \text { otherwise } \end{array}\right.
αt={α1−α if y=1 otherwise
从表格上来看:经过
α
t
\alpha_t
αt调整后的正负样本对损失的影响变换如下
预测(列) | label为正(1份)*0.9=0.9份 | label为负(10份)*0.1=1份 |
---|---|---|
预测为正样本 | TP(真正例)(0.9份)*0.9=0.81份 | FP(假正例)(1份)*0.1=0.1份 |
预测为负样本 | FN(假例)(0.1份)*0.9=0.09份 | TN(真反例)(9份)*0.1=0.9份 |
从上表上来看, a t a_t at解决了正负样本不均衡的一个问题,但是对于整个损失函数来说,TP和TN数量较大,虽然损失值较小,但是在整体损失中所占的比例不一定小,我们关注这些正确分类的样本的损失对于模型的性能提升没有意义,更重要的是需要看重错误分类的这些样本,我们接下来可以做的就是调整正确分类和错误分类样本之间的权重。
接下来使用一个例子进行说明:
比如说两个bounding box的真实label都为正,对应的我们有两个预测结果,一个预测为正的概率为0.9(正确分类),另一个预测为正的概率为0.3(错误分类),假定0.5为判别正负的标准,此时的交叉熵损失分别为:
− log ( 0.9 ) 以 及 − log ( 0.3 ) -\log (0.9) 以及-\log (0.3) −log(0.9)以及−log(0.3),我们对这两个再做一个权重,更加看重错误分类的样本,一个简单的思路就是:对于 − log ( 0.9 ) -\log (0.9) −log(0.9)我们可以乘上(1-0.9)=0.1,对于 − log ( 0.3 ) -\log (0.3) −log(0.3)我们可以乘上(1-0.3)=0.7来进行调整。同理,我们假设两个bounding box的真实label都为负,对应有两个预测结果一个预测为正的概率为0.1(正确分类),另一个预测为正的概率为0.7(错误分类),此时交叉熵损失分别为 − log ( 0.9 ) 以 及 − log ( 0.3 ) -\log (0.9) 以及-\log (0.3) −log(0.9)以及−log(0.3),为了更看重错误分类的样本,我们分别乘上0.1和0.7。
从上面的例子中我们进行权重调整时,乘的系数
β
t
\beta_t
βt为:
β
t
=
{
1
−
p
if
y
=
1
p
otherwise
\beta_{\mathrm{t}}=\left\{\begin{array}{ll} 1-p & \text { if } y=1 \\ p & \text { otherwise } \end{array}\right.
βt={1−pp if y=1 otherwise
和
p
t
p_t
pt的关系是
β
t
=
1
−
p
t
\beta_t = 1-p_t
βt=1−pt,由于
β
t
\beta_t
βt是小于1的,再考虑复杂一点,我们进一步加大错分类样本的权重,比如对
β t \beta_t βt取 γ \gamma γ次方(此时 γ > 1 \gamma>1 γ>1),或者我们相比于 β t \beta_t βt减小错分类样本的权重( 0 < γ < 1 0<\gamma<1 0<γ<1),参考上面的例子,对正确分类样本和错误分类样本的权重调整由原来的0.1,0.7变成了 0. 1 γ 0.1^{\gamma} 0.1γ和 0. 7 γ 0.7^{\gamma} 0.7γ; γ = 2 \gamma=2 γ=2时,权重为0.01和0.49,7:1的关系,变成了49:1的关系。同理,对于 γ = 0.5 \gamma=0.5 γ=0.5,7:1的关系,将会变成8.4:3.2.
我们将上面的关系形式化表示是:
F
L
(
p
t
)
=
−
(
1
−
p
t
)
γ
log
(
p
t
)
\mathrm{FL}\left(p_{\mathrm{t}}\right)=-\left(1-p_{\mathrm{t}}\right)^{\gamma} \log \left(p_{\mathrm{t}}\right)
FL(pt)=−(1−pt)γlog(pt)
同时考虑对正负样本不均衡的调整得到Focal Loss
最终的表示形式:
F
L
(
p
t
)
=
−
α
t
(
1
−
p
t
)
γ
log
(
p
t
)
\mathrm{FL}\left(p_{\mathrm{t}}\right)=-\alpha_{\mathrm{t}}\left(1-p_{\mathrm{t}}\right)^{\gamma} \log \left(p_{\mathrm{t}}\right)
FL(pt)=−αt(1−pt)γlog(pt)