您的位置:首页 > 大数据 > 人工智能

人工智能里的数学修炼 | AdaBoost的数学原理: 分布更新推导

2018-03-18 21:01 417 查看
Boosting 是一族可以将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器达到事先指定的值T,最终将这T个基学习器进行加权结合。

Boosting 族算法最著名的代表是AdaBoost

A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting

我之前写过两篇关于集成学习的文章,其中一篇是专门介绍了AdaBoost的Python实现

机器学习教程 之 Boosting 与 bagging:集成学习框架

机器学习教程 之 集成学习算法: 深入刨析AdaBoost

这次开这篇博客是作为上一篇博客的补充,会具体的描述AdaBoost框架里公式的理论推导

AdaBoost集成算法框架

这里我们先给出AdaBoost的算法框架,再给出框架里公式的具体推导过程

输入:

训练集 D={(x1,y1),(x2,y2),...,(xm
20000
,ym)}D={(x1,y1),(x2,y2),...,(xm,ym)};

基学习器 φφ;

训练轮数 TT;

过程:

1. D1(x)=1/mD1(x)=1/m ##初始化权值分布

2. for t=1,2,...,Tt=1,2,...,T do

3. ht=φ(D,Dt)ht=φ(D,Dt) ##基于分布和数据集训练出一个基学习器

4. εt=Px∼Dt(ht(x)≠f(x))εt=Px∼Dt(ht(x)≠f(x)) ##估计出这个基学习器的误差

5. if εt>0.5εt>0.5 then break

6. at=1/2ln((1−εt)/εt)at=1/2ln((1−εt)/εt); ##确定分类器的权重

7. Dt+1(x)=Dt(x))Zt×{exp(−at),ifht(x)=f(x)exp(at),ifht(x)≠f(x)Dt+1(x)=Dt(x))Zt×{exp(−at),ifht(x)=f(x)exp(at),ifht(x)≠f(x) ##更新分布

8. end for

输出:

H(x)=sign(∑Tt=1atht(x))H(x)=sign(∑t=1Tatht(x))

AdaBoost的数学推导

AdaBoost的数学推导主要是推导出分类器权重和分布的更新公式,也就是上述框架中的第6步和第7步。AdaBoost算法有很多种推导方式,比较容易理解的是基于“加性模型“(additive model),即基学习器的组合

H(x)=∑Tt=1atht(x)H(x)=∑t=1Tatht(x)

来最小化指数损失函数

ιexp(H|D)=Ex∼D[e−f(x)H(x)]ιexp(H|D)=Ex∼D[e−f(x)H(x)]

这里说明一下AdaBoost之所以使用指数损失函数而不使用01损失函数,是由于指数损失函数具有更好的数学性质,如连续可微等。现在我们来证明指数损失函数可以作为01损失函数的一个公正的替代函数

指数损失函数是01损失函数的替代函数

若 H(x)H(x) 能令指数损失函数最小化,则考虑其对于H(x)H(x) 的偏导

∂ιexp(H|D)∂H(x)=−e−H(x)P(f(x)=1|x)+eH(x)P(f(x)=−1|x)∂ιexp(H|D)∂H(x)=−e−H(x)P(f(x)=1|x)+eH(x)P(f(x)=−1|x)

令上式为0可以有

H(x)=12lnP(f(x)=1|x)P(f(x)=−1|x)H(x)=12lnP(f(x)=1|x)P(f(x)=−1|x)

因此,我们有输出

sign(H(x))=sign(12lnP(f(x)=1|x)P(f(x)=−1|x))sign(H(x))=sign(12lnP(f(x)=1|x)P(f(x)=−1|x))

={1,P(f(x)=1|x)>P(f(x)=−1|x)−1,P(f(x)=1|x)<P(f(x)=−1|x)={1,P(f(x)=1|x)>P(f(x)=−1|x)−1,P(f(x)=1|x)<P(f(x)=−1|x)

这意味着 sign(H(x))sign(H(x)) 达到了贝叶斯最优错误率。换而言之,若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务原本01损失函数的一致替代函数

分类器权重 atat 的更新公式

在AdaBoost算法中,第一个基分类器 h1h1 是通过直接将基学习算法用于初始数据分布而得;此后迭代地生成 htht 和 atat,当基分类器 htht 基于分布 DtDt 产生后,该基分类器的权重 atat 应当使得 athtatht 最小化指数损失函数

ιexp(atht|Dt)=Ex∼Dt[e−f(x)atht(x)]ιexp(atht|Dt)=Ex∼Dt[e−f(x)atht(x)]

=e−atPx∼Dt(f(x)=ht(x))+eatPx∼Dt(f(x)≠ht(x))=e−atPx∼Dt(f(x)=ht(x))+eatPx∼Dt(f(x)≠ht(x))

=e−at(1−εt)+eatεt=e−at(1−εt)+eatεt

其中 εt=Px∼Dt(ht(x)≠f(x))εt=Px∼Dt(ht(x)≠f(x)),考虑指数损失函数的导数有

∂ιexp(atht|Dt)∂αt=−e−at(1−εt)+eatεt∂ιexp(atht|Dt)∂αt=−e−at(1−εt)+eatεt

令其为0,有

at=1/2ln((1−εt)/εt)at=1/2ln((1−εt)/εt)

这就是上述框架中第六行中的权重更新公式

AdaBoost的分布更新公式

AdaBoost算法在获得 Ht−1Ht−1 之后样本的分布将进行调整,使下一轮基学习器 htht 能纠正 Ht−1Ht−1 的一些错误。理想的 htht 能纠正 Ht−1Ht−1 的全部错误,即最小化

ιexp(Ht−1+ht|D)=Ex∼D[e−f(x)Ht−1(x)+ht(x)]ιexp(Ht−1+ht|D)=Ex∼D[e−f(x)Ht−1(x)+ht(x)]

= Ex∼D[e−f(x)Ht−1(x)e−f(x)ht(x)]Ex∼D[e−f(x)Ht−1(x)e−f(x)ht(x)]

注意到 f2(x)=h2t(x)=1f2(x)=ht2(x)=1, 上式可将 e−f(x)ht(x)e−f(x)ht(x) 泰勒展开为

ιexp(Ht−1+ht|D)≃Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+f2(x)h2t(x)2)]ιexp(Ht−1+ht|D)≃Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+f2(x)ht2(x)2)]

=Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+12)]=Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+12)]

于是,理想的学习器

ht(x)=argminhιexp(Ht−1+h|D)ht(x)=argminhιexp(Ht−1+h|D)

=argmaxhEx∼D[e−f(x)Ht−1(x)f(x)h(x)]=argmaxhEx∼D[e−f(x)Ht−1(x)f(x)h(x)]

=argmaxhEx∼D[e−f(x)Ht−1(x)Ex∼D[e−f(x)Ht−1]f(x)h(x)]=argmaxhEx∼D[e−f(x)Ht−1(x)Ex∼D[e−f(x)Ht−1]f(x)h(x)]

这里的Ex∼D[e−f(x)Ht−1]Ex∼D[e−f(x)Ht−1] 表示一个常数。令 DtDt 表示一个分布

Dt(x)=D(x)Ex∼D[e−f(x)Ht−1]e−f(x)h(x)Dt(x)=D(x)Ex∼D[e−f(x)Ht−1]e−f(x)h(x)

根据数学期望的定义,这里等价于令

ht(x)=argmaxhEx∼D[e−f(x)Ht−1(x)Ex∼D[e−f(x)Ht−1]e−f(x)h(x)]ht(x)=argmaxhEx∼D[e−f(x)Ht−1(x)Ex∼D[e−f(x)Ht−1]e−f(x)h(x)]

=argmaxhEx∼Dt[f(x)h(x)]=argmaxhEx∼Dt[f(x)h(x)]

由于 f(x),h(x)ϵ{−1,1}f(x),h(x)ϵ{−1,1} , 有

f(x)h(x)=1−2||(f(x)!=h(x))f(x)h(x)=1−2||(f(x)!=h(x))

则理想的基学习器

ht(x)=argminhEx∼Dt[||(f(x)≠h(x))]ht(x)=argminhEx∼Dt[||(f(x)≠h(x))]

由此可见,理想的 htht 在分布 DtDt 下最小化分类误差。因此,弱分类器将基于分布 DtDt 来训练,且针对 DtDt的分类误差应当小于0.5 。这在一定程度上类似残差逼近的思想。考虑到DtDt 和Dt+1Dt+1 的关系有

Dt(x)=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht(x)Dt(x)=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht(x)

=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht−1(x)e−f(x)atht(x)=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht−1(x)e−f(x)atht(x)

=Dt(x)e−f(x)atht(x)Ex∼D[e−f(x)Ht−1]Ex∼D[e−f(x)Ht]=Dt(x)e−f(x)atht(x)Ex∼D[e−f(x)Ht−1]Ex∼D[e−f(x)Ht]

这就是Adaboost框架中第七行样本分布的更新公式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息