AdaBoost算法部分理论推导

发布于:2022-12-18 ⋅ 阅读:(360) ⋅ 点赞:(0)

一、引言

        本人在看周志华老师编写的《机器学习》一书的AdaBoost推导部分的内容时,总感觉内容有点跳跃,思路不太流畅,并且书中的一些操作也不是很能理解(例如8.13的泰勒展开),故在参考了书上内容的基础上自己尝试着推导了一遍,梳理了一下算法的思路,希望能对大家有所帮助。

二、理论推导

        Adaboost算法最终得到的一个模型是一个“加性模型”,即多个基学习器的线性组合:

H(\boldsymbol{x})=\sum_{t=1}^{T}\alpha _{t}h_{t}(\boldsymbol{x})

那如何评价学习得到的模型的性能呢?当然是设计一个评价函数,在书中,这个评价函数就是指数损失函数:

\mathcal{L}_{exp}(H|\mathcal{D})=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H(\boldsymbol{x})}]

 书中证明了,当该损失函数取得最小值时,此时的sign(H(\boldsymbol{x}))刚好就是一个最小化分类错误率的贝叶斯最优分类器,它在样本\boldsymbol{x}属于正例的概率大于其属于反例的概率时输出1,在属于反例的概率大于其属于正例的概率时输出-1,符合书上式(7.6)的定义。那么接下来我们的任务就是如何最小化该指数损失函数,也即如何确定每一个h_{t}(\boldsymbol{x})及其相应的系数\alpha _{t}

        首先可以确定的是,第一个基分类器h_{1}(\boldsymbol{x})是通过直接将基学习算法用于初始训练数据分布而得到的,那如果假设AdaBoost算法就在第一步停止了,即只有一个基学习器,则此时的指数损失函数

\mathcal{L}_{exp}(H_{1}|\mathcal{D})=\mathcal{L}_{exp}(\alpha _{1}h_{1}|\mathcal{D})=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})\alpha _{1}h_{1}(\boldsymbol{x})}]

注意在计算模型的指数损失时,都是在初始的训练数据分布\mathcal{D}上进行的。根据书中式(8.9)的推导,可以进一步得出:

\mathcal{L}_{exp}(H_{1}|\mathcal{D})=e^{-\alpha _{1}}(1-\epsilon _{1})+e^{\alpha _{1}}\epsilon _{1}

其中\epsilon _{1}是基分类器h_{1}(\boldsymbol{x})在初始数据分布\mathcal{D}上的分类错误率,由基学习算法的性能和初始训练数据的好坏决定,我们所能控制的是系数\alpha _{1},因此我们应该将\alpha _{1}取为能使指数损失最小的那个值,由基本不等式或求导我们不难得到,\mathcal{L}_{exp}(H_{1}|\mathcal{D})取得最小值时,

\alpha _{1}=\frac{1}{2}ln(\frac{1-\epsilon _{1}}{\epsilon _{1}})

该最小值为2\sqrt{\epsilon _{1}(1-\epsilon _{1})}

现在我们假设某一时刻,我们已知了H_{t-1}以及其在初始训练数据分布\mathcal{D}上的指数损失:

\mathcal{L}_{exp}(H_{t-1}|\mathcal{D})=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}]

由于该指数损失为一个常数,因此我们不妨设其为A。那么我们接下来的任务是获得最优的基分类器h_{t}(\boldsymbol{x})及其对应的系数\alpha _{t},使得H_{t}在初始训练数据分布\mathcal{D}上的指数损失最小,即:

\mathcal{L}_{exp}(H_{t}|\mathcal{D})=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t}(\boldsymbol{x})}]=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})(H_{t-1}(\boldsymbol{x})+\alpha _{t}h_{t}(\boldsymbol{x}))}]=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}\times e^{-f(\boldsymbol{x})\alpha _{t}h_{t}(\boldsymbol{x})}]

而其中

e^{-f(\boldsymbol{x})\alpha _{t}h_{t}(\boldsymbol{x})}=\left\{\begin{matrix} e^{-\alpha _{t}},f(\boldsymbol{x})=h_{t}(\boldsymbol{x})\\e^{\alpha _{t}},f(\boldsymbol{x})=-h_{t}(\boldsymbol{x}) \end{matrix}\right.

可以等价于下面这种表达形式:

e^{-f(\boldsymbol{x})\alpha _{t}h_{t}(\boldsymbol{x})}=\frac{e^{\alpha _{t}}+e^{-\alpha _{t}}}{2}-\frac{e^{\alpha _{t}}-e^{-\alpha _{t}}}{2}f(\boldsymbol{x})h_{t}(\boldsymbol{x})

 将上式代入到\mathcal{L}_{exp}(H_{t}|\mathcal{D})的表达式中,可得:

\mathcal{L}_{exp}(H_{t}|\mathcal{D})=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}\times (\frac{e^{\alpha _{t}}+e^{-\alpha _{t}}}{2}-\frac{e^{\alpha _{t}}-e^{-\alpha _{t}}}{2}f(\boldsymbol{x})h_{t}(\boldsymbol{x}))]=\frac{e^{\alpha _{t}}+e^{-\alpha _{t}}}{2}\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}]-\frac{e^{\alpha _{t}}-e^{-\alpha _{t}}}{2}\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}f(\boldsymbol{x})h_{t}(\boldsymbol{x})]=\frac{e^{\alpha _{t}}+e^{-\alpha _{t}}}{2}A-\frac{e^{\alpha _{t}}-e^{-\alpha _{t}}}{2}\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}f(\boldsymbol{x})h_{t}(\boldsymbol{x})]

