模型独立的学习方式
本文介绍集成学习、协同学习、自训练、多任务学习、迁移学习、终身学习、小样本学习、元学习等学习方式。这些学习方式不限于具体的模型,不管是前馈神经网络、RNN或其他模型。然而一种学习方式,往往会对具有一定特性的模型效果更佳,如集成学习对方差较大的模型组合时效果显著。
1. 集成学习
给定学习任务,假设输入 x \pmb{x} xxx 和 y \pmb{y} yyy 的真实关系是 y = h ( x ) \pmb{y} = h(\pmb{x}) yyy=h(xxx)。对于M个不同模型 f 1 ( x ) , ⋯ , f M ( x ) f_1(\pmb{x}) , \cdots ,f_M(\pmb{x}) f1(xxx),⋯,fM(xxx) ,每个模型的期望错误为:
其中 ϵ m ( x ) \epsilon_m(\pmb{x}) ϵm(xxx) 为模型m在样本x上的错误。
所有模型的平均错误:
集成学习(Ensemble Learning)是通过某种策略将多个模型集成在一起,通过群体决策来提高决策准确率。常见的集成策略有直接平均、加权平均。
直接平均即“投票”,基于投票的集成模型为:
F ( x ) F(\pmb{x}) F(xxx)的期望错误 R ( F ) R(F) R(F)在 1 M R ‾ ( f ) \frac{1}{M}\overline{R}(f) M1R(f)和 R ‾ ( f ) \overline{R}(f) R(f)之间,证明如下:
其中 E x [ ϵ m ( x ) ϵ n ( x ) ] E_x[\epsilon_m(\pmb{x})\epsilon_n(\pmb{x})] Ex[ϵm(xxx)ϵn(xxx)] 为两个不相同模型错误的相关性,如果每个模型的错误不相关,即 ∀ m ≠ n , E x [ ϵ m ( x ) ϵ n ( x ) ] = 0 \forall m\neq n, E_x[\epsilon_m(\pmb{x})\epsilon_n(\pmb{x})]=0 ∀m=n,Ex[ϵm(xxx)ϵn(xxx)]=0.如果每个模型的错误都是相同的,则 ∀ m ≠ n , ϵ m ( x ) = ϵ n ( x ) \forall m\neq n, \epsilon_m(\pmb{x})=\epsilon_n(\pmb{x}) ∀m=n,ϵm(xxx)=ϵn(xxx).并且 ∀ m , ϵ m ( x ) ≥ 0 \forall m ,\epsilon_m(\pmb{x}) \geq 0 ∀m,ϵm(xxx)≥0可以得到:
为了得到更好的集成效果,要求每个模型之间具备一定的差异性,并且随着模型数量的增多,其错误率也会下降,并趋近于0.
集成学习思想类似“三个臭皮匠赛过诸葛亮”,一个有效的集成需要各个基模型的差异尽量大,为增加模型间的差异性可采用Bagging和Boosting两类方法。
Bagging类方法 Bagging类方法随机构造训练样本、随机选择特征,进而提高每个基模型的独立性,代表性方法有Bagging、随机森林。
Bagging(Bootstrap Aggregating)通过不同模型的训练数据集的独立性来提高不同模型间的独立性。在原始训练集上进行有放回的随机采样,得到M个比较小的训练集并训练M个模型,然后通过投票的方法进行模型集成。
随机森林(Random Forest)在Bagging的基础上,引入了随机特征,进一步提高每个基模型间的独立性,在随机森林中,每个基模型都是一颗决策树。
Boosting 类方法 Boosting 类方法按照一定的顺序先后训练不同的基模型,每个基模型都针对前序模型的错误进行专门训练,根据前序模型的结果,来调整训练样本的权重,从而增加不同模型之间的差异性。只要基模型的准确率比随机猜测高,就可以用Boosting类方法来显著提高集成模型的准确率,Boosting类方法的代表性方法有AdaBoost
1.1 AdaBoost算法
Boosting类集成模型的目标是学习一个加性模型(Additive Model):
其中 f m ( x ) f_m(\pmb{x}) fm(xxx) 为弱分类器,或基分类器, α m \alpha_m αm为弱分类器的集成权重, F ( x ) F(x) F(x) 为强分类器。
Boosting类方法的关键是如何训练每个弱分类器和权重。应该尽量使得每个分类器之间的差异变大,一有效的算法是采用迭代的方法学习每个弱分类器,即按照一定顺序训练弱分类器。假设已经有m个弱分类器,训练第m+1个弱分类器时,增加已有弱分类器分错样本的权重,使得第m+1个分类器更关注已有分类器分错的样本。称为AdaBoost(Adaptive Boosting)算法.
AdaBoost算法是一种迭代式的训练算法,通过改变数据分布来提高弱分类器的差异,每一轮训练中,增加分错样本的权重,减少对样本的权重,从而得到一个新的数据分布。
以二分类为例,弱分类器 f m ( x ) ∈ { + 1 , − 1 } f_m(x)\in\{+1, -1\} fm(x)∈{
+1,−1},AdaBoost的训练过程如下,最初赋予每个样本相同权重,每一轮迭代中,根据当前样本的样本权重重新训练一个新的弱分类器,然后根据这个弱分类器的错误率来计算其集成权重,并调整权重。
AdaBoost算法的统计学解释 AdaBoost算法可看做是一种分步的加性模型,其损失函数定义为:
其中 y , f m ( x ) ∈ { + 1 , − 1 } y, f_m(\pmb{x})\in\{+1,-1\} y,fm(xxx)∈{
+1,−1}
假设经过 m-1 次迭代,得到:
则第m次迭代的目标就是找一个 α m \alpha_m αm 和 f m ( x ) f_m(\pmb{x}) fm(xxx)使得下面的损失函数最小:
令 w m ( n ) = e x p ( − y ( n ) F m − 1 ( x ( n ) ) ) w_m^{(n)}=exp(-y^{(n)}F_{m-1}(x^{(n)})) wm(n)=exp(−y(n)Fm−1(x(n))) ,则损失函数改写为:
因 y , f m ( x ) ∈ { + 1 , − 1 } , I ( x ) y, f_m(\pmb{x})\in\{+1,-1\} ,I(x) y,fm(xxx)∈{
+1,−1},I(x)为指示函数,则:
将损失函数在 − α m y ( n ) f m ( x ( n ) ) = 0 -\alpha_my^{(n)}f_m(\pmb{x}^{(n)})=0 −αmy(n)f