深刻的Boosting
Boosting是一种常见的集成学习方法,看似简单的模型组合,其背后蕴含着深刻的算法思想。
从Boosting到AdaBoost
Boosting学习是一种组合学习算法,也代表着一种组合学习的思想,AdaBoosting是其算法思想的一种实现。
关于AdaBoost算法的资料有很多,质量相对高的有李航的《统计学习方法》和国外的《PRML》,其中都包含了完整的算法理论推导,网络上也有很多文章解读。并且通过复杂度分析证明了在弱基础模型准确率严格比随机好的条件下,整体错误率将指数下降趋于零。
其算法核心思想是:用不同权重的数据训练不同弱基础模型,通过弱基础模型的误差率构造相应的模型权重,通过若干弱基础模型的线性加权组合得到最终的模型。
算法核心有三点值得注意:
- 数据样本权重:每次训练弱基础模型后都需要根据当前模型结果更新数据权重(训练第一个模型时设置样本权重平均分配),即将对当前模型来说较难的数据样本的权重加大,相应地,降低较简单数据样本的权重,这样保证了每次新的弱基础模型都是针对性地对整体较弱的部分进行强化训练,从而更高效地发挥出组合学习的优势(相对于不引入样本权重的方式来说)。
- 弱基础模型权重:通过弱基础模型的错误率自动构建其模型权重,减少了人为经验的“干扰”,并具备坚实的数学理论基础。
- 线性加权组合:将不同弱基础模型的结果视为“高阶特征”,进一步对这些“高阶特征”放入一个线性模型中,在一定程度上实现了“端到端”的自动化特征工程的效果。
从AdaBoost到神经网络
苏剑林在博文中也谈到了AdaBoost和神经网络之间的联系,核心观点是AdaBoost和神经网络之间的异曲同工之妙在于都利用上一层“模型”结果作为新特征,并输入下一层“模型”进行训练。本文则增加了另外的视角来具体对比二者之间的联系与区别。
1. 残差学习
残差学习火于何恺明大神的一篇论文《Deep Residual Learning for Image Recognition》,也是目前为止Google Scholar Metric 2020引用量最高的论文。
这篇论文通过对模型训练深入的研究,提出深度残差连接网络,极大地优化了梯度流的管理,从而在神经网络的训练效率和效果上,都取得了极大的进步。
回到AdaBoost,其引入数据样本权重序列化训练不同弱基础模型,也体现了残差学习的思想,不过这里的残差应视为根据当前模型结果更新数据样本权重后的全部数据,也成为了下一弱基础模型学习的目标,体现出若干模型序列化学习“残差“的效果。
值得一提的是,在GBDT用决策树作为弱基础模型处理回归问题时,残差定义为当前整体回归结果和真实值之间的差值,这更加明确地体现了残差学习的思想。
2. 特征工程
从神经网络视角来看,可以将AdaBoost近似看作一个不加激活函数的端到端三层线性神经网络:
输入层:原始数据输入层,节点数是数据样本个数。
中间层:全连接层,不加激活函数,中间层的节点数就是弱基础模型个数,层参数对应着数据样本权重;虽然形式上很类似,但和真正的神经网络还是有一定的区别。一般的神经网络中,上一层数据是并行加权乘上权重走到当前层,当前层的所有节点相对独立,没有序列关系,而AdaBoost的各弱基础模型是具备一定的序列关系的,即当前弱基础模型的训练数据和上一弱基础模型密切相关。
输出层:输出节点数为1的全连接层,不加激活函数,层参数对应着不同弱基础模型的权重。
3. 模型训练
二者的模型训练方式都是通过对监督信号计算损失值,然后迭代更新权重,只不过监督方式和更新方式各有千秋。神经网络利用loss function(分类一般用cross entropy)+反向传播,训练完mini-batch后一次性更新所有参数,每个参数更新次数为mini-batch数量。而AdaBoost直接利用整体样本的错误率更新数据权重和模型权重,但只更新当前权重,属于序列化更新,一次只更新部分参数且不重叠,每个参数只更新一次,训练完成所有参数就全部更新完成,
总结
本文从Boosting出发,浅析其背后深刻的思想,并对Boosting和神经网络之间的联系和区别做了一些简要的分析,便于感性上获得从组合学习的角度去理解神经网络、从神经网络层次化特征的角度去理解AdaBoost算法的进一步认识。