机器学习模型蒸馏技术及其优化方法

释放双眼,带上耳机,听听看~!
本文介绍了一种通过将多个模型的知识压缩到单个模型中的机器学习模型蒸馏技术,以及优化方法,通过在MNIST数据集中取得的成果验证了这种方法的有效性。文章还探讨了如何提高模型的泛化能力,适用于对模型性能进行优化的读者。

摘要

一个适用于提高大多数机器学习算法性能的方法是在相同的数据上训练不同的模型,然后平均这些模型集合的预测结果。然而,使用模型集合预测非常麻烦,计算成本可能会很高, 不适合部署给大量的用户(尤其是在模型日益庞大的今天)。目前可以通过将多个模型的知识压缩到单个模型中,这么做的好处是相对于一个模型集合,单个模型更容易部署。作者通过了不同的压缩技术,进一步的开发了这种方法。作者在MNIST数据集中取得了不错的成果,并且验证了可以通过将模型集合中的知识提炼为单个模型来显著改进商用的声学模型。同时,作者还引入了一种新型模型集合,这个集合由一个或多个完整模型和很多可以区分完整模型混淆的细粒度类别的专业模型组成。这些专业模型可以并行训练,效率很高。

介绍

译者注:接下来是一段有趣比喻

蝴蝶具有幼虫形态和成虫形态,幼虫时不断吃东西,成虫则负责交配繁衍。在大规模的机器学习中,我们通常在训练阶段和部署阶段使用相似的模型,尽管他们的要求不同:训练不要求实时性,并且涉及大量的计算,而部署却对延迟和计算资源有更严格的要求。

如果可以像蝴蝶一样,训练时训练更庞大的模型,这种庞大的模型可能是单独训练的模型的集合,也可能是使用非常强大的正则化器(例如dropout)训练的非常大的单个模型。一旦庞大的模型被训练好了(也就是幼虫摄入了足够的营养),我们就可以通过蒸馏,使用不同的训练方式,将知识从繁琐的模型转移到更适合部署的小模型中。

这个思路面临的一个问题是目前我们倾向于通过学习到的参数值识别模型中的知识,因此我们很难判断如何改变模型的形式的同时仍保留相应的知识。我们可以更抽象的理解“知识”这个概念——从输入向量到输出向量的映射。

对于一个庞大的分类模型,通常我们的训练目标是最大化正确答案的概率,但是学习的副作用是模型会同样把概率分配给其他所有不正确的答案。这些错误答案的概率差异可以帮助我们理解模型如何泛化信息,比如宝马的图像被认为很小概率是垃圾车,但是宝马图像是一根胡萝卜的概率更加的小。

众所周知,训练的目标函数应该尽可能的贴合用户的真实目标,尽管模型的训练通常是为了优化在训练数据上的表现,但真正的目标却是让模型能够很好地泛化到新数据。如果能够训练模型使其具有良好的泛化能力,那显然是更好的。但要做到这一点,需要有关正确泛化方式的信息,而这种信息通常是不存在的。当我们从大型模型中提炼知识并将其迁移到小型模型中时,我们可以训练小型模型以与大型模型相同的方式进行泛化。如果大型模型本身泛化能力很好,那从大型模型训练出来的小型模型的效果也会比直接训练小模型的效果好很多。

将大型模型的泛化能力转移到小型模型的一种明显方法是使用大型模型产生的类别概率作为训练小型模型的“软目标”。当软目标的熵值很高时,相对于硬目标,每个训练样本会提供更多的信息,训练样本之间具有更小的梯度方差。

像MNIST这种分类任务,复杂模型表现很好,大部分信息分布在小概率的软目标中。然而softmax会让我们将均匀分布的数值变得差异很大,原本接近的概率经过softmax后,也很难分辨出来是否接近,就很难被学习到。因此我们引入温度系数

机器学习模型蒸馏技术及其优化方法

使用更高的温度系数,就可以让输出结果更加的平滑,在这里我们先提高温度让模型可以产出合适的软目标,然后在训练小模型匹配软目标时使用相同的温度。

训练小模型的训练集可以包括未打标签的数据,或者原始训练集,最好是原始训练集。

蒸馏

这是引入温度后的softmax公式(T越大越平滑,):

qi=exp(zi/T)∑jexp(zj/T)q_i = frac{exp(z_i / T)}{sum_j exp(z_j / T)}

最简单的蒸馏方法是在训练时使用温度T,训练目标是接近复杂模型,训练好后,预测时使用温度1,输出正确的分类结果。同时如果训练集本身具有标签,那么我们也可以根据训练集的预测结果做优化。

不过现在有一个更好的方法:对这两个目标进行权重平均,既尽可能的接近复杂模型,也尽可能的预测出训练集的正确分类。

在训练模型集合时的实践

我们可以利用并行计算训练模型集合,而且模型集合带来的部署困难的问题已经被蒸馏解决了,但是如果模型本身都很大,模型集合在训练时的计算量还是很大的。

本节主要讨论如果通过学习专家模型(每个模型专注于易混淆子集)减少总计算量。专家模型的一个问题是容易过拟合,本节也会讲解如何通过使用软目标防止过拟合。

专家模型

我们将一个复杂模型集合分为两部分,一个是训练所有数据的通用模型,另一部分是很多个专家模型。为了防止过拟合,每个专家模型都使用通用模型的参数做初始化,然后通过训练专家模型来微调这些权重,其中一部分训练集来自易混淆集合,另一部分则随机采样。

如何寻找易混淆的子类

虽然可以使用聚类,但是更简单的方法是对通用模型的预测结果计算协方差,根据协方差将经常一起预测的类作为一个专用模型要预测的类别。

总结

  1. 蒸馏法对于复杂大模型转移至小模型的场景非常有效
  2. 对于超级庞大的神经网络,我们可以通过使用大量的专家模型来降低神经网络的总训练量的同时,保证模型可以区分易混淆的网络。

展望:
目前还没能完成将专家模型提炼回单一的模型中。

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

使用Transformers库进行图分类

2023-12-8 10:59:14

AI教程

OpenAI薪酬结构揭秘:软件工程师年薪92.5万美元,股权激励或达655万美元

2023-12-8 11:00:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索