SNAPSHOT ENSEMBLES: TRAIN 1, GET M FOR FREE
多个分类器集成可以获得超过单个分类器的效果,但集成分类器就要求有多个分类器,在训练速度和测试速度方面不占优势。本文提出的方法可以提高集成学习的训练速度,通过一次训练,获得多个分类器,解决了集成学习训练速度慢的问题。
深度学习训练过程中,只有经历足够长的epoch后,test loss才会随着lr的降低而降低,这说明loss空间中存在的局部最小值点是稳定的,这些局部最小值点的模型从不同方面描述了特征空间,可以用于集成学习。本文提出的方法主要有以下两点
周期性学习率策略
和常规学习率策略不同,本文把整个训练过程平均划分成M个阶段,每个阶段内学习率lr都从一个固定初始值开始,逐步降低。每个阶段结束后都保留一个snapshot,训练结束后一共获得M个snapshot,从后面抽取m个组成集成分类器。如此在一次训练中,获得M个模型,训练速度和常规训练方法一样。
利用前一阶段的结果初始化当前阶段模型
对于简单的模型而言,这一个步骤没那么重要,没有这一步也可以得到不错的结果。对于复杂的模型,这一步十分重要,因为复杂的模型需要较多的epoch才可以收敛到稳定的局部极小值点,除非增加每个阶段的epoch(同时也增大了整个训练时间),否则很难得到较好的结果
采用本文方法获得的最后一个阶段的模型的性能是低于常规训练方法得到模型的,但是两个snapshot集成后test loss就降低到baseline之下
一般随着集成模型数量的提升,test loss会逐步降低(不一定成立,只是一个大的趋势),但集成多个模型会降低预测速度
和标准集成学习(采用不同初始化参数,使用常规学习率更新策略,完整训练出多个模型做集成)对比,本文的方法效果是没有标准集成学习好的,当然本文中的方法的训练速度要快很多