其中常数A是上文中定义的H_{t-1}的指数损失。而根据数学期望的定义(数理统计知识),若令\mathcal{D}_{t}表示一个新的分布:

\mathcal{D}_{t}(\boldsymbol{x})=\frac{\mathcal{D}(\boldsymbol{x})e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}]}=\frac{\mathcal{D}(\boldsymbol{x})e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}}{A}

那么就有:

\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}f(\boldsymbol{x})h_{t}(\boldsymbol{x})]=A\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}_{t}}[f(\boldsymbol{x})h_{t}(\boldsymbol{x})]

因此\mathcal{L}_{exp}(H_{t}|\mathcal{D})的表达式可以进一步简化为:

\mathcal{L}_{exp}(H_{t}|\mathcal{D})=\frac{e^{\alpha _{t}}+e^{-\alpha _{t}}}{2}A-\frac{e^{\alpha _{t}}-e^{-\alpha _{t}}}{2}A\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}_{t}}[f(\boldsymbol{x})h_{t}(\boldsymbol{x})]

 而其中

\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}_{t}}[f(\boldsymbol{x})h_{t}(\boldsymbol{x})]=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}_{t}}[1-2\mathbb{I} (f(\boldsymbol{x})\neq h_{t}(\boldsymbol{x}))]=1-2\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}_{t}}[\mathbb{I}(f(\boldsymbol{x})\neq h_{t}(\boldsymbol{x}))]=1-2\epsilon _{t}

式中\mathbb{I}(\cdot )称为示性函数,当括号内的条件成立时结果为1,不成立时结果为0;\epsilon _{t}表示在基分类器h_{t}\mathcal{D}_{t}上的分类错误率。可以看出,当\epsilon _{t}越小,即h_{t}\mathcal{D}_{t}上的分类错误率越小时,指数损失\mathcal{L}_{exp}(H_{t}|\mathcal{D})越小,那么该如何训练基分类器h_{t},使得\epsilon _{t}尽可能的小呢?既然\epsilon _{t}是在数据分布\mathcal{D}_{t}上的分类错误率,那么我们就干脆在数据分布\mathcal{D}_{t}上去用基学习算法训练出一个基分类器,而不是在初始数据分布\mathcal{D}上或者是其他的数据分布上去训练基分类器。

        训练得到基学习器h_{t}以及分类错误率\epsilon _{t}之后,我们下一步就是求最优的系数\alpha _{t}。经过上述一系列的化简,我们最终得到的H_{t}的指数损失表达式为:

\mathcal{L}_{exp}(H_{t}|\mathcal{D})=\frac{e^{\alpha _{t}}+e^{-\alpha _{t}}}{2}A-\frac{e^{\alpha _{t}}-e^{-\alpha _{t}}}{2}A(1-2\epsilon _{t})=A[\epsilon _{t}e^{\alpha _{t}}+\frac{1-\epsilon _{t}}{e^{\alpha _{t}}}]

根据基本不等式,

A[\epsilon _{t}e^{\alpha _{t}}+\frac{1-\epsilon _{t}}{e^{\alpha _{t}}}]\geqslant 2A\sqrt{\epsilon _{t}(1-\epsilon _{t})}

当且仅当 \epsilon _{t}e^{\alpha _{t}}=\frac{1-\epsilon _{t}}{e^{\alpha _{t}}},即\alpha _{t}=\frac{1}{2}ln(\frac{1-\epsilon _{t}}{\epsilon _{t}})时,等号成立,此时指数损失取得最小值。

        接着我们来分析一下从H_{t-1}H_{t}这一步,指数损失值的变化情况。前面我们说过A表示的是H_{t-1}在初始训练数据分布上的分类错误率,而根据上面的推导,我们得出了当h_{t}\epsilon _{t}都是最优时,H_{t}的指数损失为2A\sqrt{\epsilon _{t}(1-\epsilon _{t})},由于我们只接受分类错误率小于0.5的基分类器,因此\epsilon _{t}的取值范围为(0,0.5),而2\sqrt{\epsilon _{t}(1-\epsilon _{t})}在当\epsilon _{t}在该范围内取值时是小于1的,而且\epsilon _{t}越小,该结果越小,这说明了当我们在分类器H_{t-1}的基础之上增加项\alpha _{t}h_{t}(\boldsymbol{x})变为H_{t}之后,能够减小指数损失的值,而每一步具体减小的程度,和基分类器h_{t}\mathcal{D}_{t}上的分类错误率大小有关。理论上来说,我们可以根据上述步骤不断地增加新的基分类器,从而不断地减小指数损失直至其逼近于0,然而实际上可能无法实现。

        现在我们手里有\alpha _{1}h_{1}(\boldsymbol{x})(即H_{1}),又有了从H_{t-1}到 H_{t}的递推公式,那么自然而然就能够依次获得H_{2}H_{3}H_{4}...一直到我们所指定的目标数目H_{T}。这便是AdaBoost算法的流程。创作不易,如果以上的内容对你理解AdaBoost算法有所帮助,请为本篇文章点一个赞,如果文中有不正确或解释不清楚的地方,也欢迎在评论区指出。

 

 

 

 

 

 

 

 

 

        ​​​​​​


网站公告

今日签到

点亮在社区的每一天
去签到