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

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

Boosting 族算法最著名的代表是AdaBoost
A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting

我之前写过两篇关于集成学习的文章,其中一篇是专门介绍了AdaBoost的Python实现
机器学习教程 之 Boosting 与 bagging:集成学习框架
机器学习教程 之 集成学习算法: 深入刨析AdaBoost
以及这篇关于GBDT和XGBoost的博客
机器学习教程 之 梯度提升方法:GBDT及其扩展模型XGBoost
机器学习教程 之 梯度提升方法:GBDT处理分类问题
机器学习教程 之 加性模型:GBDT退化为AdaBoost原理
还有一篇关于bagging随机森林的博文
机器学习教程 之 随机森林: 算法及其特征选择原理
这次开这篇博客是作为上一篇博客的补充,会具体的描述AdaBoost框架里公式的理论推导

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


输入:
训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D = \left \{(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m})\right \} ;
基学习器 $ \varphi$;
训练轮数 T T

过程:

  1. D 1 ( x ) = 1 / m D_{1}(x) = 1/m ##初始化权值分布
  2. for $ t = 1,2,…,T$ do
  3. h t = φ ( D , D t ) h_{t} = \varphi(D,D_{t}) ##基于分布和数据集训练出一个基学习器
  4. ε t = P x D t ( h t ( x ) f ( x ) ) \varepsilon_{t} = P_{x\sim D_{t}} (h_{t}(\mathbf{x})\neq f(\mathbf{x})) ##估计出这个基学习器的误差
  5. if ε t > 0.5 \varepsilon_{t} > 0.5 then break
  6. $ a_{t} = 1/2ln((1-\varepsilon_{t})/\varepsilon_{t})$; ##确定分类器的权重
  7. D t + 1 ( x ) = D t ( x ) ) Z t × { e x p ( a t ) , i f h t ( x ) = f ( x ) e x p ( a t ) , i f h t ( x ) f ( x ) D_{t+1}(\mathbf{x}) = \frac{D_{t}(\mathbf{x}))}{Z_{t}}\times\left\{\begin{matrix} exp(-a_{t}),if h_{t}(\mathbf{x})=f(\mathbf{x})\\ exp(a_{t}),if h_{t}(\mathbf{x})\neq f(\mathbf{x})\end{matrix}\right. ##更新分布
  8. end for

输出:
H ( x ) = s i g n ( t = 1 T a t h t ( x ) ) H(\mathbf{x}) = sign(\sum_{t=1}^{T}a_{t}h_{t}(\mathbf{x}))


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

H ( x ) = t = 1 T a t h t ( x ) H(\mathbf{x}) = \sum_{t=1}^{T}a_{t}h_{t}(\mathbf{x})

来最小化指数损失函数

ι e x p ( H D ) = E x D [ e f ( x ) H ( x ) ] \iota _{exp}(H|D)=E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H(\mathbf{x})}]

扫描二维码关注公众号,回复: 10972327 查看本文章

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

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

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

ι e x p ( H D ) H ( x ) = e H ( x ) P ( f ( x ) = 1 x ) + e H ( x ) P ( f ( x ) = 1 x ) \frac{\partial \iota _{exp}(H|D)}{\partial H(\mathbf{x})} = -e^{-H(\mathbf{x})}P(f(\mathbf{x})=1|\mathbf{x})+e^{H(\mathbf{x})}P(f(\mathbf{x})=-1|\mathbf{x})

令上式为0可以有

H ( x ) = 1 2 l n P ( f ( x ) = 1 x ) P ( f ( x ) = 1 x ) H(\mathbf{x}) = \frac{1}{2}ln\frac{P(f(\mathbf{x})=1|\mathbf{x})}{P(f(\mathbf{x})=-1|\mathbf{x})}

因此,我们有输出

s i g n ( H ( x ) ) = s i g n ( 1 2 l n P ( f ( x ) = 1 x ) P ( f ( x ) = 1 x ) ) sign(H(\mathbf{x})) = sign(\frac{1}{2}ln\frac{P(f(\mathbf{x})=1|\mathbf{x})}{P(f(\mathbf{x})=-1|\mathbf{x})})

