花书第六章 第七章 第八章

目录

深度前馈网络 

深度学习中的正则化

深度模型中的优化

牛顿法


深度前馈网络 

通过学习特征来改善模型的一般化

1.实例:学习XOR

  1. 前向传播:输入 x 提供初始信息,然后传播到每一层的隐藏单元,最终产生输出 ˆ y。这称
    之为 前向传播; 
  2. 反向传播:允许来自代价函数的信息通过网络向后流动,以便计算梯度。
    1. 适用范围注意(不仅仅是多层神经网络):
      1. 许多机器学习任务需要计算其他导数,来作为学习过程的一部分,或者用来分析学得的模型。反向传播算法也适用于这些任务,不局限于计算代价函数关于参数的梯度。
      2. 计算一个任意函数 f 的梯度 ∇xf(x, y),其中 x 是一组变量,我们需要它们的导数,而 y 是函数的另外一组输入变量,但我们并不需要它们的导数
      3. 反向传播是一层层传播的,比如最后一层往倒数第二层传播,而后第二层继续往第三层传播。反向传播算法的目标是更新神经网络中的每一个权重,以便得到实际输出和目标输出更接近,因此要最小化输出节点和整个网络的误差。

深度学习中的正则化

  1. 正则化:显式地被设计来减少测试误差(可能会以增大训练误差为代价)
  2. 参数范数惩罚
    1. 许多正则化方法通过对目标函数 J 添加一个参数范数惩罚 Ω(θ),限制模型
      (如神经网络、线性回归或逻辑回归)的学习能力。我们将正则化后的目标函数记为J(θ; X, y) = J(θ; X, y) + αΩ(θ)                                                                                        其中 α ∈ [0, ∞) 是权衡范数惩罚项 Ω 和标准目标函数 J(X; θ) 相对贡献的超参数。将 α 设为 0 表示没有正则化。α 越大,对应正则化惩罚越大。
  3. 作为约束的范数惩罚

    1. 广义的Lagrange函数:
    2. 这个约束问题的解由下式给出:
      1. 这和最小化J的正则化训练问题是完全一样的
      2. 有时候不用惩罚用显式的限制,我们可以修改下降算法(如随机梯度下降算法),使其先计算 J(θ) 的下降步,然后将 θ 投影到满足 Ω(θ) < k 的最近点。
      3. 因为重投影的显式约束还对优化过程增加了一定的稳定性,所以这是另一个好处。
  4. 正则化和欠约束问题
    1. 大多数形式的正则化能够保证应用于欠定问题的迭代方法收敛。
    2. 为了正确定义机器学习问题,正则化是必要的。
    3. 可以使用 Moore-Penrose 求解欠定线性方程。需要用到前面讲到的伪逆的定义。
      1.  伪逆定义:其中,矩阵 U,D,V是矩阵 A进行奇异值分解后得到的,对角矩阵D的伪逆D+是其非零元素取倒数之后再转置得到的。

  5. 数据集增强

    1. 让机器学习模型泛化得更好的最好办法是使用更多的数据进行训练(假数据)。

      1. 分类:通过转换训练集中的 x 来生成新的 (x, y) 对。

      2. 除非我们已经解决了密度估计问题,否则在密度估计任务中生成新的假数据是很困难的。

    2. 数据集增强对一个具体的分类问题来说是特别有效的方法:对象识别。(必须要小心,不能使用会改变类别的转换。例如,光学字符识别任务需要认识到 “b’’ 和 “d’’ 以及 “6’’ 和 “9’’ 的区别,所以对这些任务来说,水平翻转和旋转180◦并不是合适的数据集增强方式。)

    3. 数据集增强对语音识别任务也是有效的 。

    4. 在比较机器学习基准测试的结果时,考虑其采取的数据集增强是很重要的。通常情况下,人工设计的数据集增强方案可以大大减少机器学习技术的泛化误差。

  6. 噪声鲁棒性

    1. 鲁棒性是指一个系统或组织有抵御或克服不利条件的能力。

    2. 另一种正则化模型的噪声使用方式是将其加到的权重。这项技术主要用于循环神经网络。

    3. 在某些假设下,施加于权重的噪声可以被解释为与更传统的正则化形式等同

  7. 半监督学习

    1. 在半监督学习的框架下,P(x) 产生的未标记样本和 P(x, y) 中的标记样本都用于估计 P(y | x) 或者根据 x 预测 y。

    2. 在深度学习的背景下,半监督学习通常指的是学习一个表示 h = f(x)。学习表示的目的是使相同类中的样本有类似的表示。

    3. 可以构建这样一个模型,其中生成模型 P(x) 或 P(x, y) 与判别模型 P(y | x)
      共享参数,而不用分离无监督和监督部分。

  8. 多任务学习

    1. 多任务学习是通过合并几个任务中的样例(可以视为对参数施加的软约束)来提高泛化的一种方式。额外的训练样本以同样的方式将模型的参数推向泛化更好的方向,当模型的一部分在任务之间共享时,模型的这一部分更多地被约束为良好的值(假设共享是合理的),往往能更好地泛化。

      1. 具体任务的参数(只能从各自任务的样本中实现良好的泛化)。
      2. 所有任务共享的通用参数(从所有任务的汇集数据中获益)。
  9. 提前终止
    1. 当训练有足够的表示能力甚至会过拟合的大模型时,我们经常观察到,训练误差会随着时间的推移逐渐降低但验证集的误差会再次上升。我们可以认为提前终止是非常高效的超参数选择算法。
    2. 提前终止是一种非常不显眼的正则化形式,它几乎不需要改变基本训练过程、目标函数或一组允许的参数值。这意味着,无需破坏学习动态就能很容易地使用提前终止。
  10. 参数绑定和参数共享
    1. 我们经常想要表达的一种常见依赖是某些参数应当彼此接近。考虑以下情形:我们有两个模型执行相同的分类任务(具有相同类别),但输入分布稍有不同。形式地,我们有参数为 w^{(A)}的模型 A 和参数为 w^{(B)}的模型 B。这两种模型将输入映射到两个不同但相关的输出:ˆy(A)= f(w^{(A)}, x) 和 ˆy(B)= f(w^{(B)}, x)。
    2. 正则化一个模型(监督模式下训练的分类器)的参数,使其接近另一个无监督模式下训练的模型(捕捉观察到的输入数据的分布)的参数。这种构造架构使得许多分类模型中的参数能与之对应的无监督模型的参数匹配。
    3. 参数范数惩罚是正则化参数使其彼此接近的一种方式,而更流行的方法是使用约束:强迫某些参数相等。由于我们将各种模型或模型组件解释为共享唯一的一组参数,这种正则化方法通常被称为参数共享(parameter sharing)。
    4. CNN通过在图像多个位置共享参数来考虑这个特性。相同的特征(具有相同权重的隐藏单元)在输入的不同位置上计算获得。参数共享显著降低了CNN模型的参数数量,并显著提高了网络的大小而不需要相应地增加训练数据。
  11. 稀疏表示(另一种惩罚模型)
    1. 另一种策略是惩罚神经网络中的激活单元,稀疏化激活单元。这种策略间接地对模型参数施加了复杂惩罚。
    2. 含有隐藏单元的模型在本质上都能变得稀疏。
  12. Bagging 和其他集成方法
    1. Bagging:是通过结合几个模型降低泛化误差的技术
    2.  模型平均:分别训练几个不同的模型,然后让所有模型表决测试样例的输出,是一个减少泛化误差的非常强大可靠的方法。。
    3. 模型平均奏效的原因是不同的模型通常不会在测试集上产生完全相同的误差。
    4. 不同的集成方法以不同的方式构建集成模型。
    5. 不同的集成方法以不同的方式构建集成模型。例如,集成的每个成员可以使用不同的算法和目标函数训练成完全不同的模型。
  13. Dropout
    1. Dropout训练的集成包括所有从基础网络除去非输出单元后形成的子网络
    2. Dropout提供了正则化一大类模型的方法,计算方便但功能强大。在第一种近似下,Dropout可以被认为是集成大量深层神经网络的实用Bagging方法。
    3. 在Bagging的情况下,所有模型都是独立的
    4. 在Dropout的情况下,所有模型共享参数,其中每个模型继承父神经网络参数的不同子集。
    5. Dropout强大的大部分原因来自施加到隐藏单元的掩码噪声
    6. Dropout的另一个重要方面是噪声是乘性的。如果是固定规模的加性噪声,那么加了噪声 ϵ 的整流线性隐藏单元可以简单地学会使 hi变得很大(使增加的噪声 ϵ 变得不显著)。乘性噪声不允许这样病态地解决噪声鲁棒性问题。
  14. 对抗训练
    1. 对抗样本:模型在这个输入点 x′的输出与附近的数据点 x 非常不同。
    2. 我们可以通过对抗训练(adversarial training)减少原有独立同分布的测试集的错误率——在对抗扰动的训练集样本上训练网络。
  15. 切面距离、正切传播和流形正切分类器
    1. 切面距离算法是一种非参数的最近邻算法,其中使用的度量不是通用的欧几里德距离,而是根据邻近流形关于聚集概率的知识导出的。
    2. 正切传播算法训练带有额外惩罚的神经网络分类器,使神经网络的每个输出f ( x )对已知的变化因素是局部不变的。
    3. 正切传播与数据集增强密切相关。正切传播也涉及到双反向传播和对抗训练,双反向传播正则化使Jacobian矩阵偏小,而对抗训练找到原输入附近的点,训练模型在这些点上产生与原来输入相同的输出
    4. 局部不变性的方法为等价地通过正则化惩罚 Ω 使 f 在 x 的v^{(i)}方向的导数较小:
      1. 这个正则化项当然可以通过适当的超参数缩放,并且对于大多数神经网络,我们需要对许多输出求和 (此处为描述简单,f(x) 为唯一输出)。
    5. 与切面距离算法一样,我们根据切向量推导先验,通常从变换(如平移、旋转和缩放图像)的效果获得形式知识。
    6. 形正切分类器无需知道切线向量的先验。编码器可以估算流形的切向量,使用这种技术来避免用户指定切向量。

