半监督学习调研
半监督学习:少量数据wiz label + 大量数据without label
论文:Temporal Ensembling For Semi-supervised Learning
首先引入一个background knowledge,
Exponential Moving Average :

为撒要叫exponential呢?从公式中可以看到,在当前的vt中,时间上更久远的v所占的成分呈指数级下降,作为对比,Simple Moving Average则是等权平均一段时间内的序列值
Π-model :对网络做dropout regularization(随机丢弃其中的一部分参数),同一输入(无标签数据)复制两份随机加上input augmentation(如翻转、平移、遮挡等)放到网络里跑,输出的差值平方加到原来的损失中进行梯度下降
(一个问题:无标签数据的cross entropy是怎么得到的?是用pseudo label还是什么呢)

原理:输入数据没有标签,但我们认为,即使加上一些随机性扰动,同一网络提取的深层次本质特征应该是相似的,因此可以作为衡量模型好坏的一个标准
Temporal Ensembling :1 无标签数据经过网络得到的结果 2 同一组数据各个epoch的 预测结果 EMA加权得到的总的预测结果 二者预测结果的square difference作为loss的一部分加到总损失中进行梯度下降

原理:对于一个正确分类的网络,每个epoch的运行结果应该是相似的,因此可以使用之前epoch的预测结果集成到当前输出中(不知道理论上怎么说明,至少论文作者是这么认为的,结果也证明是有效的)
论文:Mean teachers are better role models
Mean Teacher :一个网络复制两份,一份作为student model,另一份是teacher model,使用student中间层的参数,EMA加权更新teacher的weight

Q1 怎么保证teacher model的性能优于student model?
teacher model的weight是由student model权重EMA迭代产生
Q2 为什么说temporal ensembling每一个epoch进行一次EMA,而mean teacher每个step进行一次?
temporal ensembling中要把所有数据全部跑一遍再计算EMA,mean teacher可以每个step都更新参数
Q3 具体的训练流程

1 初始化student model和teacher model(完全相同)
2 对于dataloader的每一个数据,forward两次。student得到的结果与ground truth计算cross entropy,用student的参数经过EMA加权得到teacher的参数,teacher模型得到的预测结果和student计算consistency loss(MSE),由于使用的是resnet,total loss=cross entropy loss + consistency loss + residual loss

consistency cost
3 基于上面得到的损失函数进行随机梯度下降
ps.1 每次循环teacher网络的参数都会更新,因此EMA不是每个epoch进行一次
ps.2 EMA的decay开始设定得很大(0.999)(即之前的weight占比很小),随着teacher和student的weight参数差别减小,decay逐渐减小
参考资料
[1] 【半监督学习】Π-Model、Temporal Ensembling、Mean Teacher
https://www.cnblogs.com/wuliytTaotao/p/12825797.html
[2] Temporal Ensembling for Semi-Supervised Learning
https://arxiv.org/abs/1610.02242
[3] Mean teachers are better role models: Weight-averaged consistency targets improve semi-supervised deep learning results
https://arxiv.org/abs/1703.01780
[4] mean teacher
<>
