作者:
NVIDIA
Samuli Laine
Timo Aila
年份:2016
核心原则:一致性正则(consistency regularization)
一致性正则要求一个模型对相似的输入有相似的输出,即给输入数据注入噪声,模型的输出应该不变,模型是鲁棒的。
来自【5】的描述
提出模型
模型1:П-model
从这个模型流程图可以知道,数据样本xi(例如论文中数据为图片),经过了两次模型进行随机计算(或者理解为加入一些对抗的因子)。由于经过了带有随机性的计算,故计算结果会有一定误差,这个计算就是上面的squared difference的损失计算Loss1;另外,还有一个就是交叉熵的计算,即是cross-entropy,这个很显然是带有yi的计算,也就是监督的Loss2。这个过程用一句话来说,损失的计算是未标注数据损失值Loss1与标注的损失值Loss2两都构成。两都的合并,加入了w(t)的控制,w(t)是权重随时间变化而变化的权重函数,当t=0时,w(t)=0,即开始于0;然后渐渐增大。直观来说,未标注数据信息随着模型的学习,渐渐加入。论文的实验中设置规则为:前80轮函数为:exp(-5(1-T)^2); T从0到1接近线性增长变化。
【3】如上图所示,Π Model 包含两个核心点:
- 第一:对每一个参与训练的样本,在训练阶段,进行两次前向运算。此处的前向运算,包含一次随机增强变换和一次模型的前向运算。由于增强变换是随机的,同时模型采用了 Dropout,这两个因素都会造成两次前向运算结果的不同,如图中所示的两个 zi。
- 第二:损失函数由两部分构成,如下图所示。第一项由交叉熵构成,仅用来评估有标签数据的误差。第二项由两次前向运算结果的均方误差(MSE)构成,用来评估全部的数据(既包括有标签数据,也包括无标签数据)。其中,第二项含有一个时变系数,用来逐步释放此项的误差信号。此处的第二项即是用来实现一致性正则。
具体的流程算法伪代码:
模型2:Temporal ensembling
时序ensembling模型相对于П-model,它也是计算两个预测结果,可是不同的是,П-model是经过在一个epoch中两次计算,这里则是当前的zi与历史的zi来计算,而zi传播下去的公式如下,可以理解为,历史zi并不是上一次的输出,而是一个历史序列的组合,是一个指数滑动平均(Exponentially Moving Average,EMA),这个也是体现了==“ensembling”==的核心。
这个a是一个动量项。它直接控制着历史对当前的影响情况。
这样处理与优化,就像早以空间来换取时间,在每epoch的计算时就少向前计算了一次;另外,这个可以平滑历史而产生预测性的结果,避免单次计算的噪音。
Algorithm2描述了这个过程:
实验及结果:
数据集:CIFAR-10,SVHN
总结:
基于一致性的半监督学习。提出两个实现模型,一个是一个样本计算两次,计算两次结果的loss; 另一个是一个样本计算一次,与之前历史结果作差异计算得到loss. 然后把这个无标注数据计算出来的结果信息与监督数据计算出来的结果一并组成最后的Loss.
这个一致性原则终于解决了我之前一直在思考的没有标注的数据究竟应该怎么使用的问题,在这里突然把之前苦苦思考给了一个解脱。
参考:
【1】Laine, S., Aila, T. (2016). Temporal Ensembling for Semi-Supervised Learning .arXiv https://arxiv.org/abs/1610.02242
【2】Released as part of ICLR 2017 paper submission “Temporal Ensembling for Semi-Supervised Learning”,https://github.com/s-laine/tempens
【3】我们真的需要那么多标注数据吗?半监督学习技术近年来的发展历程及典型算法框架的演进:https://zhuanlan.zhihu.com/p/138085660
【4】弱监督学习–半监督学习(1):Temporal Ensembling for Semi-Supervised Learning,https://blog.csdn.net/qq_44015059/article/details/106157888
happyprince,https://blog.csdn.net/ld326/article/details/114107647
【5】长文总结半监督学习(Semi-Supervised Learning),https://zhuanlan.zhihu.com/p/252343352