Equalization Loss理解-更新中
Equalization Loss for Long-Tailed Object Recognition
- 一、前言
- 二、交叉熵回顾
- 2.1、Softmax Cross-Entropy Loss
- 2.2、Sigmoid Cross-Entropy Loss
- 2.3、Loss对网络的输出zzz的导数
- 三、网络参数更新
- 四、Equalization Loss公式
- 4.1、基于sigmoid的交叉熵损失修改
- 3.2、基于Softmax的交叉熵损失的修改
- 四、参考
一、前言
在Pascal VOC和COCO这样的公开数据集中,除背景类外,前景类大致呈现均匀分布的状态,即每一类的数量大致相同,但是现实场景中各类别呈现的是长尾分布的情况,即头部类别数量远远大于尾部类别的数量(如LVIS)。相较于均匀分布的数据集,长尾分布的数据集尤其是其中的稀有类训练的时候更加困难。
在一个数据集中,对于某个类别的数据,包括背景在内的其他类别都可以看做该类别的负样本,所以对于一个正样本,在训练过程中尾部类别(样本数量少)很容易被头部类(样本数量多)覆盖从而被预测为负样本,相反对于头部类来说,正样本的数据本来就很多,很容易被正确分类。
针对长尾分布的数据集,先前的工作大都是通过设计特殊的采样方式和特殊的损失函数来解决,但是这些工作往往只关注背景与前景的不均衡,前景类别各类间的不均衡的问题没有被考虑。
Equalization Loss就是为了解决前景中各类别不均衡的问题提出的。
二、交叉熵回顾
2.1、Softmax Cross-Entropy Loss
基于softmax的多分类交叉熵公式为
LSCE=−∑j=1Cyjlog(pj)L_{S C E}=-\sum_{j=1}^{C} y_{j} \log \left(p_{j}\right)LSCE=−j=1∑Cyjlog(pj)
其中CCC表示类别数,pjp_jpj通过Softmax(zj)Softmax(z_j)Softmax(zj)计算得到,C包含背景类别。yyy是真实标签,通常由one-hot形式编码,单独一个样本的标签如下:
yj={1if j=c0otherwise y_{j}=\left\{\begin{array}{ll} 1 & \text { if } j=c \\ 0 & \text { otherwise } \end{array}\right.yj={10 if j=c otherwise
2.2、Sigmoid Cross-Entropy Loss
使用Sigmoid函数做多分类时,是使用CCC单独的sigmoid函数对每一类获得概率值。真实标签yjy_jyj只表示j类的二分类情况。基于sigmoid的多分类交叉熵公式如下:
LBCE=−∑jClog(pj^)L_{B C E}=-\sum_{j}^{C} \log \left(\hat{p_{j}}\right)LBCE=−j∑Clog(pj^)
pj^={pjif yj=11−pjotherwise \hat{p_{j}}=\left\{\begin{array}{ll} p_{j} & \text { if } y_{j}=1 \\ 1-p_{j} & \text { otherwise } \end{array}\right.pj^={pj1−pj if yj=1 otherwise
其中pjp_jpj通过σ(zj)\sigma\left(z_{j}\right)σ(zj)计算得到,即sigmoid函数,表达式如下:
pj=11+e−zjp_j=\frac{1}{1+e^{-z_j}} pj=1+e−zj1
2.3、Loss对网络的输出zzz的导数
LBCEL_{B C E}LBCE和LSCEL_{S C E}LSCE关于网络的输出zzz的导数具有相同的形式:
∂Lcls∂zj={pj−1if yj=1pjotherwise \frac{\partial L_{c l s}}{\partial z_{j}}=\left\{\begin{array}{ll} p_{j}-1 & \text { if } y_{j}=1 \\ p_{j} & \text { otherwise } \end{array}\right.∂zj∂Lcls={pj−1pj if yj=1 otherwise
也就是说在做多分类时,不管使用softmaxsoftmaxsoftmax还是sigmoidsigmoidsigmoid,得到的LossLossLoss对网络的输出zzz的导数形式是一样的(具体推导过程看我之前写的博客交叉熵损失导数推理),这里关于交叉熵损失导数的理解非常重要,因为网络训练依靠的就是梯度下降算法。同样也可以写成向量的形式,对于一个属于c类的样本,损失LLL对网络输出zzz的导数可以表示如下:
∂L∂Z=[p1p2...pc−1...pC−1pC]\frac{\partial L}{\partial Z} = \begin{bmatrix} p_1\\ p_2 \\... \\p_c-1 \\... \\p_{C-1} \\p_C \end{bmatrix} ∂Z∂L=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡p1p2...pc−1...pC−1pC⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
关于这方面的计算推导有很多,使用向量的推导方式可以参考神经网络多分类中softmax+cross-entropy的前向传播和反向传播过程。
三、网络参数更新
我们拿一个MLP网络来举例,这个网路包括输入层、中间层,输出层。
从图上我们可以看到一个样本有4个输入{x1、x2、x3、x4x_{1}、x_{2}、x_{3}、x_{4}x1、x2、x3、x4},通过权重矩阵Wl1W^{l1}Wl1和偏置Bl1B^{l1}Bl1得到Zl1Z^{l1}Zl1,Zl1Z^{l1}Zl1经过sigmoid激活得到Al1A^{l1}Al1,Al1A^{l1}Al1经过第二层矩阵权重Wl2W^{l2}Wl2和偏置Bl2B^{l2}Bl2得到Zl2Z^{l2}Zl2,这里的Zl2Z^{l2}Zl2就是我们说的网络的输出,然后经过sigmoid激活得到概率预测值,这里我们假设这个样本属于第3类,所以标签{y1、y2、y3、y4}={0、0、1、0}\{y_{1}、y_{2}、y_{3}、y_{4}\}=\{0、0、1、0\}{y1、y2、y3、y4}={0、0、1、0}。计算LossLossLoss如下
Loss=−log(1−p1)−log(1−p2)−log(p3)−log(1−p4)(1)Loss=-log(1-p_1)-log(1-p_2)-log(p_3)-log(1-p_4) \tag{1} Loss=−log(1−p1)−log(1−p2)−log(p3)−log(1−p4)(1)
其中网络一次前向操作计算如下
[z1l1z2l1z3l1]=[w11l1w12l1w13l1w14l1w21l1w22l1w23l1w24l1w31l1w32l1w33l1w34l1]×[x1x2x3x4]+[b1l1b2l1b3l1](2)\begin{bmatrix} z_{1}^{l1}\\ z_{2}^{l1}\\ z_{3}^{l1} \end{bmatrix}= \begin{bmatrix} w_{11}^{l1} & w_{12}^{l1} & w_{13}^{l1} &w_{14}^{l1} \\ w_{21}^{l1} & w_{22}^{l1} & w_{23}^{l1} &w_{24}^{l1} \\ w_{31}^{l1} & w_{32}^{l1} & w_{33}^{l1} &w_{34}^{l1} \end{bmatrix}\times \begin{bmatrix} x_1\\ x_2\\ x_3\\ x_4 \end{bmatrix}+ \begin{bmatrix} b_{1}^{l1}\\ b_{2}^{l1}\\ b_{3}^{l1} \end{bmatrix}\tag{2} ⎣⎡z1l1z2l1z3l1⎦⎤=⎣⎡w11l1w21l1w31l1w12l1w22l1w32l1w13l1w23l1w33l1w14l1w24l1w34l1⎦⎤×⎣⎢⎢⎡x1x2x3x4⎦⎥⎥⎤+⎣⎡b1l1b2l1b3l1⎦⎤(2)
[a1l1a2l1a3l1]=[σ(z1l1)σ(z2l1)σ(z3l1)](3)\begin{bmatrix} a_1^{l1}\\ a_2^{l1}\\ a_3^{l1} \end{bmatrix}= \begin{bmatrix} \sigma(z_{1}^{l1})\\ \sigma(z_{2}^{l1})\\ \sigma(z_{3}^{l1}) \end{bmatrix}\tag{3} ⎣⎡a1l1a2l1a3l1⎦⎤=⎣⎡σ(z1l1)σ(z2l1)σ(z3l1)⎦⎤(3)
[z1l2z2l2z3l2z4l2]=[w11l2w12l1w13l1w21l2w22l2w23l2w31l2w32l2w33l2w41l2w42l2w43l2]×[a1l1a2l1a3l1]+[b1l2b2l2b3l2b4l2](4)\begin{bmatrix} z_{1}^{l2}\\ z_{2}^{l2}\\ z_{3}^{l2}\\ z_{4}^{l2} \end{bmatrix}= \begin{bmatrix} w_{11}^{l2} & w_{12}^{l1} & w_{13}^{l1} \\ w_{21}^{l2} & w_{22}^{l2} & w_{23}^{l2} \\ w_{31}^{l2} & w_{32}^{l2} & w_{33}^{l2} \\ w_{41}^{l2} & w_{42}^{l2} & w_{43}^{l2} \end{bmatrix}\times \begin{bmatrix} a_1^{l1}\\ a_2^{l1}\\ a_3^{l1} \end{bmatrix}+ \begin{bmatrix} b_{1}^{l2}\\ b_{2}^{l2}\\ b_{3}^{l2}\\ b_{4}^{l2} \end{bmatrix}\tag{4} ⎣⎢⎢⎡z1l2z2l2z3l2z4l2⎦⎥⎥⎤=⎣⎢⎢⎡w11l2w21l2w31l2w41l2w12l1w22l2w32l2w42l2w13l1w23l2w33l2w43l2⎦⎥⎥⎤×⎣⎡a1l1a2l1a3l1⎦⎤+⎣⎢⎢⎡b1l2b2l2b3l2b4l2⎦⎥⎥⎤(4)
[p1p2p3p4]=[σ(z1l2)σ(z2l2)σ(z3l2)σ(z4l2)](5)\begin{bmatrix} p_1\\ p_2\\ p_3\\ p_4 \end{bmatrix}= \begin{bmatrix} \sigma(z_{1}^{l2})\\ \sigma(z_{2}^{l2})\\ \sigma(z_{3}^{l2})\\ \sigma (z_{4}^{l2}) \end{bmatrix}\tag{5} ⎣⎢⎢⎡p1p2p3p4⎦⎥⎥⎤=⎣⎢⎢⎡σ(z1l2)σ(z2l2)σ(z3l2)σ(z4l2)⎦⎥⎥⎤(5)
网络训练就是不断的更新矩阵权重和偏置权重。根据梯度下降原理,首先要计算出损失关于每个权重和偏置的导数。
下面我来拿LossLossLoss对w11l2w_{11}^{l2}w11l2的导数的计算过程做说明,因为LossLossLoss跟p1p_1p1有关,p1p_1p1和z1l2z_1^{l2}z1l2有关,z1l2z_1^{l2}z1l2和w11l2w_{11}^{l2}w11l2有关,所以根据链式法则:
∂Loss∂w11l2=∂Loss∂p1×∂p1∂z1l2×∂z1l2∂w11l2=−1p1×(p1×(1−p1))×a1l1=p1×a1l1(6)\begin{array}{c} \frac{\partial Loss}{\partial w_{11}^{l2}}&=&\frac{\partial Loss}{\partial p_{1}}\times \frac{\partial p_{1}}{\partial z_{1}^{l2}}\times \frac{\partial z_{1}^{l2}}{\partial w_{11}^{l2}}\\[5mm] &=&-\frac{1}{p_1}\times (p_1\times(1-p_1))\times a_{1}^{l1} \\[5mm] &=&p_1\times a_{1}^{l1} \end{array}\tag{6} ∂w11l2∂Loss===∂p1∂Loss×∂z1l2∂p1×∂w11l2∂z1l2−p11×(p1×(1−p1))×a1l1p1×a1l1(6)
注:因为sigmoid′(x)=sigmoid(x)(1−sigmoid(x))sigmoid'(x)=sigmoid(x)(1-sigmoid(x))sigmoid′(x)=sigmoid(x)(1−sigmoid(x)),所以∂p1∂z1l2=p1(1−p1)\frac{\partial p_1}{\partial z_1^{l2}}=p_1(1-p_1)∂z1l2∂p1=p1(1−p1)。
同理,可以计算出LossLossLoss对第二层权重矩阵中每个参数的导数如下
∂Loss∂Wl2=[p1a1l1p1a2l1p1a3l1p2a1l1p2a2l1p2a3l1(p3−1)a1l1(p3−1)a2l1(p3−1)a3l1p4a1l1p4a2l1p4a3l1]=[p1p2(p3−1)p4]×[a1l1a2l1a3l1](7)\begin{array}{c} \frac{\partial Loss}{\partial W^{l2}} &=& \begin{bmatrix} p_1a_{1}^{l1} &p_1a_{2}^{l1} &p_1a_{3}^{l1} \\ p_2a_{1}^{l1} &p_2a_{2}^{l1} &p_2a_{3}^{l1} \\ (p_3-1)a_{1}^{l1} &(p_3-1)a_{2}^{l1} &(p_3-1)a_{3}^{l1} \\ p_4a_{1}^{l1} &p_4a_{2}^{l1} &p_4a_{3}^{l1} \\ \end{bmatrix}\\ &=& \begin{bmatrix} p_1\\ p_2 \\ (p_3-1) \\ p_4 \\ \end{bmatrix} \times \begin{bmatrix} a_{1}^{l1} &a_{2}^{l1} &a_{3}^{l1} \\ \end{bmatrix} \end{array}\tag{7} ∂Wl2∂Loss==⎣⎢⎢⎡p1a1l1p2a1l1(p3−1)a1l1p4a1l1p1a2l1p2a2l1(p3−1)a2l1p4a2l1p1a3l1p2a3l1(p3−1)a3l1p4a3l1⎦⎥⎥⎤⎣⎢⎢⎡p1p2(p3−1)p4⎦⎥⎥⎤×[a1l1a2l1a3l1](7)
计算完权重的导数,就可以更新权重了,学习率η\etaη。
Wl2′=Wl2−η∂Loss∂Wl2=[w11l2w12l2w13l2w21l2a22l2a23l2w31l2w32l2w33l2w41l2w42l2w43l2]−η[p1a1l1p1a2l1p1a3l1p2a1l1p2a2l1p2a3l1(p3−1)a1l1(p3−1)a2l1(p3−1)a3l1p4a1l1p4a2l1p4a3l1](8)\begin{array}{c} W^{l2'} &=& W^{l2}&-& \eta \frac {\partial Loss} {\partial W^{l2}}\\[5mm] &=& \begin{bmatrix} w_{11}^{l2} &w_{12}^{l2} &w_{13}^{l2} \\ w_{21}^{l2} &a_{22}^{l2} &a_{23}^{l2} \\ w_{31}^{l2} &w_{32}^{l2} &w_{33}^{l2} \\ w_{41}^{l2} &w_{42}^{l2} &w_{43}^{l2} \\ \end{bmatrix}&-& \eta \begin{bmatrix} p_1a_{1}^{l1} &p_1a_{2}^{l1} &p_1a_{3}^{l1} \\ p_2a_{1}^{l1} &p_2a_{2}^{l1} &p_2a_{3}^{l1} \\ (p_3-1)a_{1}^{l1} &(p_3-1)a_{2}^{l1} &(p_3-1)a_{3}^{l1} \\ p_4a_{1}^{l1} &p_4a_{2}^{l1} &p_4a_{3}^{l1} \\ \end{bmatrix}\\ \end{array}\tag{8} Wl2′==Wl2⎣⎢⎢⎡w11l2w21l2w31l2w41l2w12l2a22l2w32l2w42l2w13l2a23l2w33l2w43l2⎦⎥⎥⎤−−η∂Wl2∂Lossη⎣⎢⎢⎡p1a1l1p2a1l1(p3−1)a1l1p4a1l1p1a2l1p2a2l1(p3−1)a2l1p4a2l1p1a3l1p2a3l1(p3−1)a3l1p4a3l1⎦⎥⎥⎤(8)
注:我们这里只计算了一个样本的梯度,实际训练时,应该计算出该批次所有样本的梯度,然后求平均值,再更新权重。
因为a>=0a>=0a>=0,概率值p∈[0,1]p\in[0,1]p∈[0,1],我们举例的这个样本属于第3类,
所以更新一次后,用来预测这一类的参数w31l2、w31l2、w31l2w_{31}^{l2}、w_{31}^{l2}、w_{31}^{l2}w31l2、w31l2、w31l2在增大,而其他类的预测参数在减小wj1l2、wj1l2、wj1l2,j=1,2,4w_{j1}^{l2}、w_{j1}^{l2}、w_{j1}^{l2},j=1,2,4wj1l2、wj1l2、wj1l2,j=1,2,4。
j=3j = 3j=3时
p3=σ(z3l2)=σ(w31l2a1l1+w32l2a2l1+w33l2a3l1+b3l2)\begin{array}{c} p_3 &=& \sigma(z_3^{l2})\\ &=&\sigma (w_{31}^{l2}a_1^{l1}+w_{32}^{l2}a_2^{l1}+w_{33}^{l2}a_3^{l1}+b_3^{l2}) \end{array} p3==σ(z3l2)σ(w31l2a1l1+w32l2a2l1+w33l2a3l1+b3l2)
j≠3j \neq 3j=3时
pj=σ(zjl2)=σ(wj1l2a1l1+wj2l2a2l1+wj3l2a3l1+bjl2)\begin{array}{c} p_j &=& \sigma(z_j^{l2})\\ &=&\sigma (w_{j1}^{l2}a_1^{l1}+w_{j2}^{l2}a_2^{l1}+w_{j3}^{l2}a_3^{l1}+b_j^{l2}) \end{array} pj==σ(zjl2)σ(wj1l2a1l1+wj2l2a2l1+wj3l2a3l1+bjl2)
所以网络是沿着增大p3p_3p3,减小p1、p2、p4p_1、p_2、p_4p1、p2、p4的趋势变化,这样就能保证第3类的预测概率值不断增大,其他类的预测概率值减小,网络精度就会越来越高;同理如果训练样本属于第1类,则网络参数更新的时候用来预测第1类的参数w11l2、w11l2、w11l2w_{11}^{l2}、w_{11}^{l2}、w_{11}^{l2}w11l2、w11l2、w11l2会增大,预测其他类的权重参数会减小。
可以再看一下公式(7),∂Loss∂Wl2\frac{\partial Loss}{\partial W^{l2}}∂Wl2∂Loss,我们可以写成更一般的形式,即对于一个属于ccc类的样本,LossLossLoss关于最后一层权重的导数为:
∂Loss∂Wl2=[p1p2...(pc−1)...pC−1pC]×[a1l1a2l1...acl1...aC−1l1aCl1](9)\begin{array}{c} \frac{\partial Loss}{\partial W^{l2}} &=& \begin{bmatrix} p_1\\ p_2 \\ ...\\ (p_c-1) \\ ...\\ p_{C-1}\\ p_C \\ \end{bmatrix} \times \begin{bmatrix} a_{1}^{l1} &a_{2}^{l1} &...&a_c^{l1}&...&a_{C-1}^{l1} &a_{C}^{l1} \\ \end{bmatrix} \end{array}\tag{9} ∂Wl2∂Loss=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡p1p2...(pc−1)...pC−1pC⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤×[a1l1a2l1...acl1...aC−1l1aCl1](9)
c类对应的权重关于LossLossLoss的梯度为负(pc−1<0p_c-1<0pc−1<0),其他类对应的权重关于LossLossLoss的梯度为正(pj∈[0,1)∣j≠c−1p_j \in[0,1) |j \neq c-1pj∈[0,1)∣j=c−1),权重更新时是减去对应位置的梯度,所以c类对应的权重会累积一个正向梯度,其他类会累积一个负向梯度。网络每训练一次,就会计算一次梯度,因此,对于ccc类对应的权重一直在累积正向梯度,其他类一直在累积负向梯度。
对于一个类别,包括背景在内的其他类别都可以看做是这个类别的负类,怎么理解呢?ccc类对应的最后一层权重用来预测属于ccc类的概率值,训练时,如果一个样本是ccc类,权重就会累积一个正向梯度,如果一个样本属于jjj类(j≠cj \neq cj=c),ccc类对应的权重就会累积一个负向梯度。如果ccc类样本特别多,累积的正向梯度就会大于负向梯度,如果ccc类是稀有类,ccc类对应的权重累积的正向梯度就会远远小于累积负向梯度,导致预测错误。
如果理解了我说的上面的这些(也许也跟我的文字表达水平有关),那么论文中的一些关键地方就能明白的差不多了。
配合正文第一节第4段说明:
我们来看这段话,对于频繁出现的类别,正梯度的影响大于负梯度,但对于罕见类别,情况正好相反。更进一步地说,分类任务中常用的损失函数(softmax交叉熵和sigmoid交叉熵)对非标签类(负类)有抑制作用。当某一类的样本用于训练时,其他类的预测参数(即对应的权重)将收到负向的梯度,导致这些类的预测概率降低。由于稀有类别的样本几乎不存在,因此在网络参数更新期间,用来预测这些类别的参数会被负向梯度所覆盖。
Equalization Loss的出发点就是说既然稀有类对应的权重老是累积负向梯度,而很少累积正向梯度,导致正向梯度被负向梯度掩盖,那么我们可以人为的控制不让稀有类别对应的权重累积负向梯度,只累计正向梯度。
怎么做呢?
四、Equalization Loss公式
4.1、基于sigmoid的交叉熵损失修改
LEQL=−∑j=1Cwjlog(pj^)L_{E Q L}=-\sum_{j=1}^{C} w_{j} \log \left(\hat{p_{j}}\right)LEQL=−j=1∑Cwjlog(pj^)
其中wjw_jwj表达式如下:
wj=1−E(r)Tλ(fj)(1−yj)w_{j}=1-E(r) T_{\lambda}\left(f_{j}\right)\left(1-y_{j}\right)wj=1−E(r)Tλ(fj)(1−yj)
可以看到Equalization Loss的做法是对每个类别增加一个权重wjw_jwj。
这里我们看看wjw_jwj到底是怎么取值的,主要是三个参数,即E(r)E(r)E(r)、Tλ(fj)T_{\lambda}\left(f_{j}\right)Tλ(fj)、yiy_iyi。当一个预选框是背景的时候,E(r)E(r)E(r)=0,当预选框为前景的时候E(r)E(r)E(r)=1。Tλ(x)T_{\lambda}(x)Tλ(x)是一个阈值函数,当x<λ\lambdaλ时,输出1,否则输出0,fjf_jfj代表j类样本在总数据集中的占比。
下面我们来分析一下,wjw_jwj在各种情况下的取值。
1)预选框为背景,则E(r)E(r)E(r)=0,wj=1w_j=1wj=1。
2)前景类是正类,yj=1y_j=1yj=1,wj=1w_j=1wj=1。
3)前景类是负类,E(r)=1E(r)=1E(r)=1,yj=0y_j=0yj=0,关键是Tλ(fj)T_{\lambda}\left(f_{j}\right)Tλ(fj),如果属于头部类(该类样本多),即f(j)>λf(j)>\lambdaf(j)>λ,则Tλ(fj)=0T_{\lambda}\left(f_{j}\right)=0Tλ(fj)=0,wj=1w_j=1wj=1;如果属于尾部类(该类样本少),即f(j)<λf(j)<\lambdaf(j)<λ,则Tλ(fj)=1T_{\lambda}\left(f_{j}\right)=1Tλ(fj)=1,wj=0w_j=0wj=0。
经过以上分析我们可以知道只有稀有类做负类时,对应的权重w=0w=0w=0,也就是这一类不再对损失有贡献。
我们来看看加入权重后LossLossLoss关于最后一层权重的导数:
∂Loss∂Wl2=[w1p1w2p2...wc(pc−1)...wj(pj)...wC−1pC−1wCpC]×[a1l1a2l1...acl1...ajl1...aC−1l1aCl1](10)\begin{array}{c} \frac{\partial Loss}{\partial W^{l2}} &=& \begin{bmatrix} w_1 p_1\\ w_2p_2 \\ ...\\ w_c(p_c-1) \\ ...\\ w_j(p_j)\\ ...\\ w_{C-1}p_{C-1}\\ w_Cp_C \\ \end{bmatrix} \times \begin{bmatrix} a_{1}^{l1} &a_{2}^{l1} &...&a_c^{l1}&...&a_j^{l1}&...&a_{C-1}^{l1} &a_{C}^{l1} \\ \end{bmatrix} \end{array}\tag{10} ∂Wl2∂Loss=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡w1p1w2p2...wc(pc−1)...wj(pj)...wC−1pC−1wCpC⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤×[a1l1a2l1...acl1...ajl1...aC−1l1aCl1](10)
该样本属于ccc类,当j≠cj \neq cj=c时,jjj类此时就是负类,如果说jjj类是稀有类,则对应的权重wj=0w_j=0wj=0,因此j类对应的权重关于Loss的导数为0,这样网络更新时,在jjj类处累积的梯度就为0;而当稀有类jjj作为正类时(j=cj=cj=c),对应的权重wj=1w_j=1wj=1,网络更新时,在jjj类处累计的梯度就为1−pj1-p_j1−pj(梯度的反方向),这样就能保证在模型训练时,稀有类j作为负类的梯度累积始终为0,作为正类时梯度还是能正常累积,从而提高稀有类的预测精度。
3.2、基于Softmax的交叉熵损失的修改
四、参考
1、神经网络多分类中softmax+cross-entropy的前向传播和反向传播过程
2、Equalization Loss for Long-Tailed Object Recognition
Equalization Loss理解-更新中相关推荐
- 深入理解JS的面向对象(更新中)
面向对象是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.面向对象是一种对现实世 ...
- 【Spring Boot官方文档原文理解翻译-持续更新中】
[Spring Boot官方文档原文理解翻译-持续更新中] 文章目录 [Spring Boot官方文档原文理解翻译-持续更新中] Chapter 4. Getting Started 4.1. Int ...
- 损失函数——长尾分布 / Equalization Loss【论文笔记】
Contents 1 前言 1.1 重采样(re-sampling) 1.2 重加权(re-weighting) 2 softmax/sigmoid cross-entropy 2.1 softmax ...
- 彻底理解js中this
相关博文:http://blog.csdn.net/libin_1/article/details/49996815 彻底理解js中this的指向,不必硬背. 首先必须要说的是,this的指向在函数定 ...
- db2dual_DB2常用SQL的写法(持续更新中...)
DB2常用SQL的写法(持续更新中...) -- Author: lavasoft -- Date : 2006-12-14 -- 创建一个自定义单值类型 create distinct typ ...
- 理解分布式系统中的缓存架构(下)
承接上一篇<理解分布式系统中的缓存架构(上)>,介绍了大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景,本文主要介绍缓存架构设计常见问题以及解决方案,业界案例. 1. 分层缓存架 ...
- 理解分布式系统中的缓存架构(上)
本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 1. 缓存概述 缓存概述 2. 缓存的分类 缓存主要分为以下四类 缓存的分类 2.1 CDN缓存 基本介绍 CDN(Conte ...
- 如何理解 JAVA 中的 volatile 关键字
如何理解 JAVA 中的 volatile 关键字 最近在重新梳理多线程,同步相关的知识点.关于 volatile 关键字阅读了好多博客文章,发现质量高适合小白的不多,最终找到一篇英文的非常通俗易懂. ...
- 前端知识点总结——JS高级(持续更新中)
前端知识点总结--JS高级(持续更新中) 1.字符串 什么是: 连续存储多个字符的字符数组 相同: 1. 下标 2. .length 3. 遍历 4. 选取: slice(starti[, endi] ...
最新文章
- 李航统计学习方法视频教程
- numpy/arrayobject.h”: No such file or directory
- linux6的关机快捷键是,桌面应用|Fedora GNOME 的常用快捷键
- 11组软件工程组队项目计划安排及项目介绍——失误招领系统
- Rule-Guided Compositional Representation Learning on Knowledge Graphs-学习笔记
- ASP.NET 例程完全代码版(5)——通过web.config配置数据库连接池
- 【2018icpc宁夏邀请赛现场赛】【Gym - 102222F】Moving On(Floyd变形,思维,离线处理)
- [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解
- coreseek实时索引更新之增量索引
- Sublime Text3的Package Control安装教程,及报错解决There Are No Packages Available For Installation...
- 【论文笔记】Deep Neural Networks for Object Detection
- 医疗物联网解决方案提供商“识凌科技”完成C轮融资
- jenkins+ansible+gitlab
- 如何给计算机关闭网络连接,win10系统的电脑怎么把网络连接关闭?
- 用报初会的照片报计算机,会计考试报名倒计时,手把手教你一次通过审核工具...
- (HG模块,简洁明了)Hourglass Module介绍
- 基于processing的《代码本色》应用拓展——表现随机行为及牛顿运动学
- python全栈开发中级班全程笔记(第三模块、第一章(多态、封装、反射、内置方法、元类、作业))...
- 关于Java中的引用的用法
- H265(HEVC)视频下载 测试专用
热门文章
- dw连接服务器文档类型,dw怎么和本地服务器连接数据库连接
- 项目生命周期及其主要工作
- Facebook AI推出“杂食者”:一个模型解决图像、视频和3D数据三大分类任务,性能还不输独立模型
- 选择视频编码器的误区------傅德良
- Fedora上使用腾讯会议
- iphone3开发基础教程
- Melty blood act cadenza Version B(附 OST) emule 下载
- “降噪”与“匠心”兼得:索尼WH-1000XM4评测体验
- 常用4种限流算法介绍及比较
- 真无线耳机哪个牌子好用?2023便宜好用的无线耳机推荐