= { 1 , P ( f ( x ) = 1 x ) > P ( f ( x ) = 1 x ) 1 , P ( f ( x ) = 1 x ) < P ( f ( x ) = 1 x ) = \left\{\begin{matrix}1 ,P(f(x)=1|x)>P(f(x)=-1|x)\\ -1 ,P(f(x)=1|x)<P(f(x)=-1|x)\end{matrix}\right.

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

分类器权重 a t a_{t} 的更新公式

在AdaBoost算法中,第一个基分类器 h 1 h_{1} 是通过直接将基学习算法用于初始数据分布而得;此后迭代地生成 h t h_{t} a t a_{t} ,当基分类器 h t h_{t} 基于分布 D t D_{t} 产生后,该基分类器的权重 a t a_{t} 应当使得 a t h t a_{t}h_{t} 最小化指数损失函数

ι e x p ( a t h t D t ) = E x D t [ e f ( x ) a t h t ( x ) ] \iota _{exp}(a_{t}h_{t}|D_{t}) = E_{\mathbf{x}\sim D_{t}}[e^{-f(\mathbf{x})a_{t}h_{t}(\mathbf{x})}]
$= e^{-a_{t}} P_{x \sim D_{t}}(f(x)=h_{t}(x))+e^{a_{t}} P_{x \sim D_{t}}(f(x) \neq h_{t}(x)) $
$= e{-a_{t}}(1-\varepsilon_{t})+e{a_{t}}\varepsilon_{t} $

其中 $\varepsilon_{t} = P_{\mathbf{x} \sim D_{t}}(h_{t}(\mathbf{x}) \neq f(\mathbf{x})) $,考虑指数损失函数的导数有

ι e x p ( a t h t D t ) α t = e a t ( 1 ε t ) + e a t ε t \frac{\partial \iota _{exp}(a_{t}h_{t}|D_{t})}{\partial \alpha_{t}} = -e^{-a_{t}}(1-\varepsilon_{t})+e^{a_{t}}\varepsilon_{t}

令其为0,有

$ a_{t} = 1/2ln((1-\varepsilon_{t})/\varepsilon_{t})$

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

AdaBoost的分布更新公式

AdaBoost算法在获得 H t 1 H_{t-1} 之后样本的分布将进行调整,使下一轮基学习器 h t h_{t} 能纠正 H t 1 H_{t-1} 的一些错误。理想的 h t h_{t} 能纠正 H t 1 H_{t-1} 的全部错误,即最小化

$\iota {exp}(H{t-1}+h_{t}|D) = E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})+h_{t}(x)}] $

= E x D [ e f ( x ) H t 1 ( x ) e f ( x ) h t ( x ) ] E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}e^{-f(x)h_{t}(x)}]

注意到 f 2 ( x ) = h t 2 ( x ) = 1 f^{2}(\mathbf{x}) = h^{2}_{t}(\mathbf{x})=1 , 上式可将 e f ( x ) h t ( x ) e^{-f(x)h_{t}(x)} 泰勒展开为

ι e x p ( H t 1 + h t D ) E x D [ e f ( x ) H t 1 ( x ) ( 1 f ( x ) h t ( x ) + f 2 ( x ) h t 2 ( x ) 2 ) ] \iota _{exp}(H_{t-1}+h_{t}|D) \simeq E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}(1-f(x)h_{t}(x)+\frac{f^{2}(\mathbf{x})h^{2}_{t}(\mathbf{x})}{2})]

$ = E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}(1-f(x)h_{t}(x)+\frac{1}{2})] $

于是,理想的学习器

h t ( x ) = a r g m i n h ι e x p ( H t 1 + h D ) h_{t}(x) = argmin_{h}\iota _{exp}(H_{t-1}+h|D)
= a r g m a x h E x D [ e f ( x ) H t 1 ( x ) f ( x ) h ( x ) ] = argmax_{h} E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}f(x)h(x)]
= a r g m a x h E x D [ e f ( x ) H t 1 ( x ) E x D [ e f ( x ) H t 1 ] f ( x ) h ( x ) ] = argmax_{h} E_{\mathbf{x}\sim D}[\frac{e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}}{ E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}}]}f(x)h(x)]

这里的 E x D [ e f ( x ) H t 1 ] E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}}] 表示一个常数。令 D t D_{t} 表示一个分布

D t ( x ) = D ( x ) E x D [ e f ( x ) H t 1 ] e f ( x ) h ( x ) D_{t}(x) = \frac{D(x)}{ E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}}]}e^{-f(x)h(x)}

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

h t ( x ) = a r g m a x h E x D [ e f ( x ) H t 1 ( x ) E x D [ e f ( x ) H t 1 ] e f ( x ) h ( x ) ] h_{t}(x)= argmax_{h} E_{\mathbf{x}\sim D}[\frac{e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}}{ E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}}]}e^{-f(x)h(x)}]
= a r g m a x h E x D t [ f ( x ) h ( x ) ] = argmax_{h}E_{x \sim D_{t}}[f(x)h(x)]

由于 f ( x ) , h ( x ) ϵ { 1 , 1 } f(x),h(x) \epsilon \left \{ -1,1 \right \} , 有

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

则理想的基学习器

h t ( x ) = a r g m i n h E x D t [ ( f ( x ) h ( x ) ) ] h_{t}(x) = argmin_{h}E_{x\sim D_{t}}[||(f(x) \neq h(x))]

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

D t ( x ) = D ( x ) E x D [ e f ( x ) H t ] e f ( x ) H t ( x ) D_{t}(x) = \frac{D(x)}{E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t}}]}e^{-f(x)H_{t}(x)}
$ = \frac{D(x)}{E_{\mathbf{x}\sim D}[e{-f(\mathbf{x})H_{t}}]}e{-f(x)H_{t-1}(x)}e^{-f(x)a_{t}h_{t}(x)}$
$ = D_{t}(x)e^{-f(x)a_{t}h_{t}(x)}\frac{E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}}]}{E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t}}]}$
这就是Adaboost框架中第七行样本分布的更新公式。

发布了74 篇原创文章 · 获赞 269 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Liangjun_Feng/article/details/79603705