半监督学习中,一部分数据带标签,一部分不带标签,在模型训练过程中,带标签的数据我们注重分类,无标签的数据我们注重分布。
半监督坚持一致性正则(consistency regularization)来进行半监督学习(semi-supervised learning)。一致性正则要求一个模型对相似的输入有相似的输出,即给输入数据注入噪声,模型的输出应该不变,模型是鲁棒的。
Π-model
1个带标签的数据正常前向传播然后计算交叉熵损失
1个不带标签的数据则会前向传播2次然后计算这两次预测的平方误差
Temporal Ensembling 模型
基于Π-model
进行了改进,训练的每个epoch中,同一个无标签的数据前向传播1次,而原本需要再前向传播一次的来计算平方误差的,改为了使用上一个epoch的该样本的预测来计算(具体是通过一个叫指数滑动平均EMA的方法来计算上个epoch的预测,不是直接使用上个epoch的预测值),使得forward的次数减少一半,速度提升近两倍
Exponentially Moving Average - EMA
指数滑动平均是用来估计变量的局部均值,使得变量的更新和一段时间内的历史均值有关。
变量 v 在 t 时刻记为 vt ,θt 为变量 v 在 t 时刻的取值,如果不使用滑动平均模型,vt=θt,使用EMA时,vt如下:
Mean Teachers模型
半监督核心仍是相似的输入,相似的输出
这里输入如果是带标签的,那么通过学生模型正常计算loss
如果是无标签的数据,那么则会通过学生-教师模型计算一致性loss。
- Mean Teachers中的 student模型就是我们正常训练的模型,而Teacher模型则是由student模型的权重进行EMA而得的,Teacher模型不参与反向传播的过程。
- Mean Teachers需要对每个无标签的数据进行两次前向传播,一次学生,一次老师
现在来看总的流程
- 对于数据集[S1,S2],S1有标签,S2无标签,都作为student模型的输入,得到了输出Ys1,Ys2
- 计算有标签的那部分数据即S1的loss
- 同样把数据集[S1,S2],作为teacher模型的输入,得到输出Yt1,Yt2
- 也计算有标签的数据即S1的loss,此时会再多计算1个无标签的数据集即S2的loss(student和teacher模型的一致性损失)
- 得到有监督loss+无监督loss,反向传播,先正常更新student模型的参数,再通过EMA更新teacher模型的参数(teacher模型不会反向传播)