受干扰学生论文里提到6篇知识蒸馏及伪标签暗知识的论文,除去较早发表的3篇,包括以下3篇:
1. Distilling the knowledge in a neural network(2015),神经网络知识蒸馏的开山之作,也是最为知名的
2. Bayesian dark knowledge(2015)
3. Born again neural networks(2018),训练一个和teacher参数一样多的student网络,并且准确率超过了teacher网络
自纠正论文里提到2篇用于半监督学习的伪标签论文,包括:
1. Pseudo-label: The simple and efficient semi-supervised learning method for deep neural networks(2013)(有趣的是SCHP论文里不涉及到半监督,伪标签最初是用于蒸馏还是用于半监督?)
2. Training deep neural networks on noisy labels with bootstrapping(2014)
先从开山之作开始吧:https://arxiv.org/pdf/1503.02531.pdf
提高几乎所有机器学习算法性能的一个非常简单的方法是在相同的数据上训练多个不同的模型,然后对输出取平均[3]。不幸的是,使用整个模型集合进行预测是很麻烦的,而且计算成本可能太高,以至于在很多情况下无法部署,尤其是在单个模型就是大网络的情况下。[1]已经证明,可以将集成模型的知识压缩到一个更容易部署的单一模型中,而我们使用了不同的压缩技术进一步发展了这一方法。我们在MNIST上取得了一些令人惊讶的结果,并且证明了通过将模型集合中的知识提取到单个模型中,我们可以显著地改进大量使用的商业系统的声学模型。我们还介绍了一种由一个或多个完整模型和多个专家模型组成的新型集成方法,这些模型学习区分完整模型混淆的细粒度类别。与混合专家不同,这些专家模型可以快速并行地训练。
1 引言
许多昆虫的幼虫形态和成虫形态不同,幼虫形态可以从环境中提取能量和营养,成虫形态适合旅行和繁殖。早大规模机器学习中,我们常常在训练阶段和部署阶段使用非常相似的模型,尽管训练和部署的要求非常不同:对于语音和物体识别这样的任务,训练必须从非常大规模的、高度冗余的数据集中提取结构,但训练是不需要实时的,并且可以使用大量的算力。然而在部署的时候,对延迟和计算资源有更严格的要求。和昆虫的类比提示我们,如果复杂模型能够更容易地从数据中提取结构的话,我们应该很愿意取训练复杂的模型。复杂模型可以是多个单独训练的模型的集成,也可以是一个使用很强的正则化(如dropout)训练的单个非常大的模型[9]。复杂模型一旦训练完了,我们就可以开始另一种训练,称之为“蒸馏”,将知识从复杂模型转移到更适合部署的小模型上。[1]已经开创了该方法的第一个版本,在他们的重要论文中,他们令人信服地证明了一个大的集成模型的知识可以转移到小模型上。
一个认知上的障碍可能使得这种有前景的方法没有更多的研究,就是我们倾向于把一个模型训练习得的参数取值看做是该模型学到的知识,这使得我们很难看到,如何改变网络结构却又保持学到的知识。对知识的一个更抽象的视角是,它是从输入向量到输出向量的学习到的映射。
一个可能阻碍了对这种非常有前途的方法进行更多研究的一个概念性障碍是,我们倾向于用所学的参数值来识别一个经过训练的模型中的知识,这使得我们很难看到我们如何改变模型的形式而保持相同的知识。知识的一个更抽象的观点是,它是从输入向量到输出向量的学习映射。对于学习区分大量类的笨重模型,正常的训练目标是最大化正确答案的平均对数概率,但学习的副作用是训练模型为所有错误答案分配概率,即使这些概率很小,有些比其他的大得多。不正确答案的相对概率告诉我们很多关于这个繁琐的模型是如何被推广的。例如,一个宝马的形象,可能只有很小的机会被误认为垃圾车,但这种错误的可能性仍然比把它误认为胡萝卜高出许多倍。
一般认为,用于培训的目标函数应尽可能地反映用户的真实目标。尽管如此,当真正的目标是很好地推广到新的数据时,通常对模型进行训练以优化训练数据的性能。显然,训练模型使其能够很好地进行概括会更好,但这需要关于正确的泛化方法的信息,而这些信息通常不可用。然而,当我们从一个大模型提取知识到一个小模型时,我们可以训练小模型像大模型一样进行泛化。如果繁琐的模型能够很好地进行泛化,例如,它是不同模型的一个大集合的平均值,那么以同样的方式训练的小模型在测试数据上的表现通常要比在训练集合时使用的同一训练集上以正常方式训练的小模型要好得多。
将笨重模型的泛化能力转化为小模型的一个明显的方法是利用笨重模型产生的类概率作为训练小模型的“软目标”。对于这个转移阶段,我们可以使用相同的训练集或单独的“转移”集。当复杂模型是一个简单模型的大集合时,我们可以使用它们各自的预测分布的算术或几何平均值作为软目标。当软目标具有较高的熵时,每个训练实例提供的信息比硬目标大得多,训练样本之间的梯度方差也小得多,因此小模型通常可以用比原来繁琐的模型少得多的数据进行训练,并使用更高的学习率。
对于像MNIST这样的任务,笨重的模型几乎总是以非常高的置信度产生正确的答案,关于学习函数的大部分信息都存在于软目标中非常小的概率比率中。例如,一个版本的a 2可能被赋予10−6的概率是3,10−9是7的概率,而另一个版本的概率可能是相反的。这是一个有价值的信息,它定义了数据上丰富的相似性结构(例如,它说哪个2看起来像3,哪个看起来像7),但是在传输阶段,它对交叉熵成本函数的影响非常小,因为概率非常接近于零。Caruana和他的合作者通过使用logits(最终的softmax的输入)而不是softmax产生的概率作为学习小模型的目标,从而避免了这个问题,并使笨重模型产生的logit与小模型产生的logit之间的平方差最小化。我们更普遍的解决方案,称为“蒸馏”,是提高最终softmax的温度,直到繁琐的模型产生一组适当的软目标。然后我们在训练小模型时使用相同的高温来匹配这些软目标。稍后我们将说明,匹配笨重模型的logits实际上是蒸馏的一个特例。
用于训练小模型的传输集可以完全由未标记的数据组成[1],也可以使用原始训练集。我们发现,使用原始的训练集效果很好,特别是如果我们在目标函数中加入一个小项,鼓励小模型预测真实目标,并匹配笨重模型提供的软目标。通常,小模型不能精确匹配软目标,在正确答案的方向上出错是有帮助的。
2蒸馏
神经网络通常通过使用一个“softmax”输出层来产生类概率,该层通过比较zi和其他logit,将为每个类计算的logit转换为概率qi。
式中,T是通常设置为1的温度。使用较高的T值会在类上产生较软的概率分布。
在最简单的蒸馏形式中,通过在传递集上训练知识并对传递集中的每种情况使用软目标分布将知识转移到蒸馏模型中,该传递集是通过使用在其softmax中具有高温的笨重模型生成的。训练蒸馏模型时使用相同的高温,但训练后使用的温度为1。
当所有或部分传输集的正确标签已知时,通过训练蒸馏模型来生成正确的标签,这种方法可以得到显著改进。一种方法是使用正确的标签来修改软目标,但是我们发现更好的方法是简单地使用两个不同目标函数的加权平均值。第一个目标函数是与软目标的交叉熵,该交叉熵的计算使用与从繁琐模型生成软目标时使用的相同的高温。第二个目标函数是带有正确标签的交叉熵。这是使用与蒸馏模型的softmax中完全相同的logits计算的,但温度为1。我们发现,在第二个目标函数上使用一个条件较低的权重通常可以获得最佳结果。由于软目标产生的梯度大小为1/t2,因此在使用硬目标和软目标时,将其乘以t2是很重要的。这就保证了在实验meta参数时改变蒸馏温度时,硬靶和软靶的相对贡献基本保持不变。
2.1匹配逻辑是蒸馏的特例
转移集中的每一种情况都提供了一个交叉熵梯度dC/dzi,相对于蒸馏模型的每个logit zi。如果笨重模型的logits vi产生软目标概率pi,并且转移训练是在温度T下进行的,则该梯度由以下公式给出:
如果温度与logits的大小相比较高,我们可以近似:
因此,在高温极限下,蒸馏相当于最小化1/2(zi−vi)2,前提是每个分动器的logit分别为零。在较低的温度下,蒸馏对匹配比平均值负得多的逻辑函数的关注要少得多。这是潜在的优势,因为这些逻辑几乎完全不受用于训练笨重模型的成本函数的约束,因此它们可能非常嘈杂。另一方面,非常消极的逻辑可能传达有用的信息,关于知识获得的繁琐的模型。这些影响中哪一个占主导地位是一个经验问题。我们发现,当蒸馏模型太小而无法在繁琐的模型中捕获所有知识时,中间温度最有效,这强烈表明忽略大的负逻辑可能会有帮助。
3关于MNIST的初步实验
为了了解蒸馏的工作原理,我们在所有60000个训练案例中训练了一个包含两个隐藏层的大型神经网络,共有1200个校正的线性隐藏单元。如[5]中所述,该网络使用辍学和权重约束进行了严格的正则化。辍学可以看作是训练一个指数级的共享权重的模型集合的一种方法。此外,输入图像在任何方向上都会受到最多两个像素的抖动。该网络实现了67个测试错误,而一个较小的网络,有两个隐藏层,800个校正线性隐藏单元,没有正则化,达到146个错误。但如果仅通过增加在温度为20℃时对大网产生的软目标进行匹配的附加任务对较小的网络进行正则化,则可以获得74个测试误差。这说明软目标可以将大量的知识转移到提取的模型中,包括从翻译的训练数据中学习到的知识,即使转移集不包含任何翻译。
当蒸馏网在其两个隐藏层中各有300个或更多单元时,所有高于8的温度都会产生相当相似的结果。但当这一数值从根本上减少到每层30个单位时,2.5到4之间的温度比较高或较低的温度效果要好得多。然后_我们_试_着_从_转移_集中_省略_数字_3_的_所有_例子_ 。_因此,从蒸馏模型的角度来看,3是一个从未见过的神话数字。尽管如此,蒸馏模型只会产生206个测试错误,其中133个在测试集中的1010个三分之一上。大多数的错误是由于三个班的学习偏差太低而造成的。如果这个偏差增加3.5(这优化了测试集的整体性能),则蒸馏模型会产生109个错误,其中14个在3s上。因此,在正确的偏差下,尽管在训练过程中从未见过3,但蒸馏模型在测试3s中的正确率为98.6%。如果传递集只包含来自训练集的7和8,则蒸馏模型会产生47.3%的测试误差,但当7和8的偏差减小7.6以优化测试性能时,测试误差将降至13.2%。
4语音识别实验
在这一节中,我们将研究用于自动语音识别(ASR)的深层神经网络(DNN)声学模型的感知效果。我们证明,本文提出的蒸馏策略能达到预期的效果,即将一组模型提取成一个单一的模型,其效果明显优于直接从相同训练数据中学习的相同大小的模型。
目前最先进的ASR系统使用DNNs将波形特征的(短)时间上下文映射为隐马尔可夫模型(HMM)离散状态上的概率分布[4]。更具体地说,DNN在每一时刻在三个电话状态的簇上产生一个概率分布,然后解码器找到一条通过HMM状态的路径,这是使用高概率状态和生成语言模型下可能的转录之间的最佳折衷。
虽然有可能(也希望)以这样一种方式训练DNN,即通过在所有可能的路径上边缘化来考虑解码器(因此,语言模型),通常,训练DNN进行逐帧分类,方法是(局部地)最小化网络预测和标签之间的交叉熵,强制对齐每个观测的地面真实状态序列:
其中θ是声学模型P的参数,该模型将时间t,st的声学观测值映射为“正确”HMM状态ht的概率P(ht | st;θ′),该概率通过与正确的单词序列进行强制对齐来确定。模型采用分布随机梯度下降法训练。
我们使用的架构有8个隐藏层,每个层包含2560个校正的线性单元,最后一个softmax层有14000个标签(HMM目标ht)。以40个Mel尺度滤波器组系数的26帧为输入,每帧提前10ms,预测第21帧的HMM状态。参数总数约为85M,这是Android语音搜索使用的声学模型的一个稍微过时的版本,应该被认为是一个非常强大的基线。为了训练DNN声学模型,我们使用了大约2000小时的英语口语数据,产生了大约700M的训练实例。在我们的开发平台上,该系统的帧频准确率为58.9%,字错误率为10.9%。
4.1结果
我们训练了10个独立的模型来预测P(ht | st;θ),使用与基线完全相同的体系结构和训练过程。模型被随机初始化为不同的初始参数值,我们发现这在训练的模型中创造了足够的多样性,使得集合的平均预测显著优于单个模型。我们已经探索过通过改变每个模型所看到的数据集来增加模型的多样性,但是我们发现这并不会显著改变我们的结果,所以我们选择了更简单的方法。对于蒸馏,我们尝试了[1,2,5,10]的温度,并在硬靶的交叉熵上使用了0.5的相对权重,其中粗体字体表示表1中使用的最佳值。
表1显示,实际上,我们的蒸馏方法能够从训练集中提取更多有用的信息,而不是简单地使用硬标签来训练单个模型。通过使用10个模型的集合实现的帧分类精度的80%以上的改进被转移到蒸馏模型上,这与我们在MNIST上的初步实验中观察到的改进相似。由于目标函数的不匹配,集成对WER的最终目标(在23K字的测试集上)的改善较小,但同样,集成实现的WER改进被转移到蒸馏模型中。
我们最近意识到了通过匹配已经训练过的较大模型的类概率来学习小声学模型的相关工作[8]。然而,他们使用一个大的未标记数据集在1的温度下进行蒸馏,当他们都用硬标签训练时,他们的最佳蒸馏模型只会将小模型的错误率降低28%,而大模型和小模型的错误率之间的差距是小模型的28%。
5大数据集专家培训团
训练一个模型集合是利用并行计算的一个非常简单的方法,而一个集成在测试时需要太多计算的常见问题可以用蒸馏来解决。然而,对于集成还有另一个重要的反对意见:如果单个模型是大型的神经网络,并且数据集非常大,那么即使很容易并行化,训练时所需的计算量也过大。
在这一节中,我们给出了这样一个数据集的例子,并且我们展示了学习专家模型(每个模型都关注于类的不同可混淆子集)如何减少学习集成所需的总计算量。专注于进行细粒度区分的专家的主要问题是他们很容易过度拟合,我们描述了如何通过使用软目标来防止这种过度拟合。
5.1 JFT数据集
JFT是谷歌内部的一个数据集,有1亿张标签图片,有15000个标签。当我们做这项工作时,Google的JFT的基线模型是一个深卷积神经网络[7],它在大量核心上使用异步随机梯度下降训练了大约6个月。这个训练使用了两种类型的并行[2]。首先,在不同的核集合上运行神经网络的许多副本,并从训练集中处理不同的小批量。每个副本计算其当前小批量的平均渐变,并将此渐变发送到分片参数服务器,该服务器将返回参数的新值。这些新值反映了参数服务器自上次向副本发送参数以来收到的所有渐变。第二,每一个复制品通过在每个核心上放置不同的神经元子集而分布在多个核心上。集成训练是第三种类型的并行,它可以围绕其他两种类型进行,但前提是有更多的核心可用。等待数年来训练一个模型集合不是一个选择,所以我们需要一个更快的方法来改进基线模型。
5.2专业模型
当类的数量非常大时,笨重的模型应该是一个集合,它包含一个针对所有数据训练的泛型模型和许多“专家”模型,每个模型都是基于数据进行训练的,这些数据在非常容易混淆的类子集(如不同类型的蘑菇)中高度丰富。这类专家的softmax可以通过将它不关心的所有类合并到一个垃圾箱类中而变得更小。为了减少过度拟合和分担学习低层特征检测器的工作,每个专家模型都用广义模型的权重进行初始化。然后,通过训练专家,其中一半的例子来自其特殊子集,一半随机抽样自训练集的其余部分,对这些权重稍作修改。训练结束后,我们可以通过增加垃圾桶类的logit值乘以专家类被过度抽样的比例的对数来修正训练集的偏差。
5.3为专家分配课程
为了获得专家的对象类别分组,我们决定将重点放在我们整个网络经常混淆的类别上。尽管我们可以计算混淆矩阵并将其用作查找此类集群的一种方法,但我们选择了一种更简单的方法,即不需要真正的标签来构造集群。
特别是,我们将聚类算法应用于我们的广义模型预测的协方差矩阵,这样一组经常一起预测的类sm将被用作我们的一个专家模型m的目标。我们对协方差矩阵的列应用了在线版本的K-means算法,得到合理的聚类结果(见表2)。我们尝试了几种聚类算法,结果相似
5.4与专家一起进行推理
在调查专家模型被提炼出来后会发生什么之前,我们想看看包含专家的组合表现如何。除了专家模型,我们总是有一个通才模型,这样我们就可以处理没有专家的类,这样我们就可以决定使用哪些专家。给定一个输入图像x,我们分两个步骤对一个分类进行排序:
步骤1:对于每个测试用例,我们根据通才模型找到n个最有可能的类。将这组类称为k。在我们的实验中,我们使用n=1。
第二步:我们取所有的专家模型,m,其特殊的可混淆类子集sm与k有一个非空交集,并称之为专家活动集合Ak(注意,该集合可能是空的)。然后我们找到所有最小化类的全概率分布q:其中KL表示KL散度,pmpg表示专家模型或广义全模型的概率分布。分布pm是m的所有专业类加上一个垃圾箱类的分布,所以当计算其与全q分布的KL散度时,我们求出全q分布分配给m垃圾箱中所有类的所有概率。
5.5结果
从训练有素的全网训练开始,专家们的训练速度极快(对于JFT来说,几天而不是几周)。而且,所有的专家都是完全独立地接受培训的。表3显示了基线系统和基线系统与专家模型相结合的绝对测试精度。有61个专业模型,总体测试准确率相对提高了4.4%。我们还报告了条件测试的准确性,即只考虑属于专业类的示例,并将我们的预测限制在该类的子集上。
在我们的JFT专家实验中,我们培训了61名专家模型,每个模型有300个班(加上垃圾箱班)。我们常常有一个特殊的专家组,因为我们没有一个特殊的类的专家组。表4显示了测试集示例的数量、使用专家时在位置1处正确的示例数量的变化,以及JFT数据集top1精确度的相对百分比改进(按涵盖该类的专家数量细分)。当我们有更多的专家覆盖一个特定的班级时,准确性的提高会更大,这一趋势令我们深受鼓舞,因为培训独立的专家模型非常容易并行化。
6个软目标作为正则化器
关于使用软目标而不是硬目标,我们的一个主要主张是,在软目标中可以携带许多有用的信息,这些信息不可能用单个硬目标进行编码。在本节中,我们通过使用少得多的数据来拟合前面描述的基线语音模型的85M参数来证明这是一个非常大的影响。表5显示,只有3%的数据(大约20M的例子),用硬目标训练基线模型会导致严重的过度拟合(我们提前停止,因为在达到44.5%后,准确度急剧下降),而用软目标训练的同一模型能够恢复整个训练集中几乎所有的信息(大约2%害羞)。更值得注意的是,我们不必提前停止:具有软目标的系统简单地“收敛”到57%。这表明,软目标是一种非常有效的方法,可以将一个模型根据所有数据训练出的规律性传递给另一个模型。
6.1使用软靶防止专家过度拟合
我们在JFT数据集上的实验中使用的专家将他们所有的非专家类都分解成一个垃圾箱类。如果我们允许专家在所有课程中都有一个完整的softmax,那么可能有一个比使用早期停止更好的方法来防止他们过度适应。一名专家接受的是在其特殊课程中高度丰富的数据方面的培训。这意味着它的训练集的有效规模要小得多,而且它很容易过度适应其特殊的课程。这个问题不能通过使专家变得更小来解决,因为这样我们就失去了从所有非专家类建模中获得的非常有用的传递效果。
我们使用3%的语音数据进行的实验强烈地表明,如果一个专家以通才的权重初始化,那么除了用硬目标训练专家外,我们还可以用非特殊类的软目标训练它,从而使它保留几乎所有关于非特殊类的知识。软目标可以由通才提供。我们目前正在探索这种方法。
7与混合专家的关系
使用经过数据子集培训的专家的使用与专家的混合[6]有些相似,后者使用门控网络计算将每个示例分配给每个专家的概率。在专家学习处理分配给他们的示例的同时,门控网络也在学习根据专家对该示例的相对辨别性能来选择将每个示例分配给哪些专家。利用专家的分辨能力来确定学习的任务比简单地将输入向量聚类并为每个簇分配一个专家要好得多,但这使得训练难以并行化:首先,每个专家的加权训练集不断变化,依赖于所有其他专家;其次,选通网络需要比较不同专家在同一个例子中的表现,从而知道如何修正其指派概率。这些困难意味着混合专家很少用于他们可能最有益的领域:包含大量数据集、包含明显不同子集的任务
同时培养多个专家要容易得多。我们首先训练一个通才模型,然后使用混淆矩阵来定义训练专家的子集。一旦确定了这些子集,专家就可以完全独立地接受培训。在测试时,我们可以使用通用模型的预测来决定哪些专家是相关的,并且只需要运行这些专家。
8讨论
我们已经证明,提取对于将知识从一个集合或从一个大的高度正则化的模型转移到一个更小的、经过提炼的模型非常有效。On-MNIST蒸馏非常有效,即使用于训练蒸馏模型的传递集缺少一个或多个类的任何示例。对于Android语音搜索所使用的深度声学模型,我们已经表明,通过训练一组深层神经网络所实现的几乎所有改进都可以被提炼成一个大小相同的神经网络,这样就更容易部署了。
对于真正大的神经网络,即使训练一个完整的集合也是不可行的,但是我们已经证明,一个训练了很长时间的单一的非常大的网络的性能可以通过学习大量的专家网络得到显著提高,在一个高度易混淆的集群中,每个类都学会了区分类。我们还没有证明我们可以将专家的知识提炼回单一的大网络中。