-
有些优化算法本质上是非迭代的,只是求解一个解点。有些其它优化算法本质上是迭代的,但是应用于这一类的优化问题时,能在可接受的时间内收敛到可接受的解,并且与初始值无关。深度学习训练算法通常没有这两种奢侈的性质。深度学习模型的训练算法通常是迭代的,因此要求使用者指定一些开始迭代的初始点。此外,训练深度模型是一个足够困难的问题,以致于大多数算法都很大程度地受到初始化选择的影响。初始点能够决定算法是否收敛,有些初始点十分不稳定,使得该算法会遭遇数值困难,并完全失败。当学习收敛时,初始点可以决定学习收敛得多块,以及是否收敛到一个代价高或低的点。此外,差不多代价的点可以具有区别极大的泛化误差,初始点也可以影响泛化。
-
为什么要特别使用 −v(t) 和粘性阻力呢?部分原因是因为 −v(t) 在数学上的便利——速度的整数幂很容易处理。然而,其他物理系统具有基于速度的其他整数幂的其他类型的阻力。例如,颗粒通过空气时会受到正比于速度平方的湍流阻力,而颗粒沿着地面移动时会受到恒定大小的摩擦力。这些选择都不合适。湍流阻力,正比于速度的平方,在速度很小时会很弱。不够强到使粒子停下来。非零值初始速度的粒子仅受到湍流阻力,会从初始位置永远地移动下去,和初始位置的距离大概正比于O(log t)。因此我们必须使用速度较低幂次的力。如果幂次为零,相当于干摩擦,那么力太强了。当代价函数的梯度表示的力很小但非零时,由于摩擦导致的恒力会使得粒子在达到局部极小点之前就停下来。粘性阻力避免了这两个问题——它足够弱,可以使梯度引起的运动直到达到最小,但又足够强,使得坡度不够时可以阻止运动。这解释了动量更新的基本形式,但具体什么是力呢?力正比于代价函数的负梯度 −∇θJ(θ)。该力推动粒子沿着代价函数表面下坡的方向移动。梯度下降算法基于每个梯度简单地更新一步,而使用动量算法的牛顿方案则使用该力改变粒子的速度。我们可以将粒子视作在冰面上滑行的冰球。每当它沿着表面最陡的部分下降时,它会累积继续在该方向上滑行的速度,直到其开始向上滑动为止。
-
虽然随机梯度下降仍然是非常受欢迎的优化方法,但其学习过程有时会很慢。动量方法 (Polyak, 1964) 旨在加速学习,特别是处理高曲率、小但一致的梯度,或是带噪声的梯度。动量算法积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。动量的效果。动量的主要目的是解决两个问题:Hessian 矩阵的病态条件和随机梯度的方差。我们通过此图说明动量如何克服这两个问题的第一个。等高线描绘了一个二次损失函数(具有病态条件的 Hessian 矩阵)。横跨轮廓的红色路径表示动量学习规则所遵循的路径,它使该函数最小化。我们在该路径的每个步骤画一个箭头,表示梯度下降将在该点采取的步骤。我们可以看到,一个病态条件的二次目标函数看起来像一个长而窄的山谷或具有陡峭边的峡谷。动量正确地纵向穿过峡谷,而普通的梯度步骤则会浪费时间在峡谷的窄轴上来回移动。比较图 4.6 ,它也显示了没有动量的梯度下降的行为。
-
学习率可通过试验和误差来选取,通常最好的选择方法是监测目标函数值随时间变化的学习曲线。与其说是科学,这更像是一门艺术,我们应该谨慎地参考关于这个问题的大部分指导。使用线性策略时,需要选择的参数为 ϵ0,ϵτ,τ。通常 τ 被设为需要反复遍历训练集几百次的迭代次数。通常 ϵτ 应设为大约 ϵ0 的 1%。主要问题是如何设置 ϵ0。若 ϵ0 太大,学习曲线将会剧烈振荡,代价函数值通常会明显增加。温和的振荡是良好的,容易在训练随机代价函数(例如使用 Dropout 的代价函数)时出现。如果学习率太小,那么学习过程会很缓慢。如果初始学习率太低,那么学习可能会卡在一个相当高的代价值。通常,就总训练时间和最终代价值而言,最优初始学习率的效果会好于大约迭代 100 次左右后最佳的效果。因此,通常最好是检测最早的几轮迭代,选择一个比在效果上表现最佳的学习率更大的学习率,但又不能太大导致严重的震荡。
-
梯度下降和基本上所有的可以有效训练神经网络的学习算法,都是基于局部较也许能计算目标函数的一些性质,如近似的有偏梯度或正确方向估计的方差。在这些情况下,难以确定局部下降能否定义通向有效解的足够短的路径,但我们并不能真的遵循局部下降的路径。目标函数可能有诸如病态条件或不连续梯度的问题,使得梯度为目标函数提供较好近似的区间非常小。在这些情况下,步长为 ϵ 的局部下降可能定义了到达解的合理的短路经,但是我们只能计算步长为 δ ≪ ϵ 的局部下降方向。在这些情况下,局部下降或许能定义通向解的路径,但是该路径包含很多次更新,因此遵循该路径会带来很高的计算代价。有时,比如说当目标函数有一个宽而平的区域,或是我们试图寻求精确的临界点(通常来说后一种情况只发生于显式求解临界点的方法,如牛顿法)时,局部信息不能为我们提供任何指导。在这些情况下,局部下降完全无法定义通向解的路径。在其他情况下,局部移动可能太过贪心,朝着下坡方向移动,却和所有可行解南辕北辙,如图8.4所示,或者是用舍近求远的方法来求解问题,目前,我们还不了解这些问题中的哪一个与神经网络优化中的难点最相关,这是研究领域的热点方向。小更新。之前的小节主要集中于为何这些局部范围更新的正确方向难以计算。
-
迄今为止,我们讨论的许多问题都是关于损失函数在单个点的性质——若 J(θ)是当前点 θ 的病态条件,或者 θ 在悬崖中,或者 θ 是一个下降方向不明显的鞍点,那么会很难更新当前步。如果该方向在局部改进很大,但并没有指向代价低得多的遥远区域,那么我们有可能在单点处克服以上所有困难,但仍然表现不佳。大多数优化研究的难点集中于训练是否找到了全局最小点、局部极小点或是鞍点,但在实践中神经网络不会到达任何一种临界点。图 8.1 表明神经网络通常不会到达梯度很小的区域。甚至,这些临界点不一定存在。例如,损失函数 − log p(y | x; θ)可以没有全局最小点,而是当随着训练模型逐渐稳定后,渐近地收敛于某个值。对于具有离散的 y 和 softmax 分布 p(y | x) 的分类器而言,若模型能够正确分类训练集上的每个样本,则负对数似然可以无限趋近但不会等于零。同样地,实值模型p(y | x) = N (y; f(θ), β−1) 的负对数似然会趋向于负无穷——如果 f(θ) 能够正确预测所有训练集中的目标 y,学习算法会无限制地增加 β。给出了一个失败的例子,即使没有局部极小值和鞍点,该例还是不能从局部优化中找到一个良好的代价函数值。
-
大多数优化算法的先决条件都是我们知道精确的梯度或是Hessian 矩阵。在实践中,通常这些量会有噪声,甚至是有偏的估计。几乎每一个深度学习算法都需要基于采样的估计,至少使用训练样本的小批量来计算梯度。在其他情况,我们希望最小化的目标函数实际上是难以处理的。当目标函数不可解时,通常其梯度也是难以处理的。在这种情况下,我们只能近似梯度。这些问题主要出现在第三部分中更高级的模型中。例如,对比散度是用来近似玻尔兹曼机中难以处理的对数似然梯度的一种技术。各种神经网络优化算法的设计都考虑到了梯度估计的缺陷。我们可以选择比真实损失函数更容易估计的代理损失函数来避免这个问题。
-
多层神经网络通常存在像悬崖一样的斜率较大区域,如图8.3所示。这是由于几个较大的权重相乘导致的。遇到斜率极大的悬崖结构时,梯度更新会很大程度地改变参数值,通常会完全跳过这类悬崖结构。不管我们是从上还是从下接近悬崖,情况都很糟糕,但幸运的是我们可以用使用介绍的启发式梯度截断(gradient clipping)来避免其严重的后果。其基本想法源自梯度并没有指明最佳步长,只说明了在无限小区域内的最佳方向。当传统的梯度下降算法提议更新很大一步时,启发式梯度截断会干涉来减小步长,从而使其不太可能走出梯度近似为最陡下降方向的悬崖区域。悬崖结构在循环神经网络的代价函数中很常见,因为这类模型会涉及到多个因子的相乘,其中每个因子对应一个时间步。因此,长期时间序列会产生大量相乘。
-
对于牛顿法而言,鞍点显然是一个问题。梯度下降旨在朝“下坡”移动,而非明确寻求临界点。而牛顿法的目标是寻求梯度为零的点。如果没有适当的修改,牛顿法就会跳进一个鞍点。高维空间中鞍点的激增或许解释了在神经网络训练中为什么二阶方法无法成功取代梯度下降。Dauphin et al. (2014) 介绍了二阶优化的无鞍牛顿法(saddle-free Newton method),并表明和传统算法相比有显著改进。二阶方法仍然难以扩展到大型神经网络,但是如果这类无鞍算法能够扩展的话,还是很有希望的。除了极小值和鞍点,还存在其他梯度为零的点。例如从优化的角度看与鞍点很相似的极大值,很多算法不会被吸引到极大值,除了未经修改的牛顿法。和极小值一样,许多种类的随机函数的极大值在高维空间中也是指数级稀少。
-
鞍点激增对于训练算法来说有哪些影响呢?对于只使用梯度信息的一阶优化算法而言,目前情况还不清楚。鞍点附近的梯度通常会非常小。另一方面,实验中梯度下降似乎可以在许多情况下逃离鞍点。Goodfellow et al. (2015) 可视化了最新神经网络的几个学习轨迹,给了一个例子。这些可视化显示,在突出的鞍点附近,代价函数都是平坦的,权重都为零。但是他们也展示了梯度下降轨迹能够迅速逸出该区间。Goodfellow et al. (2015) 也主张,应该可以通过分析来表明连续时间的梯度下降会逃离而不是吸引到鞍点,但对梯度下降更现实的使用场景来说,情况或许会有所不同。
-
当然,这个解释只能用于样本没有重复使用的情况。然而,除非训练集特别大,通常最好是多次遍历训练集。当多次遍历数据集更新时,只有第一遍满足泛化误差梯度的无偏估计。但是,额外的遍历更新当然会由于减小训练误差而得到足够的好处,以抵消其带来的训练误差和测试误差间差距的增加。随着数据集的规模迅速增长,超越了计算能力的增速,机器学习应用每个样本只使用一次的情况变得越来越常见,甚至是不完整地使用训练集。在使用一个非常大的训练集时,过拟合不再是问题,而欠拟合和计算效率变成了主要的顾虑。读者也可以参考 Bottou and Bousquet (2008a) 中关于训练样本数目增长时,泛化误差上计算瓶颈影响的讨论。
-
很多机器学习上的优化问题都可以分解成并行地计算不同样本上单独的更新。换言之,我们在计算小批量样本 X 上最小化 J(X) 的更新时,同时可以计算其他小批量样本上的更新。这类异步并行分布式方法将在进一步讨论。小批量随机梯度下降的一个有趣动机是,只要没有重复使用样本,它将遵循着真实泛化误差的梯度。很多小批量随机梯度下降方法的实现都会打乱数据顺序一次,然后多次遍历数据来更新参数。第一次遍历时,每个小批量样本都用来计算真实泛化误差的无偏估计。第二次遍历时,估计将会是有偏的,因为它重新抽取了已经用过的样本,而不是从和原先样本相同的数据生成分布中获取新的无偏的样本。我们不难从在线学习的情况中看出随机梯度下降最小化泛化误差的原因。这时样本或者小批量都是从数据流(stream)中抽取出来的。换言之,学习器好像是一个每次看到新样本的人,每个样本 (x, y) 都来自数据生成分布 pdata(x, y),而不是使用大小固定的训练集。这种情况下,样本永远不会重复;每次更新的样本是从分布pdata 中采样获得的无偏样本。
-
小批量是随机抽取的这点也很重要。从一组样本中计算出梯度期望的无偏估计要求这些样本是独立的。我们也希望两个连续的梯度估计是互相独立的,因此两个连续的小批量样本也应该是彼此独立的。很多现实的数据集自然排列,从而使得连续的样本之间具有高度相关性。例如,假设我们有一个很长的血液样本测试结果清单。清单上的数据有可能是这样获取的,头五个血液样本于不同时间段取自第一个病人,接下来三个血液样本取自第二个病人,再随后的血液样本取自第三个病人,等等。如果我们从这个清单上顺序抽取样本,那么我们的每个小批量数据的偏差都很大,因为这个小批量很可能只代表着数据集上众多患者中的某一个患者。在这种数据集中的顺序有很大影响的情况下,很有必要在抽取小批量样本前打乱样本顺序。对于非常大的数据集,如数据中心含有几十亿样本的数据集,我们每次构建小批量样本时都将样本完全均匀地抽取出来是不太现实的。幸运的是,实践中通常将样本顺序打乱一次,然后按照这个顺序存储起来就足够了。之后训练模型时会用到的一组组小批量连续样本是固定的,每个独立的模型每次遍历训练数据时都会重复使用这个顺序。然而,这种偏离真实随机采样的方法并没有很严重的有害影响。不以某种方式打乱样本顺序才会极大地降低算法的性能。
-
促使我们从小数目样本中获得梯度的统计估计的动机是训练集的冗余。在最坏的情况下,训练集中所有的 m 个样本都是彼此相同的拷贝。基于采样的梯度估计可以使用单个样本计算出正确的梯度,而比原来的做法少花了 m 倍时间。实践中,我们不太可能真的遇到这种最坏情况,但我们可能会发现大量样本都对梯度做出了非常相似的贡献。使用整个训练集的优化算法被称为批量(batch)或确定性(deterministic)梯度算法,因为它们会在一个大批量中同时处理所有样本。这个术语可能有点令人困惑,因为这个词 “批量”也经常被用来描述小批量随机梯度下降算法中用到的小批量样本。通常,术语 “批量梯度下降” 指使用全部训练集,而术语 “批量” 单独出现时指一组样本。例如,我们普遍使用术语 “批量大小” 表示小批量的大小。
-
有时,我们真正关心的损失函数(比如分类误差)并不能被高效地优化。例如,即使对于线性分类器而言,精确地最小化 0 − 1 损失通常是不可解的(复杂度是输入维数的指数级别)(Marcotte and Savard, 1992)。在这种情况下,我们通常会优化代理损失函数(surrogate loss function)。代理损失函数作为原目标的代理,还具备一些优点。例如,正确类别的负对数似然通常用作 0 − 1 损失的替代。负对数似然允许模型估计给定样本的类别的条件概率,如果该模型效果好,那么它能够输出期望最小分类误差所对应的类别。在某些情况下,代理损失函数比原函数学到的更多。例如,使用对数似然替代函数时,在训练集上的 0 − 1 损失达到 0 之后,测试集上的 0 − 1 损失还能持续下降很长一段时间。这是因为即使 0 − 1 损失期望是零时,我们还能拉开不同类别的距离以改进分类器的鲁棒性,获得一个更强壮的、更值得信赖的分类器,从而,相对于简单地最小化训练集上的平均 0 − 1 损失,它能够从训练数据中抽取更多信息。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中
热门标签