# Π-Model & Temporal Ensemble

介绍半监督学习算法Π-Model和Temporal Ensemble

# Π-Model

pi-model在训练的时候会对每个样本xix_i进行随机增强,得到xi1x_{i1}xi2x_{i2};同时在训练的时候,在一个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逐渐增大)

# 训练代码

https://github.com/lianyongxing/text-classification-nlp-pytorch/blob/main/train/train_temporal_ensembling.py

# References

Temporal Ensembling for Semi-Supervised Learning (ICLR2017)