·阅读摘要:
本文更像是对多标签文本分类的损失函数的综述,文中提到的几个损失函数(包括为了解决长尾问题的损失函数)都是前人已经提出的。
·参考文献:
[1] Balancing Methods for Multi-label Text Classification with Long-Tailed Class Distribution
[1] Loss Functions
在 NLP 领域,二值化交叉熵损失(Binary Cross Entropy Loss)常被用来处理多标签文本分类问题,给定一个含有
N
N
N个样本的训练集
(
x
1
,
y
1
)
,
.
.
.
,
(
x
N
,
y
N
)
(x^1,y^1),...,(x^N,y^N)
(x1,y1),...,(xN,yN),其中
y
k
=
[
y
1
k
,
.
.
.
,
y
C
k
]
∈
{
0
,
1
}
C
y^k = [y_1^k,...,y_C^k]\in \{0,1\}^C
yk=[y1k,...,yCk]∈{0,1}C,
C
C
C是类别数量,假设模型对于某个样本的输出为
z
k
=
[
z
1
k
,
.
.
.
,
z
C
k
]
∈
R
z^k = [z_1^k,...,z_C^k]\in \mathbb {R}
zk=[z1k,...,zCk]∈R,则 BCE 损失的定义如下:
L
BCE
=
{
−
log
(
p
i
k
)
if
y
i
k
=
1
−
log
(
1
−
p
i
k
)
otherwise
\mathcal{L}_{\text{BCE}} = \begin{cases}-\log (p_i^k)\quad &\text{if } y_i^k =1\\-\log (1-p^k_i)\quad &\text{otherwise} \end{cases}
LBCE={−log(pik)−log(1−pik)if yik=1otherwise
其中 p i k = σ ( z i k ) p_i^k = \sigma (z_i^k) pik=σ(zik),对于多标签分类问题来说我们需要将模型的输出值压缩到 [0,1] 之间,所以需要用到 sigmoid 函数.
原本单标签问题,真实值 y k y^k yk相当于一个 onehot 向量,而对于多标签来说,真实值 y k y^k yk相当于一个 onehot 向量中多了一些 1,例如 [0,1,0,1],表示该样本同时是第 1 类和第 3 类
这种朴素的 BCE 非常容易收到标签不平衡的影响,因为头部样本比较多,可能所有头部样本的损失总和为 100,尾部所有样本的损失加起来都不超过 10。下面,我们介绍三种替代方法解决多标签文本分类中长尾数据的类别不均衡问题。这些平衡方法主要思想是重新加权 BCE,使罕见的样本 - 标签对得到合理的 “关注”
[2] Focal Loss (FL)
通过在 BCE 上乘一个可调整的聚焦参数
γ
≥
0
\gamma \ge 0
γ≥0,Focal Loss 将更高的损失权重放在 “难分类” 的样本上,这些样本对其真实值的预测概率很低。对于多标签分类任务,Focal Loss 定义如下:
L
FL
=
{
−
(
1
−
p
i
k
)
γ
log
(
p
i
k
)
if
y
i
k
=
1
−
(
p
i
k
)
γ
log
(
1
−
p
i
k
)
otherwise
\mathcal{L}_{\text{FL}} = \begin{cases} -(1-p_i^k)^\gamma \log (p_i^k)\quad &\text{if } y_i^k =1\\ -(p_i^k)^\gamma \log (1-p_i^k)\quad &\text{otherwise} \end{cases}
LFL={−(1−pik)γlog(pik)−(pik)γlog(1−pik)if yik=1otherwise
[3] Class-balanced focal loss (CB)
通过估计有效样本数,CB Loss 进一步重新加权 Focal Loss 以捕捉数据的边际递减效应,减少了头部样本的冗余信息。对于多标签任务,我们首先计算出每种类别的频率
n
i
n_i
ni,那么对于每个类别来说,都有其平衡项
r
C
B
r_{CB}
rCB
r
CB
=
1
−
β
1
−
β
n
i
r_{\text{CB}} = \frac{1-\beta}{1-\beta^{n_i}}
rCB=1−βni1−β
其中,
β
∈
[
0
,
1
)
\beta \in [0,1)
β∈[0,1)控制着有效样本数量的增长速度,损失函数变为
L
CB
=
{
−
r
CB
(
1
−
p
i
k
)
γ
log
(
p
i
k
)
if
y
i
k
=
1
−
r
CB
(
p
i
k
)
γ
log
(
1
−
p
i
k
)
otherwise
\mathcal{L}_{\text{CB}} = \begin{cases} -r_{\text{CB}} (1-p_i^k)^\gamma \log (p_i^k) \quad &\text{if } y_i^k =1\\ -r_{\text{CB}} (p_i^k)^\gamma \log (1-p_i^k) \quad &\text{otherwise} \end{cases}
LCB={−rCB(1−pik)γlog(pik)−rCB(pik)γlog(1−pik)if yik=1otherwise
[4] Distribution-balanced loss (DB)
通过整合再平衡权重以及头部样本容忍正则化(negative tolerant regularization, NTR),Distribution-balanced Loss 首先减少了标签共现的冗余信息(这在多标签分类的情况下是很关键的),然后对 “容易分类的” 样本(头部样本)分配较低的权重
首先,为了重新平衡权重,在单标签的情况下,一个样本可以通过采样概率
P
i
C
=
1
C
1
n
i
P_i^C = \frac {1}{C}\frac {1}{n_i}
PiC=C1ni1来加权,但是在多标签的情况下,如果采用同样的策略,一个具有多标签的样本会被过度采样,概率是
P
I
=
1
c
∑
y
i
k
=
1
1
n
i
P^I = \frac {1}{c}\sum_{y_i^k=1}\frac {1}{n_i}
PI=c1∑yik=1ni1。因此,我们需要结合两者重新平衡权重
r
DB
=
P
i
C
/
P
I
r_{\text{DB}} = P_i^C / P^I
rDB=PiC/PI
可以将上述权重变得更光滑一些(有界)
r ^ DB = α + σ ( β × ( r DB − μ ) ) \hat{r}_{\text{DB}} = \alpha + \sigma(\beta \times (r_{\text{DB}} - \mu)) r^DB=α+σ(β×(rDB−μ))
此时, r ^ DB \hat {r}_{\text {DB}} r^DB的值域为 [ α , α + 1 ] [\alpha ,\alpha + 1] [α,α+1] 。rebalanced-FL (R-FL) 损失函数为
L R-FL = { − r ^ DB ( 1 − p i k ) log ( p i k ) if y i k = 1 − r ^ DB ( p i k ) log ( 1 − p i k ) otherwise \mathcal{L}_{\text{R-FL}} = \begin{cases} -\hat{r}_{\text{DB}} (1-p_i^k)\log (p^k_i) \quad &\text{if } y_i^k =1\\ -\hat{r}_{\text{DB}} (p_i^k)\log (1-p^k_i) \quad &\text{otherwise} \end{cases} LR-FL={−r^DB(1−pik)log(pik)−r^DB(pik)log(1−pik)if yik=1otherwise
然后,NTR 对同一标签头部和尾部样本进行不同的处理,引入一个比例因子 λ \lambda λ和一个内在的特定类别偏差 v i v_i vi以降低尾部类别的阈值,避免过度抑制
L NTR-FL = { − ( 1 − q i k ) log ( q i k ) if y i k = 1 − 1 λ ( q i k ) log ( 1 − q i k ) otherwise \mathcal{L}_{\text{NTR-FL}} = \begin{cases} -(1-q_i^k)\log (q^k_i) \quad &\text{if } y_i^k =1\\ -\frac{1}{\lambda} (q_i^k)\log (1-q^k_i) \quad &\text{otherwise} \end{cases} LNTR-FL={−(1−qik)log(qik)−λ1(qik)log(1−qik)if yik=1otherwise
对于尾部样本来说,
q
i
k
=
σ
(
z
i
k
−
v
i
)
q^k_i = \sigma (z_i^k - v_i)
qik=σ(zik−vi);对于头部样本来说,
q
i
k
=
σ
(
λ
(
z
i
k
−
v
i
)
)
q_i^k = \sigma (\lambda (z_i^k - v_i))
qik=σ(λ(zik−vi))。
v
i
v_i
vi可以在训练开始时最小化损失函数来估计,其比例系数为
κ
\kappa
κ,类别先验信息
p
i
=
n
i
/
N
p_i = n_i/N
pi=ni/N,则
b
^
i
=
−
log
(
1
p
i
−
1
)
,
v
i
=
−
κ
×
b
^
i
\hat{b}_i = -\log (\frac{1}{p_i} - 1), \ v_i = -\kappa \times \hat{b}_i
b^i=−log(pi1−1), vi=−κ×b^i
最终,通过整合再平衡权重以及 NTR,Distribution-balanced Loss 为
L
DB
=
{
−
r
^
DB
(
1
−
q
i
k
)
log
(
q
i
k
)
if
y
i
k
=
1
−
r
^
DB
1
λ
(
q
i
k
)
log
(
1
−
q
i
k
)
otherwise
\mathcal{L}_{\text{{DB}}} = \begin{cases} -\hat{r}_{\text{DB}}(1-q_i^k)\log (q^k_i) \quad &\text{if } y_i^k =1\\ -\hat{r}_{\text{DB}}\frac{1}{\lambda} (q_i^k)\log (1-q^k_i) \quad &\text{otherwise} \end{cases}
LDB={−r^DB(1−qik)log(qik)−r^DBλ1(qik)log(1−qik)if yik=1otherwise
[5] 实验结果
使用的模型为 SVM,对比不同损失函数的效果