原理

Bagging(bootstrap aggregating)是通过结合几个模型降低泛化误差的技术(Breiman, 1994)。主要想法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。这是机器学习中常规策略的一个例子,被称为模型平均(model averaging)。采用这种策略的技术被称为集成方法。

模型平均(Model averaging)奏效的原因是不同的模型通常不会在测试集上产生完全相同的误差。

假设我们有k个回归模型,假设每个模型在每个例子上的误差是\(\epsilon_i\),这个误差服从零均值方差为\(E[\epsilon_i^2]=v\)协方差为\(E[\epsilon_i \epsilon_j] =c\)的多维正态分布。通过所有集成模型的平均预测所得误差是\(\frac{1}{k} \sum_i \epsilon_i\)。集成预测期平方误差的期望是

\[\begin{align} E[(\frac{1}{k} \sum_i \epsilon_i)^2] &= \frac{1}{k^2}E[\sum_i (\epsilon_i^2 + \sum_{j \neq i} \epsilon_i \epsilon_j)] \\ &= \frac{1}{k} v + \frac{k-1}{k}c \\ \end{align}\]

在误差完全相关即c=v情况下,均方误差减少到v,所以模型平均没有任何帮助。在错误完全不相关即c=0的情况下,该集成平方误差的期望仅为\(\frac{1}{k}v\)。这意味着集成平方误差的期望会随着集成规模增大而线性减小。换言之,平均上,集成至少与它的任何成员表现得一样好,并且如果成员的误差是独立的,集成将显著地比其成员表现得更好。

不同的集成方法以不同的方式构建集成模型。例如,集成的每个成员可以使用不同的算法和目标函数训练成完全不同的模型。Bagging是一种允许重复多次使用同一种模型、训练算法和目标函数的方法。

具体来说,Bagging涉及构造k个不同的数据集。每个数据集从原始数据集中重复采样构成,和原始数据集具有相同数量的样例。这意味着,每个数据集以高概率缺少一些来自原始数据集的例子,还包括若干重复的例子(如果所得训练集与原始数据集大小相同,那所得数据集中大概有原始数据集的2/3的实例)。模型i在数据集i上训练。每个数据集所包含样本的差异导致了训练模型之间的差异。

神经网络能找到足够多的不同的解,意味着它们可以模型平均中受益(即所有模型都在同一数据集上训练)。神经网络中随机初始化的差异、小批量的随机选择、超参数的差异或不同输出的非确定性实现往往足以使得集成中的不同成员具有部分独立的误差。

模型平均是一个减少泛化误差的非常强大可靠的方法。在作为科学论文算法的基准时,它通常是不鼓励使用的,因为任何机器学习算法都可以从模型平均中大幅获益(以增加计算和存储为代价)。

机器学习比赛中的取胜算法通常是使用超过几十种模型平均的方法。最近一个突出的例子是Netflix Grand Prize(Koren,2009)。

不是所有构建集成的技术都是为了让集成模型比单一模型更加正则化。例如,一种被称为Boosting的技术(Freund and Schapire, 1996b,a)构建比单个模型容量更高的集成模型。通向集成逐步添加神经网络,Boosting已经被应用于构建神经网络的集成(Schwenk and Bengio, 1998)。通过逐渐增加神经网络的隐藏单元,Boosting也可以将单个神经网络解释为一个集成。