回顾
篇(一)中详细介绍了AdaBoost的算法步骤,主要结论就是下面的算法图所述,方便回顾摆在这里。
![](https://imgkr.cn-bj.ufileos.com/13cdc64c-1b9b-4bfe-919a-9b67027ad26a.png)
上图中的 D m , i D_{m,i} Dm,i即是上节中的 ω m , i \omega_{m,i} ωm,i,这点需要注意一下,下面关于AdaBoost性质的推导中,我将沿用 D m , i D_{m,i} Dm,i这个我认为较为直观的符号。
训练误差上界
AdaBoost的训练误差可以写为 1 N ∑ i = 1 N I { G ( x i ) ≠ y i } \frac{1}{N}\sum_{i=1}^{N}I\{G(x_i)\neq y_i\} N1∑i=1NI{G(xi)=yi}的形式,下面给出直接给出其上界(证明见书)
Theorem 1
1
N
∑
i
=
1
N
I
{
G
(
x
i
)
≠
y
i
}
⩽
1
N
∑
i
=
1
N
e
x
p
(
−
y
i
f
(
x
i
)
)
=
∏
m
=
1
M
Z
m
\frac{1}{N}\sum_{i=1}^{N}I\{G(x_i)\neq y_i\}\leqslant \frac{1}{N}\sum_{i=1}^Nexp(-y_if(x_i)) = \prod_{m=1}^MZ_m
N1i=1∑NI{G(xi)=yi}⩽N1i=1∑Nexp(−yif(xi))=m=1∏MZm
Theorem 2
∏
m
=
1
M
Z
m
=
∏
m
=
1
M
2
e
m
(
1
−
e
m
)
=
令
γ
m
=
1
2
−
e
m
∏
m
=
1
M
1
−
4
γ
m
2
⩽
e
x
p
(
−
2
∑
m
=
1
M
γ
m
2
)
\prod_{m=1}^MZ_m = \prod_{m=1}^M2\sqrt {e_m(1-e_m)}\overset{令\gamma_m = \frac{1}{2}-e_m}{=}\prod_{m=1}^M\sqrt{1-4\gamma_m^2}\leqslant exp(-2\sum_{m=1}^M\gamma_m^2)
m=1∏MZm=m=1∏M2em(1−em)=令γm=21−emm=1∏M1−4γm2⩽exp(−2m=1∑Mγm2)
关于Theorem 2中最后一式的证明,在Taylor展开时不能忽略余项的影响,用Lagrange余项展开至二阶就有
∏
m
=
1
M
1
−
4
γ
m
2
=
∏
m
=
1
M
1
−
2
γ
m
2
−
2
γ
m
4
(
1
−
ξ
1
)
3
2
⩽
∏
m
=
1
M
1
−
2
γ
m
2
+
2
γ
m
4
e
ξ
2
=
e
x
p
(
−
2
∑
m
=
1
M
γ
m
2
)
\begin{aligned} \prod_{m=1}^M\sqrt{1-4\gamma_m^2} &= \prod_{m=1}^M{1-2\gamma_m^2-\frac{2\gamma_m^4}{(1-\xi_1)^\frac{3}{2}}} \\ &\leqslant\prod_{m=1}^M{1-2\gamma_m^2+2\gamma_m^4e^{\xi_2}} \\ &=exp(-2\sum_{m=1}^M\gamma_m^2) \end{aligned}
m=1∏M1−4γm2=m=1∏M1−2γm2−(1−ξ1)232γm4⩽m=1∏M1−2γm2+2γm4eξ2=exp(−2m=1∑Mγm2)
Corollary
若存在
γ
\gamma
γ,满足
γ
⩽
γ
m
(
m
=
1
,
2
,
…
,
M
)
\gamma \leqslant \gamma_m(m = 1,2,\ldots,M)
γ⩽γm(m=1,2,…,M),则有
1
N
∑
i
=
1
N
I
{
G
(
x
i
)
≠
y
i
}
⩽
e
x
p
(
−
2
M
γ
2
)
\frac{1}{N}\sum_{i=1}^NI\{G(x_i)\neq y_i\} \leqslant exp(-2M\gamma^2)
N1i=1∑NI{G(xi)=yi}⩽exp(−2Mγ2)
这个推论是Theorem 1与Theorem 2的直接推论,揭示了AdaBoost训练出的强分类器的误差率与弱分类器误差率之间的关系,若弱分类器带权分类错误率 e m e_m em的上界 e ↓ e\downarrow e↓,则由 γ = min m ( 1 2 − e m ) = 1 2 − e \gamma = \min_m(\frac{1}{2} - e_m)=\frac{1}{2}-e γ=minm(21−em)=21−e可知 γ ↑ \gamma\uparrow γ↑,造成强分类器的训练误差上界 e x p ( − 2 M γ 2 ) ↓ exp(-2M\gamma^2)\downarrow exp(−2Mγ2)↓,这意味着若我们通过一些方式(比如调整基分类器超参数或更换基分类器的学习算法)能达到使 e ↓ e\downarrow e↓的效果,则强分类错误率的上界会随着 e e e的减小以指数速率下降,这是AdaBoost的一个重要且良好的性质。
AdaBoost加法模型与前向分步算法角度
这一部分的主要目的是从AdaBoost入手去理解了前向分步算法的步骤,以便于理解后面GBDT的算法步骤。
加法模型(additive model)与前向分步算法(forward stagewise algorithm)
对加法模型
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
f(x) = \sum_{m=1}^M\beta_mb(x;\gamma_m)
f(x)=m=1∑Mβmb(x;γm)
b
(
x
,
γ
m
)
是
基
模
型
,
γ
m
是
基
模
型
参
数
,
β
m
是
基
模
型
的
系
数
b(x,\gamma_m)是基模型,\gamma_m是基模型参数,\beta_m是基模型的系数
b(x,γm)是基模型,γm是基模型参数,βm是基模型的系数
所构建的损失函数
min
β
m
,
γ
m
∑
i
=
1
N
L
(
y
i
,
∑
m
=
1
M
β
m
b
(
x
i
;
γ
m
)
)
\min_{\beta_m,\gamma_m}\sum_{i=1}^NL(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m))
βm,γmmini=1∑NL(yi,m=1∑Mβmb(xi;γm))
是一个很复杂的优化问题,前向分步算法将其拆分为一个 M M M步的简单优化问题,每次只学习一个基模型与其系数,与向前逐步回归的思想有些类似。
我将其制作成伪代码的形式贴在这里。
说完加法模型和前向分步算法后,下面着重解析AdaBoost前向分步算法的形式
AdaBoost前向分步算法
书上以如下定理的形式给出
Theorem 3 \quad AdaBoost是由基本分类器组成的加法模型,损失函数是指数损失函数,且在每一步进行权值归一化的前向分步算法的特例。
proof.
首先,AdaBoost的形式为
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
f(x) = \sum_{m=1}^M\alpha_mG_m(x)
f(x)=m=1∑MαmGm(x)
他显然是一个由基分类器组成的加法模型。
当损失函数设置为指数损失函数时
L
(
y
,
f
(
x
)
)
=
e
x
p
[
−
y
f
(
x
)
]
L(y,f(x)) = exp[-yf(x)]
L(y,f(x))=exp[−yf(x)]
由上面前向分步算法的流程,第
m
m
m步的优化目标如下
(
α
m
,
G
m
(
x
)
)
=
a
r
g
min
α
,
G
∑
i
=
1
N
e
x
p
[
−
y
i
(
f
m
−
1
(
x
i
)
+
α
G
(
x
i
)
)
]
(\alpha_m,G_m(x)) = arg\min_{\alpha,G}\sum_{i=1}^Nexp[-y_i(f_{m-1}(x_i)+\alpha G(x_i))]
(αm,Gm(x))=argα,Gmini=1∑Nexp[−yi(fm−1(xi)+αG(xi))]
这里我们注意到第
m
m
m步优化时,
f
m
−
1
f_{m-1}
fm−1是已知的,则有
(
α
m
,
G
m
(
x
)
)
=
a
r
g
min
α
,
G
∑
i
=
1
N
e
x
p
[
−
y
i
(
f
m
−
1
(
x
i
)
+
α
G
(
x
i
)
)
]
=
a
r
g
min
α
,
G
∑
i
=
1
N
e
x
p
[
−
y
i
(
f
m
−
1
(
x
i
)
]
e
x
p
[
−
y
i
α
G
(
x
i
)
]
记
ω
‾
m
i
=
e
x
p
[
−
y
i
(
f
m
−
1
(
x
i
)
]
,
有
=
a
r
g
min
α
,
G
∑
i
=
1
N
ω
‾
m
i
e
x
p
[
−
y
i
α
G
(
x
i
)
]
=
a
r
g
min
α
,
G
∑
T
ω
‾
m
i
e
−
α
+
∑
F
ω
‾
m
i
e
α
\begin{aligned} (\alpha_m,G_m(x)) &= arg\min_{\alpha,G}\sum_{i=1}^Nexp[-y_i(f_{m-1}(x_i)+\alpha G(x_i))] \\ &=arg\min_{\alpha,G}\sum_{i=1}^Nexp[-y_i(f_{m-1}(x_i)]exp[-y_i\alpha G(x_i)] \\ 记\overline{\omega}_{mi}=exp[-y_i(f_{m-1}(x_i)],有 \\ &=arg\min_{\alpha,G}\sum_{i=1}^N\overline{\omega}_{mi}exp[-y_i\alpha G(x_i)] \\ &=arg\min_{\alpha,G}\sum_{T}\overline{\omega}_{mi}e^{-\alpha} + \sum_{F}\overline{\omega}_{mi}e^{\alpha} \\ \end{aligned}
(αm,Gm(x))记ωmi=exp[−yi(fm−1(xi)],有=argα,Gmini=1∑Nexp[−yi(fm−1(xi)+αG(xi))]=argα,Gmini=1∑Nexp[−yi(fm−1(xi)]exp[−yiαG(xi)]=argα,Gmini=1∑Nωmiexp[−yiαG(xi)]=argα,GminT∑ωmie−α+F∑ωmieα
其中
T
,
F
T,F
T,F分别代表
G
(
x
)
G(x)
G(x)分类正确与错误的那些样本,分类正确的样本具有特征
G
(
x
i
)
=
y
i
G(x_i) = y_i
G(xi)=yi,分类错误的样本具有特征
G
(
x
i
)
≠
y
i
G(x_i) \neq y_i
G(xi)=yi,而在
α
>
0
\alpha > 0
α>0的限制下,有
e
α
>
e
−
α
e^{\alpha} >e^{-\alpha}
eα>e−α;再加上
ω
‾
m
i
=
e
x
p
[
−
y
i
f
m
−
1
(
x
i
)
]
>
0
\overline{\omega}_{mi} = exp[-y_if_{m-1}(x_i)] > 0
ωmi=exp[−yifm−1(xi)]>0这一条信息,使上式达到最小的
G
m
∗
G^*_m
Gm∗应使分类错误的样本权值和最小,故
G
m
∗
G^*_m
Gm∗形式为
G
m
∗
=
a
r
g
min
G
∑
i
=
1
N
ω
‾
m
i
I
{
y
i
≠
G
(
x
i
)
}
G^*_m =arg\min_G\sum_{i=1}^N\overline{\omega}_{mi}I\{y_i \neq G(x_i)\}
Gm∗=argGmini=1∑NωmiI{yi=G(xi)}
下求最优的
α
\alpha
α,承接上式
∑
i
=
1
N
e
x
p
[
−
y
i
α
G
(
x
i
)
]
=
∑
T
ω
‾
m
i
e
−
α
+
∑
F
ω
‾
m
i
e
α
=
∑
T
ω
‾
m
i
e
−
α
+
∑
F
ω
‾
m
i
e
−
α
−
∑
F
ω
‾
m
i
e
−
α
+
∑
F
ω
‾
m
i
e
α
=
e
−
α
∑
i
=
1
N
ω
‾
m
i
+
(
e
α
−
e
−
α
)
∑
F
ω
‾
m
i
\begin{aligned} \sum_{i=1}^Nexp[-y_i\alpha G(x_i)] &=\sum_{T}\overline{\omega}_{mi}e^{-\alpha} + \sum_{F}\overline{\omega}_{mi}e^{\alpha} \\ &=\sum_{T}\overline{\omega}_{mi}e^{-\alpha} +\sum_{F}\overline{\omega}_{mi}e^{-\alpha} - \sum_{F}\overline{\omega}_{mi}e^{-\alpha} + \sum_{F}\overline{\omega}_{mi}e^{\alpha} \\ &= e^{-\alpha}\sum_{i=1}^N\overline{\omega}_{mi} + (e^{\alpha}-e^{-\alpha})\sum_F\overline{\omega}_{mi} \end{aligned}
i=1∑Nexp[−yiαG(xi)]=T∑ωmie−α+F∑ωmieα=T∑ωmie−α+F∑ωmie−α−F∑ωmie−α+F∑ωmieα=e−αi=1∑Nωmi+(eα−e−α)F∑ωmi
记上式为
L
L
L,并对
α
\alpha
α求导,令导数为0,
∂
L
∂
α
=
−
e
−
α
∑
i
=
1
N
ω
‾
m
i
+
(
e
α
+
e
−
α
)
∑
F
ω
‾
m
i
=
−
e
−
α
∑
T
ω
‾
m
i
+
e
α
∑
F
ω
‾
m
i
=
0
\begin{aligned} \frac{\partial{L}}{\partial{\alpha}} &= -e^{-\alpha}\sum_{i=1}^N\overline{\omega}_{mi} + (e^{\alpha}+e^{-\alpha})\sum_F\overline{\omega}_{mi} \\ &=-e^{-\alpha}\sum_{T}\overline{\omega}_{mi}+e^{\alpha}\sum_F\overline{\omega}_{mi} = 0 \\ \end{aligned}
∂α∂L=−e−αi=1∑Nωmi+(eα+e−α)F∑ωmi=−e−αT∑ωmi+eαF∑ωmi=0
最终得如下
α
∗
\alpha^*
α∗
α
∗
=
1
2
l
o
g
∑
T
ω
‾
m
i
∑
F
ω
‾
m
i
=
1
2
l
o
g
∑
T
ω
‾
m
i
/
∑
i
=
1
N
ω
‾
m
i
∑
F
ω
‾
m
i
/
∑
i
=
1
N
ω
‾
m
i
\begin{aligned} \alpha^* &= \frac{1}{2}log\frac{\sum_T\overline{\omega}_{mi}}{\sum_F\overline{\omega}_{mi}} \\ &=\frac{1}{2}log\frac{\sum_T\overline{\omega}_{mi}/\sum_{i=1}^N\overline{\omega}_{mi}}{\sum_F\overline{\omega}_{mi}/\sum_{i=1}^N\overline{\omega}_{mi}} \end{aligned}
α∗=21log∑Fωmi∑Tωmi=21log∑Fωmi/∑i=1Nωmi∑Tωmi/∑i=1Nωmi
记
e
m
=
∑
F
ω
‾
m
i
∑
i
=
1
N
ω
‾
m
i
e_m = \frac{\sum_F\overline{\omega}_{mi}}{\sum_{i=1}^N\overline{\omega}_{mi}}
em=∑i=1Nωmi∑Fωmi,则
∑
T
ω
‾
m
i
∑
i
=
1
N
ω
‾
m
i
=
1
−
e
m
\frac{\sum_T\overline{\omega}_{mi}}{\sum_{i=1}^N\overline{\omega}_{mi}} = 1-e_m
∑i=1Nωmi∑Tωmi=1−em,这里应注意
e
m
e_m
em与前面AdaBoost算法中的
e
m
e_m
em的意义都是带权错误率,且此处的
e
m
e_m
em亦属于
[
0
,
1
]
[0,1]
[0,1]。
则
α
∗
\alpha^*
α∗的形式变为
α
m
∗
=
1
2
l
o
g
1
−
e
m
e
m
\alpha^*_m = \frac{1}{2}log\frac{1-e_m}{e_m}
αm∗=21logem1−em
至于样本权重更新公式,由
f
m
(
x
)
=
f
m
−
1
(
x
)
+
α
m
G
m
(
x
)
f_m(x) = f_{m-1}(x)+\alpha_mG_m(x)
fm(x)=fm−1(x)+αmGm(x),知
ω
‾
m
+
1
,
i
=
e
x
p
[
−
y
i
f
m
(
x
i
)
]
=
e
x
p
[
−
y
i
f
m
−
1
(
x
)
−
y
i
α
m
G
m
(
x
)
]
=
e
x
p
[
−
y
i
f
m
−
1
(
x
)
]
e
x
p
[
−
y
i
α
m
G
m
(
x
)
]
=
ω
‾
m
i
e
x
p
[
−
y
i
α
m
G
m
(
x
)
]
\begin{aligned} \overline{\omega}_{m+1,i} &= exp[-y_if_m(x_i)] \\ & = exp[-y_if_{m-1}(x)-y_i\alpha_mG_m(x)] \\ & = exp[-y_if_{m-1}(x)]exp[-y_i\alpha_mG_m(x)] \\ & = \overline{\omega}_{mi}exp[-y_i\alpha_mG_m(x)] \end{aligned}
ωm+1,i=exp[−yifm(xi)]=exp[−yifm−1(x)−yiαmGm(x)]=exp[−yifm−1(x)]exp[−yiαmGm(x)]=ωmiexp[−yiαmGm(x)]
可以看到只相差一个规范化因子,若我们在每一步中加入规范化权值这一步,则开始由 f 0 = 0 f_0 = 0 f0=0知 ω ‾ 1 i = 1 \overline{\omega}_{1i} = 1 ω1i=1,规范化后即是 ω 1 i = 1 N {\omega}_{1i} = \frac{1}{N} ω1i=N1,其后由上面推理可知, e m , α m , G m ( x ) e_m,\alpha_m,G_m(x) em,αm,Gm(x)的更新方式完全相同。
于是AdaBoost是在每一步归一化权值的前向分步算法。