阅读 108

处理标注错误的样本(learning with noisy labels)

1. Co-teaching

image_1eeaarp70ip61scr13dkneglis9.png-59.4kB

上图是三种训练范式的error流转方向。Co-teaching会同时训练两个网络,在每个mini-batch上,在每个网络选择R(T)R(T)百分比的loss比较小的部分sample看作有用知识(useful knowledge),然后把有用知识送到另一个网络中继续训练。而其他两种是自我演化的方式。

具体算法如下: image_1eeag6lou1n4o1jbugq2an47n716.png-118.2kB

假设这两个网络是ff(参数为wfw_f)和gg(参数为wgw_g) 构造mini-batch, 迭代训练NmaxN_{max}次。 从mini-batch中选取loss最小的R(T)R(T)百分比的sample,记为Dˉf\bar{D}_fDˉw\bar{D}_w,步骤4,5。 然后交换用Dˉf\bar{D}_f来训练和更新gg,用Dˉw\bar{D}_w来训练和更新ff,步骤6,7。 R(T)R(T)是随着训练step递减的,就是说他是动态的,每次选择的有用知识会越来越少。

上面算法中,有两个重要的问题需要解释:

  1. 为什么根据一个动态的R(T)R(T)来采样低loss的样本可以帮助我们找到干净的样本?
  2. 为什么需要两个网络并交叉更新参数?

对第一个问题的解释: 首先,当标签是正确的,loss小的样本是更可能是有正确标签的。所以如果我们只采样低loss的样本来训练分类器,那么这样应该可以抵抗噪声标签的。但是,这就要求分类器足够可靠才能保证损失小的样本确实是干净的。 通常深度网络具有“记忆“性,也就是,即使在有noisy的数据集上,网络会在起初的epochs时学习干净简单的模式,所以模型有能力在训练起初阶段过滤噪音数据。但是,随着训练增加,模型会渐渐拟合这些噪音数据。所以,为了利用这个规律,上面的算法在初始mini-batch中选择更多的有效数据,随着训练的进行,逐渐减少。 对于第二个问题: 试想一下,当学生检查自己的试卷时,很难找到错误,因为他们对自己的答案是有个人偏见的,但是,当求助同伴来帮忙检查自己的试卷,这样就更容易找到错误。 通常,不同的分类器可以学习到不同的决策边界,有不同的学习能力。因此,当我们在噪音数据上训练模型时,我们也期望他们有不同的能力来过滤噪音。这启发我们交换损失小的样本,即用从gg(或ff)中选择的小批量样本更新ff(或gg)中的参数。此过程类似于co-training,如果所选样本有噪声,则这两个网络将自适应地校正另一个网络的训练错误。 总而言之,来自一个网络的错误不会直接转回本身,相比较自我演化的方式,我们期望Co-teaching方法可以处理更大噪声的数据。

【参考:】 paper


2. 置信学习

置信学习三个步骤:

  1. Count,估计噪声标签与真实标签的联合分布
  2. Clean,清理错误样本。
  3. Re-Training,清理之后,调整样本类别权重,使用Co-teaching重新训练。

图1

上图是置信学习的框架,下面详细介绍这3个步骤:

1.Count

定义噪声标签为y^\hat{y},即经过初始标注(也许是人工标注)、但可能存在错误的样本。定义真实标签为yy^*,但事实上我们并不会获得真实标签,通常可通过交叉验证1对真实标签进行估计。样本总数为nn,类别总数为mm

估计联合分布步骤如下:

我们的目的是估计联合概率分布Q^y^,y\hat{Q}_{\hat{y},y^*}来描绘类别噪音。通过在混淆矩阵中计算数量,然后校正,每一个标注标签数量,

  • step1,交叉验证
  1. 首先通过交叉验证,在数据集中计算第ii个样本在第jj个类别下的概率:P[i][j]P[i][j]
  2. 计算每个人工标注类别jj下的平均概率t[j]t[j],作为置信度阈值
  3. 最后确定样本ii的真实标签。,其真实标签yy^*jj个类别中的最大概率argmaxjP[i][j]argmax_jP[i][j],并且需要满足P[i][j]P[i][j] > t[j]t[j]
  • step2,计算计数矩阵Cy^,yC_{\hat{y},y^*}(类似于混淆矩阵)。如图1中,Cy^=dog,y=fox=40C_{\hat{y}=dog,y^=fox*}=40,表示x人工标记为dog但实际为fox的样本为40个。算法如下:

image_1eeheps02s7rj471qononf7av9.png-252.3kB

  • step3, 计算矫正的计数矩阵,因为在上一步的计算中,有一个条件是需要大于t[j],所以计数矩阵Cy^,yC_{\hat{y},y^*}和是小于样本总数的。所以这一步的目的就是为了让计数总和与人工标记的样本总数相同。其中,Xy^=iX_{\hat{y}=i}表示人工标注标签y^=i\hat{y} = i的样本总数。

image_1eehgp5i59431tljgr3ij91gd7m.png-7.4kB

  • step 4: 计算联合分布Qy^,yQ_{\hat{y},y^*},就是用上面的结果除以样本总数:

image_1eehntrcc1prs1pskvtl17bs1dj923.png-7.1kB

2.Clean

在得到噪声标签和真实标签的联合分布Qy^,yQ_{\hat{y},y^*} ,论文共提出了5种方法过滤错误样本:

  • M1CconfusionC_{confusion},选取y^!=argmaxi1,2,...mP[i][j]\hat{y} != argmax_{i\in{1,2,...m}}{P[i][j]}的样本过滤,即对于样本ii,如果人工标注标签与模型预测最大值标签不相同则过滤。
  • M2: 选取构造计数矩阵Cy^,yC_{\hat{y},y^*}过程中,进入费对角单元的样本进行过滤。
  • M3: Prune by Class (PBC) ,对于每一个类别i1...mi\in{1...m}选择n.j1..m:j!=iCy^=i,y=j[i]n.\sum_{j\in{1..m:j!=i}}{C_{\hat{y}=i,y^*=j}[i]}个样本,其中n是样本总数,按照P[i][j]P[i][j]排序,过滤到得分最低的。
  • M4:Prune by Noise Rate (PBNR) ,对于非对角单元,选取n.Qy^=i,y=jn.Q_{\hat{y}=i,y^*=j}个样本进行过滤,按照P[y^=i]P[\hat{y}=i]-P[y^=j]P[\hat{y}=j]排序,过滤到得分最低的。

3.Re-Training

在过滤掉错误样本后,根据联合分布Qy^,yQ_{\hat{y},y^*} 将每个类别ii下的损失权重重新赋值为: 1p(y^=iy=i)=Qy[i]Qy^,y[i][i]\frac{1}{p(\hat{y} =i|y^*=i)} = \frac{Q_{y^*}[i]}{Q_{\hat{y},y^*}[i][i]}

其中:Qy[i]=j=i..mQy^,y[j][i]Q_{y^*}[i]=\sum_{j=i..m}{Q_{\hat{y},y^*}[j][i]} 然后采取Co-Teaching框架进行重新训练。

【参考:】 cleanlab 参考1

3. Searching to Exploit Memorization Effect in Learning with Noisy Labels

(待续...)

文章分类
人工智能
文章标签