🎨
Bible-DeepLearning
  • Introduction
  • 第6章 深度前馈网络
    • 6.1 例子:学习XOR
    • 6.2 基于梯度的学习
      • 6.2.1 代价函数
        • 6.2.1.1 使用最大似然学习条件分布
        • 6.2.1.2 学习条件统计量
      • 6.2.2 输出单元
        • 6.2.2.1 用于高斯输出分布的线性神单元
        • 6.2.2.2 用于Bernoulli输出分布的sigmoid单元
        • 6.2.2.3 用于Multinoulli输出分布的softmax单元
    • 6.3 隐藏单元
      • 6.3.1 ReLU及其扩展
      • 6.3.2 logistic sigmoid与双曲正切函数
      • 6.3.3 其他隐藏单元
      • 李宏毅补充 SELU
    • 6.4 架构设计
    • 6.5 反向传播和其他的微分算法
      • 6.5.1 计算图
      • 6.5.2 微积分中的链式法则
      • 6.5.3 递归地使用链式法则来实现反向传播
      • 6.5.4 全连接MLP中的反向传播计算
      • 6.5.5 符号到符号的导数
      • 6.5.6 一般化的反向传播
      • 6.5.7 实例:用于MLP 训练的反向传播
      • 6.5.8 复杂化
  • 第7章 深度学习中的正则化
    • 7.1 参数范数惩罚
      • 7.1.1 L2参数正则化
      • 7.1.2 L1参数正则化
    • 7.2 作为约束的范数惩罚
    • 7.3 正则化和欠约束问题
    • 7.4 数据集增强
    • 7.5 噪声鲁棒性
    • 7.6 半监督学习
    • 7.7 多任务学习
    • 7.8 提前终止
    • 7.9 参数绑定和参数共享
    • 7.10 稀疏表示
    • 7.11 Bagging 和其他集成方法
    • 7.12 Dropout
    • 7.13 对抗训练
    • 7.14 切面距离、正切传播和流形正切分类器
    • Ag补充 一些能用于提升比赛成绩的方法
  • 第8章 深度模型中的优化
    • 8.1 学习和纯优化有什么不同
      • 8.1.1 经验风险最小化
      • 8.1.2 代理损失函数和提前终止
      • 8.1.3 批量算法和小批量算法
    • 8.2 神经网络优化中的挑战
      • 8.2.1 病态
      • 8.2.2 局部极小值
      • 8.2.3 8.2.3 高原、鞍点和其他平坦区域
      • 8.2.4 悬崖和梯度爆炸
      • 8.2.5 长期依赖
      • 8.2.6 非精确梯度
    • 8.3 基本算法
      • 8.3.1 随机梯度下降
      • 8.3.2 动量
      • 8.3.3 Nesterov 动量
    • 8.4 参数初始化策略
    • 8.5 自适应学习率算法
      • 8.5.1 AdaGrad
      • 8.5.2 RMSProp
      • 8.5.3 Adam
      • 8.5.4 选择正确的优化算法
    • 8.6 二阶近似方法
      • 8.6.1 牛顿法
      • 8.6.2 共轭梯度
      • 8.6.3 BFGS
    • 8.7 优化策略和元算法
      • 8.7.1 批标准化
      • 8.7.2 坐标下降
      • 8.7.3 Polyak 平均
      • 8.7.4 监督预训练
      • 8.7.5 设计有助于优化的模型
  • 第9章 卷积网络
    • 9.1 卷积运算
    • 9.2 动机
    • 9.3 池化
    • 9.4 卷积与池化作为一种无限强的先验
    • 9.5 基本卷积函数的变体
    • 9.6 结构化输出
    • 9.7 数据类型
  • 第10章 序列建模:循环和递归网络
    • 10.1 展开计算图
    • 10.2 循环神经网络
      • 10.2.1 导师驱动过程和输出循环网络
      • 10.2.2 计算循环神经网络的梯度
      • 10.2.3 作为有向图模型的循环网络
      • 10.2.4 基于上下文的RNN序列建模
    • 10.3 双向RNN
    • 10.4 基于编码 - 解码的序列到序列架构
    • 10.5 深度循环网络
    • 10.6 递归神经网络
    • 10.7 长期依赖的挑战
    • 10.9 渗漏单元和其他多时间尺度的策略
    • 10.10 长短期记忆和其他门控RNN
      • 10.10.1 LSTM
      • 10.10.2 其他门控RNN
    • 10.11 优化长期依赖
      • 10.11.1 梯度截断
      • 10.11.2 引导信息流的正则化
    • 10.12 外显记忆
  • 第11章 实践方法论
    • 11.1 性能度量
    • 11.2 默认的基准模型
    • 11.3 决定是否收集更多数据
    • 11.4 选择超参数
      • 11.4.1 手动选择超参数
      • 11.4.3 网络搜索
      • 11.4.4 随机搜索
    • 11.5 调试策略
