# Π-Model & Temporal Ensemble
介绍半监督学习算法Π-Model和Temporal Ensemble
# Π-Model
pi-model在训练的时候会对每个样本进行随机增强,得到和;同时在训练的时候,在一个batch中同时加入labeled data和unlabeld data,得到batch1和batch2,首先对batch1进行预测得到logits1,再不更新梯度对时候对batch2进行预测得到logits2,对于labeled data计算其ce loss,作为supervised loss,对于两个batch之间的差异,计算mse loss,最终两个loss带权相加
# 训练代码
https://github.com/lianyongxing/text-classification-nlp-pytorch/blob/main/train/train_pi_model.py
# Temporal Ensemble
Temporal ensemble的核心思想在于,不同于Pi-Model中每个case在一次训练时,需要predict两次,得到两个logits,而是在时间(训练的不同epoch)上进行ensemble,将上一个epoch训练结果加入到当前epoch的训练loss计算当中,具体ensemble的方式是EMA(指数滑动平均)
具体实现为,在训练时loss分为supervised loss和unsupervised loss,supervised loss仍然为当前epoch输出的logits和label之间的cross entropy;unsupervised loss为当前epoch输出logits与之前所有epoch的ensemble结果的加权logits的MSE;最终两个loss加权求和(在前几个epoch,supervised loss比较重要,因此unsupervised loss的weight要ramp up逐渐增大)