半监督方法
最近需要做半监督目标检测,于是调研了一下半监督方法,主要有两种主流方式:生成伪标签(Pseudo Label)以及一致性学习(Consistency Based Learning)。浅浅记录一下调研结果。
1 Pseudo Label Based Learninng
1.1 Self-raining
在已标记的数据上训练,然后对未标注数据进行预测,取预测置信度最高的样本直接对其进行标签定义,然后将这类样本纳入当前训练样本中继续训练,直到模型的预测结果不再发生变化;
如果是分类问题:选择预测概率最有把握的样本的标签作为真实的标签(例如概率为0.99或者概率未0.01的预测标签),将预测然后将得到的有标注的数据加入原始数据继续进行训练,再预测,一直到达停止条件(例如大部分甚至全部unlabeled的样本都被打上了标签),此时,我们就把未标注的样本通过这种方式标注出来了;
如果是回归问题,则进行第一轮预测,将预测结果作为新的标签,然后将unlabeled和labeled的数据合并进行训练,再进行第二次预测,计算两次预测的结果中,unlabeled数据的误差情况,取误差最小的部分样本直接进行标签的定义,最后按照上述的思路反复迭代一直到误差收敛为止,此时,我们就把未标注的样本通过这种方式标注出来了;
缺点:对于初始模型的精度要求较高,如果初始模型的精度本身就比较差则不适用于使用这种技术
1.2 Pseudo label
同时在一批带标签和未带标签的图像上训练模型。以通常的监督方式在带标签图像上使用带有交叉熵损失来训练模型。使用同一模型来预测一批未标记图像的标记,并将最大置信度类别用作伪标记。然后,通过比较模型预测和未标记图像的伪标记来计算交叉熵损失。
总的损失是标记和未标记损失项的加权和
1.3 Noisy Student
Xie等人在2019年提出了一种受知识蒸馏启发的半监督学习方法,称为“Noisy Student”。其关键思想是训练两个独立的模型,即“教师模型”和“学生模型”。首先在有标签图像上训练一个教师模型,用来给无标签图像打伪标签。这些伪标签可以是软标签,也可以使用最大置信度类别转换为硬标签。然后将有标签图像和伪标签图像混在一起,使用RandAugment、Dropout、Stochastic Depth添加噪声,训练一个学生模型。学生模型训练好以后,将其作为新的教师模型,重复上述过程若干次。
2 Consistency Based Learning
一致性正则化(Consistency Regularization)的关键思想是,即使添加了噪声,模型对无标签图像的预测结果也应保持不变。
2.1 π-model
Laine等人在ICLR 2017的一篇论文中提出了π-model,其关键思想是,为有标签数据和无标签数据创建两个随机增广图像,然后利用一个带有dropout的模型来预测这两个图像的标签,将两个预测结果的平方差作为一致性损失。对于有标签图像,额外计算其交叉熵损失。最终的总损失是这两项损失的加权和,权重w(t)用于确定一致性损失在总损失中所占的比例(初始为0)。
2.2 Temporal Ensembling
Laine 等人利用预测的指数移动平均(EMA)对 π 模型作了改进。
关键思想是将过去预测的指数移动平均值用作一个视图。为了获得另一个视图,我们像往常一样增强图像,并使用带有 dropout 的模型来预测标签。当前预测和 EMA 预测的差平方用作一致性损失。对于标记图像,我们还计算了交叉熵损失。最终损失是这两个损失项的加权和。权重w(t)用于确定一致性损失在总体损失中的贡献程度。
2.3 Mean Teacher
该方法由Tarvainen等人提出,其关键思想是训练两个模型,即“学生模型”和“教师模型”,学生模型是一个带有dropout的常规模型,教师模型与学生模型具有相同的架构,但其权重是使用学生模型权重的指数移动平均值设置的。对于有标签或无标签的图像,作者创建两个随机的图像增广版本。然后,使用学生模型预测第一张图像的标签分布,使用教师模型预测第二张增广图像的标签分布,并将这两个预测的平方差作为一致性损失。对于有标签的图像,作者还计算了交叉熵损失。最终的总损失是这两项损失的加权和,权重w(t)用于确定一致性损失在总损失中所占的比例。
3 Hybrid Methods
这个范式结合了以前工作的思想,如自训练和一致性正则化,以及用于改进性能的附加组件。
3.1 MixMatch
该方法由Berthelot等人提出。作者对有标签图像创建一个增广,对无标签图像创建K个增广,并在所有K个增广图像上进行模型预测。然后,对预测结果进行平均,并应用温度标度法得到最终的伪标签,这个伪标签将用于所有K个增广图像。
将增广的有标签图像和无标签图像混为一组,并进行洗牌,然后将该组的前N个图像取为WL,其余M个图像取为WU。将增广的有标签图像和WL混合,将增广的无标签图像和WU混合,得到最终的有标签组(L’)和无标签组(U’)。
最后,对有标签组进行模型预测,并用混合真实标签计算交叉熵损失。类似地,对无标签组进行模型预测,并用混合伪标签计算均方差(MSE)损失。最终的总损失是这两项损失的加权和,权重λ用于确定MSE损失在总损失中所占的比例。
3.2 FixMatch
该方法由Sohn等人提出,结合了伪标签和一致性正则化,同时极大地简化了整个方法。它在广泛的基准测试中获得了最先进的结果。如图所示,作者使用交叉熵损失在有标签图像上训练一个监督模型。对于每张无标签图像,分别采用弱增广和强增广的方法得到两张图像。将弱增广图像传递到模型中,对其类别进行预测,将最大置信度类别的概率与阈值进行比较,如果它高于阈值,则将该类作为伪标签。然后对强增广图像进行预测,将该预测结果与前述伪标签进行比较,将两种损失结合起来,对模型进行优化。
3.3 FlexMatch
Motivation
随着模型训练而产生的伪标签往往伴随着大量错误标注,很多算法因此设定了一个高而固定的阈值来选取那些置信度高的伪标签去计算无监督损失。高阈值可以有效地降低确认偏差(confirmation bias),过滤有噪数据,然而提这种固定的高阈值存在一定问题
第一,在训练的起步阶段,受随机初始化影响,模型很可能把数据都盲目地预测到一个类里面去并且信心很高。如果一个batch中,只选出了这样错误的高信心伪标签,就会把模型往一个错误的方向优化。同时,即便一些样本的预测是正确的,由于开始阶段普遍置信度偏低,导致每个batch的数据利用率不高(大部分被过滤掉了),也会导致收敛很慢。如图ab是FixMatch和FlexMatch的收敛速度对比。
第二,对于分类任务而言,不同的类别的学习难度是不同的,模型在某一时刻对各类的学习情况也是不同的。学的比较好的类,或是简单的类,置信度自然会比较高,就更容易被固定阈值选取。而那些困难的类别,或是当下学的不是很好的类,由于置信度会偏低,就不容易被选到。这样就会导致模型有点“偏科”,比如一个孩子数学学得很好,家长又天天给他看数学书,于是他的数学分就越来越高。而语文本身学的就差,又很少去看语文书,导致语文分数一直提升不上来。表现到模型上就是:对困难类别的拟合不会很好,导致困难类别的最终精度不会很高。如图cd是FixMatch和FlexMatch的各类学习效果对比。
为了解决第一个问题,作者引入了阈值的warm-up。其思想是,前期由于置信度不是很可靠,我们并不完全根据置信度来选样本,而是让所有类的阈值逐渐从0开始上升,给所有样本一个被学习的机会,等模型逐渐稳定获得辨识能力后再恢复到设计的动态阈值,其思想类似学习率的warm-up,因此叫threshold warm-up
针对第二个问题作者引入了课程学习的思想,把单独的固定阈值转化成了逐类的动态阈值,根据类别难度给每个类不同的阈值,且这些阈值可以随着模型的学习情况进行实时调整。
核心思想
各类的动态阈值是如何设计的呢?一个最简单的想法是通过类别准确率(class-wise accuracy)来确定。即:降低准确率更低的类的阈值,给这些类的数据更多被学习的机会,以让模型更好地拟合这些类。而对于准确率已经很高的类,就保持高阈值,以确保最终的精度。
这是一个很理想的方法,但是却存在一些问题。
首先,这种方式需要一个额外的有标签的验证集来评价各类的准确率,这在半监督学习下是一笔昂贵的开销,因为我们的标记数据已经很少了(本文实验中在最少的情况下每类只用了4个标记数据)。
其次, 这种方式需要引入大量的额外计算,因为要想实时调整动态阈值,需要在每一步迭代后都做一个额外的前向传播来计算类别准确率。这会大幅降低算法速度。
而CPL用了一种巧妙且简单的方法,使得既不需要额外验证集,也不引入额外计算,还不增加额外的超参数。如下图所示
如图,从图中左侧可以看到CPL考虑了所有的类的所有历史时刻的样本的置信度,对每个类会统计所有超过 τ 的样本数量,其中 τ 就是前文提到的FixMatch中使用的固定高阈值,将统计出的数量作为学习效果预估(estimated learning effect),并最终用其来调整动态阈值。这其中的关键假设是:当阈值足够高的时候,高于该阈值且落入类别c的样本个数可以大致反映类别c的学习效果。换句话说就是如果按FixMatch的算法来走,被选中样本越多的类学习效果就越好,反之亦然。这种设计的巧妙之处在于,FixMatch(UDA等算法同理)在训练的过程中就在选样本了,如果用他已经选出来的样本来调整动态阈值,那不就不需要额外的验证集,也不需要额外前向传播了。
步骤
-
学习效果预估。 如前文所述,这里 σt© 表示第 c 类在时刻 t 的预估学习效果,他其实就是在所有样本中对’高于固定阈值 τ ‘且’属于类别 c ‘的样本的一个计数。
. -
归一化。 由于预估学习效果是对样本的一个计数,他的大小会随数据集包含样本数而变,因此需要对其进行归一化使其范围在0到1之间。注意这里归一化分母不是所有类的统计的求和,而是取所有类预估学习效果中的最大值。这样做的特点是,学的最好的类的学习效果为1,进而在应用公式(7)后,其阈值变为 τ ,也是动态阈值的上限。
3.4 OpenMatch [pdf]
FixMatch等典型的SSL方法假定标记和未标记的数据共享相同的标签空间。然而,在实践中,未标记的数据可能包含标记集中看不到的类别,即异常值,这可能会严重损害SSL算法的性能。
提出了一种新的开放集半监督学习(OSSL)方法,称为OpenMatch。在拒绝异常值的同时学习内联项的表示对于OSSL的成功至关重要。为此,OpenMatch将FixMatch与基于一对多(OVA)分类器的新颖性检测统一起来。OVA分类器输出一个样本的置信度得分作为一个输入,提供一个检测异常值的阈值。另一个关键贡献是开放集软一致性正则化损失,它增强了OVA分类器在输入变换方面的平滑度,并大大改进了异常检测。