Online Boosting VS Batch Boosting
online boosting 和 batch boosting的区别
最近的学习用到了online gradient boosting相关的知识,一开始没弄明白,于是找了先关文献查看今天算搞明白了,在此作为记录。
boosting
首先来说一下boosting,boosting方法属于集成(ensemble)方法的一种,它通过将一些预测能力较弱的一些模型(例如决策树)转化为一个预测能力较强的模型。例如对于分类问题,可以通过对一组弱学习器进行weighted majority vote从而将其转化为一个强的分类器;而对于回归问题则可以对一组弱学习器进行线性组合(linear combination)来将这组弱学习器转化为一个强的回归器。
比较常见的boosting方法有AdaBoost,Gradient Boosting等。
online learning
online learning是相对于batch learning来说的,在batch learning中系统可以使用所有的数据进行训练。但这会耗费大量的时间和计算资源。而online learning则不需要一次训练所有的数据,可以一次处理单个数据或者小批量(mini-batch)的数据从而循序渐进的训练,逐步积累学习成果。例如对于垃圾邮件过滤系统可能需要根据不断变化的垃圾邮件来调整过滤规则,这就需要online learning。
另外如果数据量比较大的话,使用online learning则有比较大的优势,因为该方法在训练过程中不用一次加载所有的数据,比较节省内存。
batch boosting
刚才所提到的AdaBoost,Gradient Boosting都属于batch boosting。
对于整个数据集,每个弱学习器分别对整个数据集进行预测,并根据该弱学习器的预测情况来计算该弱学习器的系数并调整数据集的权值分布。此时被预测错误的数据将获得较大的权重,因此后面的弱学习器将着重对预测错误的数据进行预测。最终由这些弱学习器组合成一个强的学习器:
H
(
x
)
=
s
i
g
n
(
∑
i
=
1
N
α
(
i
)
h
(
i
)
(
x
)
)
H(x) = sign(\sum_{i=1}^N\alpha^{(i)}h^{(i)}(x))
H(x)=sign(∑i=1Nα(i)h(i)(x)),其中
α
(
i
)
\alpha^{(i)}
α(i)是每个弱学习器的投票权重。
h
(
i
)
(
x
)
h^{(i)}(x)
h(i)(x)是每个若学习器的预测结果。此时该学习器对数据集有着较好的预测结果。
online boosting
对于online boosting,由于无法在最初得到全部的数据,因此对于单个的数据,online boosting方法让所有的弱学习器并行学习。也就是说对于每一个样本数据,online boosting算法必须在下一个样本数据到来之前更新全部的弱学习器。此时需要给每一个学习器赋予一个权值。因此在更新之后,第
i
i
i个弱学习器的预测结果为
h
t
+
1
(
i
)
h^{(i)}_{t+1}
ht+1(i)。boosting算法通过如下公式来预测下一个样本
x
t
+
1
x_{t+1}
xt+1:
H
t
+
1
(
x
t
+
1
)
=
s
i
g
n
(
∑
i
=
1
N
α
t
+
1
(
i
)
h
t
+
1
(
i
)
(
x
t
+
1
)
)
H_{t+1}(x_{t+1}) = sign(\sum_{i=1}^N\alpha_{t+1}^{(i)}h^{(i)}_{t+1}(x_{t+1}))
Ht+1(xt+1)=sign(∑i=1Nαt+1(i)ht+1(i)(xt+1)).其中
α
t
+
1
(
i
)
\alpha_{t+1}^{(i)}
αt+1(i)是每个弱学习器
i
i
i对样本
x
t
+
1
x_{t+1}
xt+1预测结果
h
t
+
1
(
i
)
h^{(i)}_{t+1}
ht+1(i)的投票权重。
gradient boosting 和 online gradient boosting
接下来以梯度提升算法为例来说明二者的区别。个人认为二者最主要的区别在于,批量(batch)提升算法是每一个弱学习器对于整个样本进行预测,并根据预测结果调整样本权重,再由下一个弱学习器接着预测。以此类推,最终的得到一个强分类器。而在线(online)提升算法则是对于每一个数据样本,由所有的弱学习器进行预测,然后根据误差调整权重,对强学习器进行实时的更新。
下面是二者的伪代码。
gradient boosting
注意,此处的梯度是损失函数对某个特定的学习器所求的偏导数。
online gradient boosting
总结
两种提升算法的区别,归根结底还是在于批量学习(batch learning)和在线学习(online learning)两种学习方式的不同。由于本文着重于说明两种boosting的区别,因此对于上述两种算法的具体分析再此不再赘述。有兴趣的可以查看下面两篇论文以及两篇文章。
参考
Chen S T, Lin H T, Lu C J. An online boosting algorithm with theoretical justifications[J]. arXiv preprint arXiv:1206.6422, 2012.
Beygelzimer A, Hazan E, Kale S, et al. Online gradient boosting[C]//Advances in neural information processing systems. 2015: 2458-2466.
Gradient Boost Implementation = pytorch optimization + sklearn decision tree regressor
Gradient Boosting Machine总结