Powered by GitBook
On this page
  • 什么是Bagging?
  • 为什么Bagging有效?
  • 怎样集成?
  • 怎样生成不同的模型?
  • 其它集成方法

Was this helpful?

  1. 第7章 深度学习中的正则化

7.11 Bagging 和其他集成方法

Previous7.10 稀疏表示Next7.12 Dropout

Last updated 4 years ago

Was this helpful?

什么是Bagging?

Bagging(bootstrap aggregating)是通过结合几个模型降低泛化误差的技术。 主要想法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。 这是机器学习中常规策略的一个例子,被称为模型平均(model averaging)。 采用这种策略的技术被称为集成方法。

为什么Bagging有效?

模型平均奏效的原因是不同的模型通常不会在测试集上产生完全相同的误差。

假设我们有kkk个回归模型。 假设每个模型在每个例子上的误差是ϵi\epsilon_iϵi​,这个误差服从零均值方差为E[ϵi2]=vE[\epsilon_i^2] = vE[ϵi2​]=v且协方差为E[ϵiϵj]=cE[\epsilon_i \epsilon_j] = cE[ϵi​ϵj​]=c的多维正态分布。

[warning] [?] 这一段看不懂 这一段没看懂。 理解1:ϵi\epsilon_iϵi​代表第i个模型在所有样本上的误差,因此ϵi\epsilon_iϵi​是一个向量,向量是元素个数为样本数。 理解2:ϵi\epsilon_iϵi​代表第i个模型在某个样本上的误差 ,因此ϵi\epsilon_iϵi​是一个数。 不管怎么理解都解释不通。

通过所有集成模型的平均预测所得误差是1k∑iϵi\frac{1}{k} \sum_i \epsilon_ik1​∑i​ϵi​。

[success] 所有模型对同一个样本做预测并取平均值会得到“所有集成模型在一个样本上的平均误差”。 “所有集成模型的平均预测误差”是指每个样本上的“所有集成模型在一个样本上的平均误差”组成的向量。

集成预测器平方误差的期望是

E[(1k∑iϵi)2]=1k2E[∑i(ϵi2+∑j≠iϵiϵj)]=1kv+k−1kc\begin{aligned} E \Bigg[\Bigg(\frac{1}{k} \sum_i \epsilon_i \Bigg)^2\Bigg] &= \frac{1}{k^2} E \Bigg[\sum_i \Bigg(\epsilon_i^2 + \sum_{j \neq i} \epsilon_i \epsilon_j\Bigg)\Bigg] \\ &= \frac{1}{k} v + \frac{k-1}{k} c \end{aligned}E[(k1​i∑​ϵi​)2]​=k21​E[i∑​(ϵi2​+j=i∑​ϵi​ϵj​)]=k1​v+kk−1​c​

[success] 上面这个公式只能理解一部分:

E[(1k∑iϵi)2]=1k2E[(∑iϵi)2]=1k2E[∑i(ϵi2+∑j≠iϵiϵj)]E \Bigg[\Bigg(\frac{1}{k} \sum_i \epsilon_i \Bigg)^2\Bigg] = \frac{1}{k^2} E \Bigg[(\sum_i \epsilon_i )^2\Bigg]= \frac{1}{k^2} E \Bigg[\sum_i \Bigg(\epsilon_i^2 + \sum_{j \neq i} \epsilon_i \epsilon_j\Bigg)\Bigg]E[(k1​i∑​ϵi​)2]=k21​E[(i∑​ϵi​)2]=k21​E[i∑​(ϵi2​+j=i∑​ϵi​ϵj​)]

这一步的原理是:(a+b+c)2=a2+b2+c2+ab+bc+a(a+b+c)^2 = a^2 + b^2 + c^2 + ab + bc + a(a+b+c)2=a2+b2+c2+ab+bc+a

E[∑iϵi2]=kvE[∑i(∑j≠iϵiϵj)]=k(k−1)\begin{aligned} E[\sum_i \epsilon_i^2] = kv \\ E \Bigg[\sum_i \Bigg(\sum_{j \neq i} \epsilon_i \epsilon_j\Bigg)\Bigg] = k(k-1) \end{aligned}E[i∑​ϵi2​]=kvE[i∑​(j=i∑​ϵi​ϵj​)]=k(k−1)​

