本文主要参考Ensemble Methods for Deep Learning Neural Networks一文。算法
1. 前言
- 神经网络具备很高的方差,不易复现出结果,并且模型的结果对初始化参数异常敏感。
- 使用集成模型能够有效下降神经网络的高方差(variance)。
2. 使用集成模型下降方差
- 训练多个模型,并将预测结果结合到一块儿,可以下降方差。
- 多模型集成能起到做用的前提是,每一个模型有本身的特色,每一个模型预测出的偏差是不一样的。
- 简单的集成方式就是将预测结果取平均,该方法起做用的缘由是,不一样的模型一般不会在测试集上产生相同的错误。
- 结合多个模型使得最终的预测结果添加了一个误差(bias),而这个误差又会与神经网络的方差(variance)相抵消,使得模型的预测对训练数据的细节、训练方案的选择和单次训练运行的偶然性不太敏感。
- 集成模型的结果会比任意单模型的结果都要好。
3. 如何集成神经网络模型
- The oldest and still most commonly used ensembling approach for neural networks is called a “committee of networks.”
- 一般选择多模型的方式:多个相同配置的神经网络 + 相同的训练数据集 + 不一样的参数随机初始化
- 集成的模型数量一般比较小,缘由以下:
- 考虑计算复杂度。
- 当模型数目达到必定程度,随着数目的增长,集成模型获得的性能回报变小。
- 集成模型通常考虑以下三种构造方式:
- Trainning Data: 不一样单模型使用不一样的训练数据
- Ensemble Models: 选择不一样的单模型
- Combinations: 选择不一样的组合方式
3.1 Varying Training Data
- 一个比较简单的方法是k折交叉验证,可以获得全体训练集的k个子训练集,用每一个子集单独去训练模型。最后将这k个模型作集成。
- 注意,每一个子训练集的大小是\((k-1)/k\)倍的全体训练集,而不是\(1/k\)倍的全体训练集。
- 另外一种方法是用重采样(resampling)的方式构建新训练集。
- 重采样过程意味着每一个训练数据集的组成是不一样的,可能存在重复的例子,从而容许在数据集上训练的模型对样本的密度具备稍微不一样的指望,并具备不一样的泛化偏差(generalization error)。
- 这种方法也叫作bootstrap aggregation,简称为bagging,被设计用于未剪枝且具备高方差低偏置(high variance and low bias)的决策树。
- 与上一个方法等价的采样方式为欠采样,即采样后的训练集不出现重复,且比全体数据集要少。
- 注意,欠采样获得的新数据未通过正规化(regularization),这样可使得模型训练的更快(过拟合的更快)。
- Other approaches may involve selecting a random subspace of the input space to allocate to each model, such as a subset of the hyper-volume in the input space or a subset of input features.
3.2 Varying Models
- 对相同配置的模型,使用不一样的参数随机初始化训练。
- 这种方式在必定程度上能够下降方差,可是可能不会显著地改善泛化偏差。
- 因为模型都学习了相似的映射函数,所以模型产生的错误可能仍然相关性过高。
- 这方式实际上只是受学习算法的影响,即不一样随机参数可能抵达不一样的局部最优势,甚至某些参数初始化可使得模型恰巧抵达全局最优势。
- 另外一个方法是变化模型的配置参数,如不一样维度的隐状态向量,不一样的神经网络层数,不一样的学习率,不一样的学习策略,不一样的正则化方式等的。
- 这些模型可以学习更加异构的映射函数集合,而且在预测和预测偏差方面具备较低的相关性,可以互相弥补不足。
- Differences in random initialization, random selection of minibatches, differences in hyperparameters, or different outcomes of non-deterministic implementations of neural networks are often enough to cause different members of the ensemble to make partially independent errors.
- 在单个模型可能须要较长训练时间的时候,另外一个备选方案在训练过程当中按期保存最佳模型(called snapshot or checkpoint models),即不一样的checkpoints点,而后对保存的模型进行集成。
- 可以达到同一数据上训练多个模型的效果,尽管是在单个训练时间生成的。
- 由于训练时间长,因此不适用于前面两种反复训练模型的方式。
- 这种集成方式还有一个变体,是选定几个epoch区间,将这些区间的全部模型作集成。(Ensembles from such contiguous sequences of models are referred to as horizontal ensembles.)
- 由于是在选取同一训练期间的不一样检查点模型,因此也能够在模型的训练过程当中,根据结果的反馈,不断改变优化方式,如学习率decay等策略,使得后续检查点可以获得更加有效的模型。
3.3 Varying Combinations
- 最简单的组合方式是选择全部的模型,将预测结果区平均。
- 稍微改进的方法是加权取平均,权重由验证集提供。这种方法有时也称为model blending。
- 设计一个新的模型,可以自动化学习到“加权取平均”过程当中,每一个单模型所占的权重大小。
- 这种学习新模型的方式,通常被称为model stacking, 或 stacked generalization。
- model stacking是在第二层特征空间中进行学习的。
- 采用更加复杂的stacking方式,例如boosting(一次添加一个模型以纠正先前模型的错误)。
- 另外一个结合方式是,先将具备相同结构的多个模型的权重取平均,以获得该模型结构的“最好成绩模型”。以后再对不一样模型结构的“最好成绩模型”进行集成。
4. 总结
- 以上内容,是我阅读这篇文章获得的总结,感兴趣的读者能够继续阅读原文,原文覆盖了更多的知识点,并提供了许多参考依据,具备权威性。
- 原文章将深度学习的集成方式总结为以下几点(本人总结了其中大部分方法):
- Varying Training Data
- k-fold Cross-Validation Ensemble
- Bootstrap Aggregation (bagging) Ensemble
- Random Training Subset Ensemble
- Varying Models
- Multiple Training Run Ensemble
- Hyperparameter Tuning Ensemble
- Snapshot Ensemble
- Horizontal Epochs Ensemble
- Vertical Representational Ensemble
- Varying Combinations
- Model Averaging Ensemble
- Weighted Average Ensemble
- Stacked Generalization (stacking) Ensemble
- Boosting Ensemble
- Model Weight Averaging Ensemble