集成(Ensemble,又称模型平均)是一种「古老」而强大的方法。只需要对同一个训练数据集上,几个独立训练的神经网络的输出,简单地求平均,便可以获得比原有模型更高的性能。甚至只要这些模型初始化条件不同,即使拥有相同的架构,集成方法依然能够将性能显著提升。
但是,为什么只是简单的「集成」,便能提升性能呢?目前已有的理论解释大多只能适用于以下几种情况:
(1)boosting:模型之间的组合系数是训练出来的,而不能简单地取平均;
(2)Bootstrap aggregation:每个模型的训练数据集都不相同;
(3)每个模型的类型和体系架构都不相同;
(4)随机特征或决策树的集合。
但正如上面提到,在(1)模型系数只是简单的求平均;(2)训练数据集完全相同;(3)每个模型架构完全相同下,集成的方法都能够做到性能提升。
来自微软研究院机器学习与优化组的高级研究员朱泽园博士,以及卡内基梅隆大学机器学习系助理教授李远志针对这一现象,在最新发表的论文《在深度学习中理解集成,知识蒸馏和自蒸馏》中,提出了一个理论问题:当我们简单地对几个独立训练的神经网络求平均值时,「集成」是如何改善深度学习的测试性能的?
尤其是当所有神经网络具有相同的体系结构,使用相同的标准训练算法(即具有相同学习率和样本正则化的随机梯度下降),在相同数据集上进行训练时,即使所有单个模型都已经进行了100%训练准确性?随后,将集合的这种优越性能「蒸馏」到相同架构的单个神经网络,为何能够保持性能基本不变?
两位作者分别从理论和实验的角度给出了分析结果:原因在于数据集中「多视图」(Multi-view)数据的存在。
01 深度学习的三大谜团
谜团1:集成
观察结果显示,使用不同随机种子的学习网络(尽管具有非常相似的测试性能)相关联的函数非常不同。在这种情况下,使用“集成”的技术,仅需要获取这些经过独立训练的网络输出的未加权平均值,就可以在许多深度学习应用中极大地提高测试时间的性能。这意味着各个函数一定是不同的。但是,为什么集成可以大幅提升性能呢?如果直接训练(1+⋯+10)/ 10,为什么性能提升就消失了?
谜团2:知识蒸馏
虽然集成可以极大地提升测试时间性能,但在推理时间(即测试时间)方面它变慢了10倍:我们需要计算10个神经网络的输出,而不是1个。当我们在低能耗的移动环境中部署此类模型时,这是一个严重的问题。为了解决这个问题,研究者提出了一种叫做知识蒸馏的开创性技术。知识蒸馏指的是训练另一个单独的模型来匹配集成的输出。
谜团3:自蒸馏
注意,知识蒸馏至少在直观上是有意义的:teacher model有84.8%的测试准确率,那么student model可以达到83.8%。但接下来这个现象就让人难以理解了,使用自蒸馏技术,也即老师的学生就是它自己:通过对具有相同架构的单个模型进行知识蒸馏,竟然可以提高测试准确率。
02 神经网络集成与特征映射集成
大多数现有的集成理论只适用于单个模型之间存在根本性差异的情况(例如,决策树支持不同变量的子集),或者在不同的数据集上训练的情况(例如自举)。但这些理论显然不能解释前面提到的现象。上面提到,集成的模型,其训练的框架是相同的,训练的数据也是相同的——唯一的区别只是训练期间的随机性。
或许,与深度学习中的集成最为相近的理论,应该是「随机特征映射集成」(ensemble in random feature mappings)。
这表现在两个方面:一方面,将多个随机特征的线性模型进行组合,可以提升测试时的性能,这很显然,因为它增加了特征的数量;另一方面,在特定的参数区域中,神经网络的权值可以非常接近它们的初始化(称为神经正切核区域,或NTK区域),结果网络只在规定的特征映射上学习一个线性函数,这些特征映射完全由随机初始化决定。
将这两者结合起来,可以推测深度学习集成与随机特征映射集成,在原理上是一致的。
03 集成与减少单个模型的方差
除了随机特征的集成外,还有人推测认为,由于神经网络的高度复杂性,每个单独的模型可能学习到一个函数f(x)=f+ξ,ξ是某种噪声,这种噪声取决于训练过程中使用的随机性。经典的统计学认为,如果所有的ξ是大致独立的,那么求取他们的平均值能够大大减少噪音量。因此,“集成能够减少方差”真的是集成能提高性能的原因吗?
04 多视图数据:深度学习中集成的一种新方法
在我们最新的工作中,我们从数据中找到了集成之所以能够在深度学习中有效的原因所在。通常,在一个数据集中(以视觉数据集为例),一个对象通常会有多个视角(multi-view)的数据。以「car」为例,一个汽车的数据集中,通常会有从各个角度拍摄的车辆的照片,通常我们仅需要通过车头灯、车轮或车窗等其中的一个特征,便可以对汽车进行分类了;即使在图片中有些特征因为拍摄角度的原因而缺失了,也没有太大的关系。
05 知识蒸馏:强制单个模型学习多个视图
基于上述视角,我们可以再来分析知识蒸馏是如何工作的。在现实生活的场景中,一些汽车图像可能看起来“更像一只猫”:例如,一些汽车图像的前灯可能看起来像猫眼。当这种情况发生时,集成模型可以提供有意义的隐藏知识,例如“汽车图像X有10%像一只猫。”
06 自蒸馏:集成与知识蒸馏的隐性结合
自蒸馏是知识蒸馏的一种特殊情况。我们假设使用模型2从一个随机的初始化开始,来匹配另外一个模型1的输出。在这个过程中2一方面会学习1已经学习到特征子集,另一方面其能够学习到的特征子集也会受其随机初始化的影响。这个过程,可以看做是:首先对两个单独的模型1,2进行集成学习,然后蒸馏成2。最终的2可能不一定涵盖数据集中所有可学习的视图,但它至少有学习所有视图的潜力。这就是自蒸馏模型测试时性能提升的来源!