深度学习第八章深度模型中的优化

深度学习算法在许多情况下都涉及到优化。例如,模型中的进行推断(如PCA)涉及到求解优化问题。我们经常使用解析优化去证明或设计算法。在深度学习涉及到的诸多优化问题中,最难的是神经网络训练。甚至是用几百台机器投入几天到几个月来解决单个神经网络训练问题,也是很常见的。因为这其中的优化问题很重要,代价也很高,因此研究者们开发了一组专门为此设计的优化技术。本章会介绍神经网络训练中的这些优化技术。
本章主要关注这一类特定的优化问题:寻找神经网络上的一组参数,它能显
著地降低代价函数J(o),该代价函数通常包括整个训练集上的性能评估和额外的正则化项。
学习和纯优化有什么不同
用于深度模型训练的优化算法与传统的优化算法在几个方面有所不同。机器学习通常是间接作用的。在大多数机器学习问题中,我们关注某些性能度量P,其定义于测试集上并且可能是不可解的。因此,我们只是间接地优化P。我们希望通过降低代价函数J(o) 来提高P。这一点与纯优化不同,纯优化最小化目标J 本身。训练深度模型的优化算法通常也会包括一些针对机器学习目标函数的特定结构进行的特化。
图片说明
经验风险最小化
机器学习算法的目标是降低式(8.2) 所示的期望泛化误差。这个数据量被称为风险(risk)。在这里,我们强调该期望取自真实的潜在分布pdata。如果我们知道了真实分布pdata(x; y),那么最小化风险变成了一个可以被优化算法解决的优化问题。然而,我们遇到的机器学习问题,通常是不知道pdata(x; y),只知道训练集中的样本。将机器学习问题转化回一个优化问题的最简单方法是最小化训练集上的期望损失。这意味着用训练集上的经验分布^p(x; y) 替代真实分布p(x; y)。现在,我们将最小化经验风险(empirical risk):
图片说明
图片说明
***损失函数和提前终止
有时,我们真正关心的损失函数(比如分类误差)并不能被高效地优化。例如,即使对于线性分类器而言,精确地最小化0􀀀1 损失通常是不可解的(复杂度是输入维数的指数级别)(Marcotte and Savard, 1992)。在这种情况下,我们通常会优化***损失函数(surrogate loss function)。***损失函数作为原目标的***,还具备一些优点。例如,正确类别的负对数似然通常用作0􀀀1 损失的替代。负对数似然允许模型估计给定样本的类别的条件概率,如果该模型效果好,那么它能够输出期望最小分类误差所对应的类别。
图片说明
批量算法和小批量算法:
使用整个训练集的优化算法被称为批量(batch)或确定性(deterministic)梯度算法,因为它们会在一个大批量中同时处理所有样本。这个术语可能有点令人困惑,因为这个词“批量’’ 也经常被用来描述小批量随机梯度下降算法中用到的小批量样本。通常,术语“批量梯度下降’’ 指使用全部训练集,而术语“批量’’ 单独出现时指一组样本。例如,我们普遍使用术语“批量大小’’ 表示小批量的大小。
每次只使用单个样本的优化算法有时被称为随机(stochastic)或者在线(on-line)算法。术语“在线’’ 通常是指从连续产生样本的数据流中抽取样本的情况,而不是从一个固定大小的训练集中遍历多次采样的情况。
图片说明
神经网络优化中的挑战
1、病态
图片说明
2、局部极小值
凸优化问题的一个突出特点是其可以简化为寻找一个局部极小点的问题。任何一个局部极小点都是全局最小点。有些凸函数的底部是一个平坦的区域,而不是单一的全局最小点,但该平坦区域中的任意点都是一个可以接受的解。优化一个凸问题时,若发现了任何形式的临界点,我们都会知道已经找到了一个不错的可行解。
3、高原、鞍点和其他平坦区域
对于很多高维非凸函数而言,局部极小值(以及极大值)事实上都远少于另一类梯度为零的点:鞍点。鞍点附近的某些点比鞍点有更大的代价,而其他点则有更小的代价。在鞍点处,Hessian 矩阵同时具有正负特征值。位于正特征值对应的特征向量方向的点比鞍点有更大的代价,反之,位于负特征值对应的特征向量方向的点有更小的代价。我们可以将鞍点视为代价函数某个横截面上的局部极小点,同时也可以视为代价函数某个横截面上的局部极大点。
图片说明
4、悬崖和梯度爆炸
多层神经网络通常存在像悬崖一样的斜率较大区域,如图8.3 所示。这是由于几个较大的权重相乘导致的。遇到斜率极大的悬崖结构时,梯度更新会很大程度地改变参数值,通常会完全跳过这类悬崖结构。
图片说明
5、长期依赖
当计算图变得极深时,神经网络优化算***面临的另外一个难题就是长期依
赖问题——由于变深的结构使模型丧失了学习到先前信息的能力,让优化变得极其困难。深层的计算图不仅存在于前馈网络,还存在于之后介绍的循环网络中(在第十章中描述)。因为循环网络要在很长时间序列的各个时刻重复应用相同操作来构建非常深的计算图,并且模型参数共享,这使问题更加凸显。
6、非精确梯度
大多数优化算法的先决条件都是我们知道精确的梯度或是Hessian 矩阵。在实践中,通常这些量会有噪声,甚至是有偏的估计。几乎每一个深度学习算法都需要基于采样的估计,至少使用训练样本的小批量来计算梯度。
7、局部和全局结构间的弱对应
局部和全局结构间的弱对应
迄今为止,我们讨论的许多问题都是关于损失函数在单个点的性质——若o(o)是当前点o 的病态条件,或者 在悬崖中,或者o是一个下降方向不明显的鞍点,那么会很难更新当前步。如果该方向在局部改进很大,但并没有指向代价低得多的遥远区域,那么我们有可能在单点处克服以上所有困难,但仍然表现不佳。
图片说明
8、优化的理论限制
一些理论结果仅适用于神经网络的单元输出离散值的情况。然而,大多数神经网络单元输出光滑的连续值,使得局部搜索求解优化可行。一些理论结果表明,存在某类问题是不可解的,但很难判断一个特定问题是否属于该类。其他结果表明,寻找给定规模的网络的一个可行解是很困难的,但在实际情况中,我们通过设置更多参数,使用更大的网络,能轻松找到可接受的解。此外,在神经网络训练中,我们通常不关注某个函数的精确极小点,而只关注将其值下降到足够小以获得一个良好的泛化误差。对优化算法是否能完成此目标进行理论分析是非常困难的。因此,研究优化算法更现实的性能上界仍然是学术界的一个重要目标。、
基本算法
1、随机梯度下降
随机梯度下降(SGD)及其变种很可能是一般机器学习中应用最多的优化算法,特别是在深度学习中。如第8.1.3 节中所讨论的,按照数据生成分布抽取m 个小批量(独立同分布的)样本,通过计算它们梯度均值,我们可以得到梯度的无偏估计。
图片说明
2、动量
图片说明
图片说明
3、Nesterov 动量
图片说明
参数初始化策略
有些优化算法本质上是非迭代的,只是求解一个解点。有些其它优化算法本质上是迭代的,但是应用于这一类的优化问题时,能在可接受的时间内收敛到可接受的解,并且与初始值无关。深度学习训练算法通常没有这两种奢侈的性质。深度学习模型的训练算法通常是迭代的,因此要求使用者指定一些开始迭代的初始点。此外,训练深度模型是一个足够困难的问题,以致于大多数算法都很大程度地受到初始化选择的影响。初始点能够决定算法是否收敛,有些初始点十分不稳定,使得该算***遭遇数值困难,并完全失败。当学习收敛时,初始点可以决定学习收敛得多快,以及是否收敛到一个代价高或低的点。此外,差不多代价的点可以具有区别极大的泛化误差,初始点也可以影响泛化。
图片说明
自适应学习率算法
图片说明
1、AdaGrad
图片说明
图片说明
2、RMSProp
图片说明
3、Adam
图片说明
最好被看作结合RMSProp 和具有一些重要区别的动量的变种。首先,在Adam 中,动量直接并入了梯度一阶矩(指数加权)的估计。将动量加入RMSProp 最直观的方法是将动量应用于缩放后的梯度。结合缩放的动量使用没有明确的理论动机。其次,Adam 包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩的估计(算法8.7 )。RMSProp 也采用了(非中心的)二阶矩估计,然而缺失了修正因子。因此,不像Adam,RMSProp 二阶矩估计可能在训练初期有很高的偏置。Adam 通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。
4 选择正确的优化算法
图片说明
图片说明
二阶近似方法
图片说明
1 牛顿法
图片说明
图片说明
2 共轭梯度
共轭梯度是一种通过迭代下降的共轭方向(conjugate directions)以有效避免Hessian 矩阵求逆计算的方法。这种方法的灵感来自于对最速下降方法弱点的仔细研究(详细信息请查看第4.3 节),其中线搜索迭代地用于与梯度相关的方向上。图8.6 说明了该方法在二次碗型目标中如何表现的,是一个相当低效的来回往复,锯齿形模式。这是因为每一个由梯度给定的线搜索方向,都保证正交于上一个线搜索方向。
图片说明
共轭梯度算法如算法8.9 所示。
图片说明
3 BFGS
图片说明
优化策略和元算法
1 批标准化
批标准化(Ioffe and Szegedy, 2015) 是优化深度神经网络中最激动人心的最新创新之一。实际上它并不是一个优化算法,而是一个自适应的重参数化的方法,试图解决训练非常深的模型的困难。
2 坐标下降
某些情况下,将一个优化问题分解成几个部分,可以更快地解决原问题。如
果我们相对于某个单一变量xi 最小化f(x),然后相对于另一个变量xj 等等,反复循环所有的变量,我们会保证到达(局部)极小值。这种做法被称为坐标下降(coordinate descent),因为我们一次优化一个坐标。更一般地, 块坐标下降(blockcoordinate descent)是指对于某个子集的变量同时最小化。术语“坐标下降’’ 通常既指块坐标下降,也指严格的单个坐标下降。
3 Polyak 平均
图片说明
图片说明
4 监督预训练
有时,如果模型太复杂难以优化,或是如果任务非常困难,直接训练模型来解决特定任务的挑战可能太大。有时训练一个较简单的模型来求解问题,然后使模型更复杂会更有效。训练模型来求解一个简化的问题,然后转移到最后的问题,有时也会更有效些。这些在直接训练目标模型求解目标问题之前,训练简单模型求解简化问题的方法统称为预训练(pretraining)。
贪心算法(greedy algorithm)将问题分解成许多部分,然后独立地在每个部分求解最优值。令人遗憾的是,结合各个最佳的部分不能保证得到一个最佳的完整解。然而,贪心算法计算上比求解最优联合解的算法高效得多,并且贪心算法的解在不是最优的情况下,往往也是可以接受的。贪心算法也可以紧接一个精调(fine-tuning)阶段,联合优化算法搜索全问题的最优解。使用贪心解初始化联合优化算法,可以极大地加速算法,并提高寻找到的解的质量。
图片说明
图片说明
5 设计有助于优化的模型
改进优化的最好方法并不总是改进优化算法。相反,深度模型中优化的许多改进来自于设计易于优化的模型。原则上,我们可以使用呈锯齿非单调模式上上下下的激活函数,但是,这将使优化极为困难。在实践中,选择一族容易优化的模型比使用一个强大的优化算法更重要。神经网络学习在过去30 年的大多数进步主要来自于改变模型族,而非改变优化过程。1980 年代用于训练神经网络的带动量的随机梯度下降,仍然是现代神经网络应用中的前沿算法。
6 延拓法和课程学习
图片说明

全部评论

相关推荐

Ncsbbss:又想干活又想要工资,怎么什么好事都让你占了
点赞 评论 收藏
分享
05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务