当前位置: 代码迷 >> 综合 >> 集成学习笔记:MoE, bagging, boosting, stacking
  详细解决方案

集成学习笔记:MoE, bagging, boosting, stacking

热度:27   发布时间:2023-12-24 13:37:46.0

集成学习(ensemb learning)希望可以结合多个模型获得更好的结果。学习混合专家系统mixture of expert(MoE)的时候,发现它只是集成学习中的一类。还有其他三类很有效的方法是bagging,boosting和stacking。

MoE

MoE是利用门控网络将数据集划分为子任务,然后用不同的专家去学习不同的子任务。最后通过某种池化方法综合输出。

在hinton的讲解中,有注意点:

  1. 用输入和输出的关系分配样本,而不是仅仅按照输入的相似度分配。比如下边这个例子。我们希望的显然是按照浅绿线划分样本。
  2. error function不能选择综合expert的预测后算loss,看下边这个反例:模型i的预测结果必须向错误的方向移动才能让平均结果更接近target,这也不太对。所以应该是用作损失函数。而且有几个好处。能让expert不擅长的样本更新梯度很小(因为pi很小)。可以更新gate,让gate分给expert更擅长的样本(当(d-yi)^2小于综合loss E,就会让pi变大。反之让pi变小)。这个地方还不太确定为什么会这样,但是视频里这样讲。

Bagging

Bagging即套袋法,其算法过程如下:

  1. 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)

  2. 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

  3. 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

常见的bagging算法有随机森林

Boosting

      AdaBoosting(自适应boosting)方式每次使用的是全部的样本,每轮训练改变样本的权重。下一轮训练的目标是找到一个函数f 来拟合上一轮的残差。当残差足够小或者达到设置的最大迭代次数则停止。Boosting会减小在上一轮训练正确的样本的权重,增大错误样本的权重。(对的残差小,错的残差大)

      梯度提升的Boosting方式是使用代价函数对上一轮训练出的模型函数f的偏导来拟合残差。

Stacking

stacking是在已经有了一些训练好的模型后,寻找一个分类器/回归器来整合他们的结果。已有的模型一般叫做level-0模型,他们是用相同数据训练的,但是模型异构。更一般的来说,这些模型做出的预测或模型做出的预测误差不相关。新训练的分类器/回归器是level-1模型。level-1模型会利用一些新的数据。用新数据的标签和level-0模型们预测的标签来训练levle-1,看看怎么组合最好。

比较

  1. 数据选择:
    1. bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
    2. Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
    3. Stacking:同一数据集上组合来自多个level-0模型的预测,在训练level-1的时候,要用新的数据集。
    4. MoE:数据会按照门控网络在训练时动态分给不同的专家。每个专家只在自己擅长的样本类型上训练。在其他样本上不训练或者梯度更新很小,取决于模型结构。
  2. 模型:
    1. bagging:相同模型。
    2. boosting:相同模型。
    3. stacking:不同模型。
    4. MoE:相同模型。
  相关解决方案