1 Boosting的一般框架
1.初始化
f
0
(
x
)
f_0(x)
f0(x)
2.for m = 1 : M do
∙
\bullet
∙ 找一个弱学习器
ϕ
m
(
x
)
\phi_m(\mathbf x)
ϕm(x),使得
ϕ
m
(
x
)
\phi_m(\mathbf x)
ϕm(x)能改进
f
m
−
1
(
x
)
f_{m-1}(\mathbf x)
fm−1(x)
∙
\bullet
∙ 更新
f
m
(
x
)
=
f
m
−
1
(
x
)
+
α
m
ϕ
m
(
x
)
f_m(\mathbf x) = f_{m-1}(\mathbf x) + \alpha_m\phi_m(\mathbf x)
fm(x)=fm−1(x)+αmϕm(x)
3. return
f
(
x
)
=
f
M
(
x
)
f(x) = f_M(\mathbf x)
f(x)=fM(x)
2 Gradient Boosting
∙
\bullet
∙ 目标:损失函数
J
(
f
)
=
∑
i
=
1
N
L
(
f
(
x
i
)
,
y
i
)
J(f) = \sum_{i=1}^{N} L(f(\mathbf x_i), y_i)
J(f)=∑i=1NL(f(xi),yi)最小
∙
\bullet
∙ 若已有
f
m
−
1
(
x
)
f_{m-1}(\mathbf x)
fm−1(x),如何在
f
m
−
1
(
x
)
f_{m-1}(\mathbf x)
fm−1(x)的基础上改进
f
(
x
)
f(\mathbf x)
f(x)?
∙
\bullet
∙ 梯度下降:
f
m
(
x
)
=
f
m
−
1
(
x
)
−
η
∂
J
(
f
)
∂
f
(
x
)
∣
f
(
x
)
=
f
m
−
1
(
x
)
f_m(\mathbf x) = f_{m-1}(\mathbf x) - \eta\frac{\partial J(f)}{\partial f(x)}|_{f(\mathbf x) = f_{m-1}(\mathbf x)}
fm(x)=fm−1(x)−η∂f(x)∂J(f)∣f(x)=fm−1(x)
∙
\bullet
∙ 对比:
f
m
(
x
)
=
f
m
−
1
+
α
m
ϕ
m
(
x
)
f_m(\mathbf x) = f_{m-1} + \alpha_m\phi_m(\mathbf x)
fm(x)=fm−1+αmϕm(x)
f
f
f代表的是要求的模型,
f
m
f_m
fm代表第m轮要求的模型。
以上代表的思想:用弱学习器来预测目标函数的负梯度。前边这句话很明确,但是应如何来预测目标函数的负梯度呢?此处,及后边章节,老师也没有很细的讲。注意:梯度下降优化的是参数,所以迭代过程的公式是
w
n
e
w
=
w
o
l
d
−
η
∇
w_{new} = w_{old} - \eta \nabla
wnew=wold−η∇
3 Gradient Boosting Algorithm
r m , i r_{m,i} rm,i是梯度,也可以理解为残差。倒数第二个点号含义:用 ϕ \phi ϕ拟合 r m , i r_{m,i} rm,i
4 AdaBoost as Gradient Boosting
∙
\bullet
∙ 将指数损失
L
(
f
(
x
)
,
y
)
=
e
x
p
(
−
y
f
(
x
)
)
L(f(\mathbf x),y) = exp(-yf(x))
L(f(x),y)=exp(−yf(x))代入,
∙
\bullet
∙
J
(
f
)
=
∑
i
=
1
N
L
(
f
(
x
i
)
,
y
i
)
J(f) = \sum_{i=1}^{N}L(f(\mathbf x_i), y_i)
J(f)=∑i=1NL(f(xi),yi)
∙
\bullet
∙
∂
J
(
f
)
∂
f
=
∂
[
∑
i
=
1
N
e
x
p
(
−
y
i
f
(
x
i
)
)
]
∂
f
=
∑
i
=
1
N
y
i
e
x
p
(
−
y
i
f
(
x
i
)
)
\frac{\partial J(f)}{\partial f} = \frac{\partial [\sum_{i=1}^{N}exp(-y_if(\mathbf x_i))]}{\partial f} = \sum_{i=1}^{N}y_iexp(-y_if(\mathbf x_i))
∂f∂J(f)=∂f∂[∑i=1Nexp(−yif(xi))]=∑i=1Nyiexp(−yif(xi))
∙
\bullet
∙ 第m步,负梯度为:
−
∂
J
(
f
)
∂
f
∣
f
=
f
m
−
1
=
∑
i
=
1
N
y
i
e
x
p
(
−
y
i
f
m
−
1
(
x
i
)
)
-\frac{\partial J(f)}{\partial f}|_{f=f_{m-1}} = \sum_{i=1}^{N}y_iexp(-y_if_{m-1}(\mathbf x_i))
−∂f∂J(f)∣f=fm−1=∑i=1Nyiexp(−yifm−1(xi))
上一个步骤中,PPT在
e
x
p
(
−
y
i
f
m
−
1
(
x
i
)
)
exp(-y_if_{m-1}(\mathbf x_i))
exp(−yifm−1(xi))的底部画了一个向下的大括号,大括号地下写的是
w
m
,
i
w_{m,i}
wm,i,表达式右边用红色字体写的AdaBoost中的样本权重(下面有截图),代表的含义可能这部分可以看作是样本权重
w
m
,
i
w_{m,i}
wm,i,但无法理解为什么?
∙
\bullet
∙ 弱学习器
ϕ
m
(
x
)
\phi_m(\mathbf x)
ϕm(x)要尽可能拟合负梯度,则
ϕ
m
(
x
i
)
\phi_m(\mathbf x_i)
ϕm(xi)尽可能与
y
i
y_i
yi同号(预测正确),即最佳的
ϕ
m
\phi_m
ϕm为错误率最小的弱分类器(每个样本的权重为
w
m
,
i
w_{m,i}
wm,i)
∙
\bullet
∙ 以下通过另
∂
J
(
f
)
∂
α
m
=
0
\frac{\partial J(f)}{\partial \alpha_m} = 0
∂αm∂J(f)=0,得到
α
m
=
1
2
l
o
g
1
−
ε
m
ϵ
m
\alpha_m = \frac{1}{2} log \frac{1-\varepsilon_m}{\epsilon_m}
αm=21logϵm1−εm。这部分能看懂,但将
e
x
p
(
−
y
i
f
m
−
1
(
x
i
)
)
exp(-y_if_{m-1}(\mathbf x_i))
exp(−yifm−1(xi))用
w
m
,
i
w_{m,i}
wm,i代替的那一步不是很明白,上边也遇到过这样的替代,那里就已经不明白了。
通过改变样本权重得方式来推导AdaBoost表达式
VS
通过梯度提升这样一般性得方法推导AdaBoost
这两种方法得到得结果是一样的。
5 Gradient Boosting—其他损失函数
∙
\bullet
∙ 指数损失对离群点(outliers)比较敏感,而且也不是任何二值变量的概率密度取log后的表示。
∙
\bullet
∙ 因此另一种选择是损失函数取负log似然损失,得到logitBoost。
∙
\bullet
∙ 对回归问题,损失函数可取L2损失,得到L2boosting。
老师:AdaBoost为什么不常用,因为对离群点比较敏感,不支持概率输出(理论上就不支持)。所以,AdaBoost在推导的意义上很重要,但用的时候可能就用logitBoost。
只要损失函数确定,就能用Gradient Boosting的方式推导,就能得到对应的Boost。
6 L2Boosting (通过L2损失推到Boosting)
7 Shrinkage
如果没有
η
\eta
η,那么就是太贪心了。梯度下降本身也是一种贪心算法。如果
η
\eta
η特别小,那就意味着需要更多的弱学习器。