深度模型中的优化

  1. 主要解决这一类特定的优化问题:寻找神经网络上的一组参数 θ,它能显著地降低代价函数 J(θ),该代价函数通常包括整个训练集上的性能评估和额外的正则化项。
  2. 学习和纯优化有什么不同
    1. 学习:间接地优化P。我们希望通过降低代价函数 J(θ) 来提高 P。
    2. 纯优化:纯优化最小化目标 J 本身。
    3. 将机器学习问题转化回一个优化问题的最简单方法是最小化训练集上的期望损失。这意味着用训练集上的经验分布 ˆp(x, y) 替代真实分布 p(x, y)。现在,我们将最小化经验风险(empirical risk):经验风险最小化很容易导致过拟合,高容量的模型会简单地记住训练集。
    4. 训练算法通常不会停止在局部极小点。反之,机器学习通常优化代理损失函数,但是在基于提前终止的收敛条件满足时停止。
  3. 神经网络优化中的挑战
    1. 优化通常是一个极其困难的任务。传统的机器学习会小心设计目标函数和约束,以确保优化问题是凸的,从而避免一般优化问题的复杂度。在训练神经网络时,我们肯定会遇到一般的非凸情况。即使是凸优化,也并非没有任何问题。
      1. 病态:病态体现在随机梯度下降会‘‘卡’’ 在某些情况,此时即使很小的更新步长也会增加代价函数。
        1. 判断:梯度范数不会在训练过程中显著缩小,但是 g⊤Hg 的增长会超过一个数量级。
        2. 解决:牛顿法在解决带有病态条件的 Hessian 矩阵的凸优化问题
      2. 局部极小值:凸优化问题的一个突出特点是其可以简化为寻找一个局部极小点的问题。任何一个局部极小点都是全局最小点。有些凸函数的底部是一个平坦的区域,而不是单一的全局最小点,但该平坦区域中的任意点都是一个可以接受的解。优化一个凸问题时,若发现了任何形式的临界点,我们都会知道已经找到了一个不错的可行解
        1. 判断局部极小值是否是主要问题的方法:画出梯度范数随时间的变化。如果梯度范数没有缩小到一个微小的值,那么该问题既不是局部极小值,也不是其他形式的临界点。
      3. 悬崖和梯度爆炸
        1. 当多层神经网络存在像悬崖一样的斜率较大区域时,使用启发式梯度截断来解决问题
        2. 梯度消失使得我们难以知道参数朝哪个方向移动能够改进代价函数,而梯度爆炸会使得学习不稳定。
      4. 长期依赖
        1. 由于变深的结构使模型丧失了学习到先前信息的能力,让优化变得极
          其困难。
      5. 非精确梯度
        1. 几乎每一个深度学习算法都需要基于采样的估计,至少使用训练样本的小批量来计算梯度。
        2. 当目标函数不可解时,通常其梯度也是难以处理的。在这种情况下,我们只能近似梯度。
  4. 基本算法
    1. 按照数据生成分布抽取 m 个小批量(独立同分布的)样本,通过计算它们梯度均值,我们可以得到梯度的无偏估计。
    2. 动量:动量方法旨在加速学习,特别是处理高曲率、小但一致的梯度,或是带噪声的梯度。动量算法积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。
    3. Nesterov 动量:
  5. 参数初始化策略
    1. 训练深度模型是一个足够困难的问题,以致于大多数算法都很大程度地受到初始化选择的影响。
    2. 现代的初始化策略是简单的、启发式的。设定改进的初始化策略是一项困难的任务,因为神经网络优化至今还未被很好地理解。
    3. 也许完全确知的唯一特性是初始参数需要在不同单元间 ‘‘破坏对称性’’。
    4. 我们几乎总是初始化模型的权重为高斯或均匀分布中随机抽取的值。高斯或均
      匀分布的选择似乎不会有很大的差别,但也没有被详尽地研究。然而,初始分布的
      大小确实对优化过程的结果和网络泛化能力都有很大的影响。
    5. 通常情况下,我们可以为每个单元的偏置设置启发式挑选的常数,仅随机初始化权重。额外的参数(例如用于编码预测条件方差的参数)通常和偏差一样设置为启发式选择的常数。
    6. 计算资源允许的话,将每层权重的初始数值范围设为超参数通常是个好主意,是否选择使用密集或稀疏初始化也可以设为一个超参数。作为替代,我们可以手动搜索最优初
      始范围。
  6. 自适应学习率算法
    1. AdaGrad
      1. 缩放每个参数反比于其所有梯度历史平方值总和的平方根
      2. 具有损失最大偏导的参数相应地有一个快速下降的学习率,而具有小偏导的参数在学习率上有相对较小的下降。
    2. RMSProp
      1. 在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。
      2. RMSProp 使用指数衰减平均以丢弃遥远过去的历史,使其能够在找到凸碗状结构后快速收敛,它就像一个初始化于该碗状结构的 AdaGrad 算法实例。
    3. Adam
      1. 在 Adam 中,动量直接并入了梯度一阶矩(指数加权)的估计。将动量加入 RMSProp 最直观的方法是将动量应用于缩放后的梯度。结合缩放的动量使用没有明确的理论动机。
      2. 其次,Adam 包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩的估计
  7. 牛顿法

    1. 牛顿法是基于二阶泰勒级数展开在某点 θ0附近来近似 J(θ) 的优化方法,其忽
      略了高阶导数: 其中 H 是 J 相对于 θ 的 Hessian 矩阵在 θ0处的估计。如果我们再求解这个函数
      的临界点,我们将得到牛顿参数更新规则:
  8. 优化策略和元算法
    1. 批标准化:实际上它并不是一个优化算法,而是一个自适应的重参数化的方法,试图解决训练非常深的模型的困难。

    2. 坐标下降:一次优化一个或一块坐标。

      1. 当一个变量的值很大程度地影响另一个变量的最优值时,坐标下降不是一个很
        好的方法

    3. Polyak 平均:平均优化算法在参数空间访问轨迹中的几个点

      1. 梯度下降应用于凸问题时,这种方法具有较强的收敛保证。当应用于神经网络时,其验证更多是启发式的,但在实践中表现良好

    4. 监督预训练:训练目标模型求解目标问题之前,训练简单模型求解简化问题

      1. 贪心算法:将问题分解成许多部分,然后独立地在每个部分求解最优值。贪心算法也可以紧接一个 精调(fine-tuning)阶段,联合优化算法搜索全问题的最优解。使用贪心解初始化联合优化算法,可以极大地加速算法,并提高寻找到的解的质量。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值