论文的翻译就不放了,这里给出这篇论文的链接,大家感兴趣的可以去看原文。https://arxiv.org/abs/1610.02242
论文简介:这是半监督领域比较早的一篇论文,主要提出来了两个模型,一个是π model,一个是Temporal Ensembling。
体现的原则:一致性原则,就是模型对未标记数据的输出应该具有一致性的正则。是对伪标签那篇论文的拓展,与之前伪标签论文的区别是伪标签中第二项的loss是针对的无标签数据,而temporal ensembling是针对的全部数据
-
π model:
基本思想:让模型对未标记数据进行两次预测,将两次预测的结果之间的均方误差作为无监督的loss损失。
对于一个未标记的数据,由于随机的数据增强以及dropout等随机因素,两次预测的结果可能会不同,但是一个好的模型对于同一个数据的预测值应该是变化不大的(一致性原则),所以最小化均方误差作为无监督的损失项。对于标记数据使用交叉熵计算损失,总的损失是这两个损失的结合,权重w(t)
π model的无监督代价是对同一个输入在不同的正则和数据增强的条件下的一致性,即要求在不同的条件下,模型的估计也近似一致,从而鼓励网络学习数据内在的不变性。缺点也很明显,每个迭代周期要对同一个输入在不同正则和数据增强的条件下预测两次,相对耗时。 -
Temporal Ensembling:
temporal ensembling模型是对每一次迭代期的预测进行移动平均来构造更好的target然后用这个target来计算无监督的loss。然后更新网络。缺点是计算移动平均的target需要较多的空间,但是也可以收集其他的信息比如二阶原始距。此外, temporal ensembling还对标签噪声具有鲁棒性,即使有标签的数据有误,无监督的损失也可以去平滑这种错误标签的影响。
模型只采取模型的一次预测作为重构项可能会有较大的误差,所以这个模型的特点是将多次的结果集成,作为重构的目标。 -
总结一下二者的区别:
在π model中,隐藏层的输出的两个z来自于同一个迭代产生的两次结果,但是在temporal ensembling中,一个z来自于上次迭代周期产生的结果,一个z来自于当前迭代周期产生的结果,也就是比较了两次不同时间产生的z。在论文中提到的,这个上次迭代产生的z,并不是仅仅包含上次的z,其实是历史z的一个加权和,这样能保存历史信息,衰减长远的历史信息保存稳定的当前值。具体的模型流程图如下所示:
-
分析一下两个模型的算法流程:
前面几行是关于算法的各种准备的符号说明,再补充一个C,代表类别的种类的个数。所以对每个batch B来说,首先是通过两次的dropout和增强得到两个隐藏层的输出z,然后计算loss,这里的loss分为监督学习部分的loss具体是交叉熵,针对的是带标签的数据,在无监督部分,针对的是全部的数据,使用的是均方误差。
对于这个temporal ensembling来说,与前面模型的区别是首先计算损失的这里,与前面的πmodel相同,然后是获得z的方式,第一个获得zi的式子是通过增强输入获得一个zi,然后通过a去计算一个集成的预测结果,这里集成的是历次的结果,a是一个介于0-1之间的数值,用来衰减长远的历史信息保存稳定的当前值,其实就是乘了一个比例(我认为),然后再通过一个除法得到当前的一个target vector。
以上是我的理解,其中借鉴了多篇博客的内容,由于没有记录链接,所以希望原作者看到海涵!
半监督小白学习上路ing…O(∩_∩)O哈哈~