在误差完全相关即c=vc=vc=v的情况下,均方误差减少到vvv,所以模型平均没有任何帮助。

[warning] 为什么“误差完全相关”即c=v?

在错误完全不相关即c=0c =0c=0的情况下,该集成平方误差的期望仅为1kv\frac{1}{k}vk1​v。 这意味着集成平方误差的期望会随着集成规模增大而线性减小。 换言之,平均上,集成至少与它的任何成员表现得一样好,并且如果成员的误差是独立的,集成将显著地比其成员表现得更好。

怎样集成?

不同的集成方法以不同的方式构建集成模型。 例如,集成的每个成员可以使用不同的算法和目标函数训练成完全不同的模型。 Bagging是一种允许重复多次使用同一种模型、训练算法和目标函数的方法。

具体来说,Bagging涉及构造kkk个不同的数据集。 每个数据集从原始数据集中重复采样构成,和原始数据集具有相同数量的样例。 这意味着,每个数据集以高概率缺少一些来自原始数据集的例子,还包含若干重复的例子(如果所得训练集与原始数据集大小相同,那所得数据集中大概有原始数据集2/32/32/3的实例)。

[success] 每个样本都是从全部的原始样本中随机采用的。 最后用于训练的样本的样本数与原始样本数相同,但内容不同。 有的原始样本不在训练样本中,有的原始样本在训练样本中出现多次。

[info] 图7.5 描述Bagging如何工作的草图。 假设我们在上述数据集(包含一个8、一个6和一个9)上训练数字8的检测器。 假设我们制作了两个不同的重采样数据集。 Bagging训练程序通过有放回采样构建这些数据集。 第一个数据集忽略9并重复8。 在这个数据集上,检测器得知数字顶部有一个环就对应于一个8。 第二个数据集中,我们忽略6并重复9。 在这种情况下,检测器得知数字底部有一个环就对应于一个8。 这些单独的分类规则中的每一个都是不可靠的,但如果我们平均它们的输出,就能得到鲁棒的检测器,只有当8的两个环都存在时才能实现最大置信度。

怎样生成不同的模型?

神经网络能找到足够多的不同的解,意味着他们可以从模型平均中受益(即使所有模型都在同一数据集上训练)。 神经网络中随机初始化的差异、小批量的随机选择、超参数的差异或不同输出的非确定性实现往往足以使得集成中的不同成员具有部分独立的误差。

其它集成方法

模型平均是一个减少泛化误差的非常强大可靠的方法。 在科学论文中比较算法的表现时,它通常是不鼓励使用的,因为任何机器学习算法都可以从模型平均中大幅获益(以增加计算和存储为代价)。

机器学习比赛中的取胜算法通常是使用超过几十种模型平均的方法。 最近一个突出的例子是Netflix Grand Prize。

不是所有构建集成的技术都是为了让集成模型比单一模型更加正则化。 例如,一种被称为Boosting的技术构建比单个模型容量更高的集成模型。

通过向集成逐步添加神经网络,Boosting已经被应用于构建神经网络的集成。 通过逐渐增加神经网络的隐藏单元,Boosting也可以将单个神经网络解释为一个集成。

模型iii在数据集iii上训练。 每个数据集所含样本的差异导致了训练模型之间的差异。 图7.5是一个例子。

[success] 正则化是解决过拟合问题。提高模型容量是解决欠拟合问题。

[success] bagging VS boosting bagging: boosting: 区别1: 样本 bagging: 样本有放回取样,样本权重不变 boosting: 不取样,使用所有样本,每一轮会调整样本权重。 区别2:分类器 bagging:每个分类器权重相等。虽然在做最终决策时也有加权,但那是基于分类器对这个样本的确定度的加权。对分类器本身是没有偏见的。 boosting:每个分类器生成以后,根据它在训练样本上的正确率得到一个针对分类器的权重。权重影响它的最终决策中的话语权。 区别3:训练过程 bagging:每个分类器是各自独立的,可以并行计算 boosting:样本权重 --- 分类器 --- 样本权重 --- 分类器。。。这是一个串行的过程 区别4:集成的目的 bagging:将一组过拟合的分类器集成成一个泛化能力强的分类器 boosting:将一组弱分类器拟合成一个强分类器。 弱分类器可以是各种算法。例如ML中的决策树: bagging + 决策树 = boosting + 决策树 = gradient + 决策树 = GDBT[?]

多维正态分布
boosting
随机森林
提升树