深度学习优化入门:Momentum、RMSProp 和 Adam

简介: 虽然局部极小值和鞍点会阻碍我们的训练,但病态曲率会减慢训练的速度,以至于从事机器学习的人可能会认为搜索已经收敛到一个次优的极小值。让我们深入了解什么是病态曲率。

虽然局部极小值和鞍点会阻碍我们的训练,但病态曲率会减慢训练的速度,以至于从事机器学习的人可能会认为搜索已经收敛到一个次优的极小值。让我们深入了解什么是病态曲率。

病态曲率

考虑以下损失曲线图。

image

如你所知,我们在进入一个以蓝色为标志的像沟一样的区域之前是随机的。这些颜色实际上代表了在特定点上的损失函数的值,红色代表最高的值,蓝色代表最低的值。

我们想要下降到最低点,因此,需要穿过峡谷。这个区域就是所谓的病态曲率。为了了解为何将其称为病态曲率,让我们再深入研究。放大了看,病态曲率就像这样...

image

病态曲率

要知道这里发生的事情并不难。梯度下降沿着峡谷的山脊反弹,向最小的方向移动的速度非常慢。这是因为山脊的曲线在 W1 方向上弯曲的更陡。

考虑山脊表面的 A 点。我们看到,梯度在这点可以分解为两个分量,一个沿着 W1 方向,另外一个沿着 W2 方向。如果 f 显著下降的唯一方向是低曲率的,那么优化可能会变得太慢而不切实际,甚至看起来完全停止,造成局部最小值的假象。

image

正常情况下,我们使用一个较慢的学习率来解决这种山脊间反弹的问题,正如上一篇关于梯度下降的文章所述。然而,这却产生了麻烦。

当我们接近最小值时,慢下来是有意义的,我们想要收敛于它。但是考虑一下梯度下降进入病态曲率的区域,以及到最小值的绝对距离。如果我们使用较慢的学习率,可能需要花费更多的时间才能到达极小值点。事实上,有研究论文报道过使用足够小的学习率来阻值山脊间的反弹可能导致参与者以为损失根本没有改善,从而放弃训练。

如果 f 显著下降的唯一方向是低曲率的,那么优化可能会变得太慢而不切实际,甚至看起来完全停止,造成局部最小值的假象。

也许我们想要的是能让我们慢慢进入病态曲率底部的平坦区域,然后在最小值的方向上加速。二阶导数可以帮助我们做到这一点。

牛顿法

梯度下降是一阶优化方法。它只考虑损失函数的一阶导数,而不考虑更高阶的导数。这基本上意味着它不知道损失函数的曲率。它只能说明损失是否下降以及下降的速度,而不能区分曲线是平坦的,向上的,还是向下的。

image

之所以会发生这种现象,是因为梯度下降只关心梯度,就好像上图中红色的点,三个曲线在这一点上的梯度是相同的。如何解决?使用二阶导数,或者考虑梯度变化的速率。

一个非常流行的可以使用二阶导数的技术,可以解决我们的问题,这个方法称为牛顿法。 如果表面变得不那么陡峭,那么学习步骤就会减少。

牛顿法可以提供一个理想的步长,在梯度方向上移动。 由于我们现在有了关于损失表面曲率的信息,所以可以选择步长,而不是用病态曲率来超过该区域的极限。

牛顿法通过计算 Hessian 矩阵来实现,Hessian 矩阵是损失函数的二阶导数组成的权值组合。我所说的权值组合,如下所示。

image

Hessian 矩阵在一个大矩阵中计算所有这些梯度。

image

Hessian 矩阵给出了一个点的损失曲面曲率的估计。一个损失的表面可以有一个正曲率,这意味着当我们移动时,表面会迅速变得不那么陡峭。如果我们有一个负曲率,这意味着当我们移动时,曲面变得越来越陡。

image

注意,如果这一步是负的,那就意味着我们可以使用任意的步骤。换句话说,我们可以切换回原来的算法。这对应于下面的情况,梯度变得越来越陡。

image

然而,如果梯度变得不那么陡峭,我们可能会走向一个处于病态曲率底部的区域。在这里,牛顿法给了我们一个修正的学习步骤,正如你所看到的,它与曲率成反比,或者曲面变得越来越小。

如果表面变得不那么陡峭,那么学习步骤就会减少。

为什么我们很少使用牛顿法?

看到公式中的 Hessian 矩阵了吗?Hessian 矩阵需要计算损失函数对所有权值组合的梯度。在组合已知的情况下,要求的值的数量约是神经网络中权值数量的平方。

对于现代的网络来说,通常都含有数十亿个参数,使用高阶的优化方法很难计算 10 亿的平方数量级的梯度。

二阶优化是关于梯度本身如何变化的信息。虽然我们不能精确的计算它,但是我们可以遵循启发式方式,以指导我们根据之前的梯度进行优化

Momentum

与 SDG 结合使用的一种常用方法叫做 Momentum。Momentum 不仅会使用当前梯度,还会积累之前的梯度以确定走向。 梯度下降方程修改如下。

image

第一个式子有两项。第一项是上一次迭代的梯度,乘上一个被称为「Momentum 系数」的值,可以理解为取上次梯度的比例。

image

我们设 v 的初始为 0,动量系数为 0.9,那么迭代过程如下:

image

我们可以看到之前的梯度会一直存在后面的迭代过程中,只是越靠前的梯度其权重越小。(说的数学一点,我们取的是这些梯度步长的指数平均)

这对我们的例子有什么帮助呢?观察下图,注意到大部分的梯度更新呈锯齿状。我们也注意到,每一步的梯度更新方向可以被进一步分解为 w1 和 w2 分量。如果我们单独的将这些向量求和,沿 w1 方向的的分量将抵消,沿 w2 方向的分量将得到加强。

image

对于权值更新来说,将沿着 w2 方向进行,因为 w1 方向已抵消。这就可以帮助我们快速朝着极小值方向更新。所以,动量也被认为是一种抑制迭代过程中锯齿下降问题的技术。

这种方法还可以提高收敛速度,但如果超过极小值,可能需要使用模拟退化算法

我们通常初始化动量为 0.5,并且在一定循环次数后逐渐退火到 0.9

RMSProp

RMSProp 或均方根反向传播算法有着有趣的历史。 它是由传奇人物Geoffrey Hinton提出的,当时只是在课堂上是随意提出的一个想法。

RMSProp 算法也旨在抑制梯度的锯齿下降,但与动量相比, RMSProp 不需要手动配置学习率超参数,由算法自动完成。 更重要的是,RMSProp 可以为每个参数选择不同的学习率。

在 RMSprop 算法中,每次迭代都根据下面的公式完成。 它是对每个参数单独迭代。

image

让我们来看看上面的方程都在做什么

在第一个方程中,我们计算一个梯度平方的指数平均值。由于我们需要针对每个梯度分量分别执行平方,所以此处的梯度向量 Gt 对应的是正在更新的参数方向的梯度各个方向的投影分量。

为此,我们将上一次更新的超参数乘希腊字母 nu。然后将当前的梯度平方乘(1-nu)。最后我们将他们加到一起得到这一时刻的指数平均。

我们之所以使用指数平均是因为在 momentum 例子中看到的那样,它可以使得间隔和权重成正比例变化。实际上使用「指数」一词是因为前面项的权重呈指数级下降(最近的项权重是 ρ,次近的 ρ 方,然后是 ρ 立方,以此类推)。

注意我们表示病态曲率的图,梯度沿 w1 方向的分量比沿 w2 方向的分量大的多。我们以平方的方式将 w1 和 w2 叠加,w1 不会发生抵消,w2 在指数平均后会更小。

第二个方程定义了步长,我们沿负梯度方向移动,但是步长受到指数平均值的影响。我们设置了一个初始学习率 eta,用它除指数平均值。在我们的例子中,因为 w1 平均后比 w2 大很多,所以 w1 的迭代步长就比 w2 要小很多。因此这将避免我们在山脊之间跳跃而朝着正确的方向移动。

第三个方程是更新操作,超参数 p 通常选为 0.9,但是你可能需要调整它。方程 2 中的 epsilon 是为了防止被 0 除,通常取 1e-10

还要注意的是,RMSProp 隐含的执行模拟退火,假设我们正朝着极小值前进并且我们想要放慢速度避免越过极小值。当步长很大时 RMSProp 将自动减小梯度更新的步长(大步长容易越过极小值点)。

Adam

到目前为止,我们已经对比了 RMSProp 和 Momentum 两种方法。尽管 Momentum 加速了我们对极小值方向的搜索,但 RMSProp 阻碍了我们在振荡方向上的搜索。

Adam 或 Adaptive Moment Optimization 算法将 Momentum 和 RMSProp 两种算法结合了起来。 这里是迭代方程。

image

我们计算了每个梯度分量的指数平均和梯度平方指数平均(方程 1、方程 2)。为了确定迭代步长我们在方程 3 中用梯度的指数平均乘学习率(如 Momentum 的情况)并除以根号下的平方指数平均(如 Momentum 的情况),然后方程 4 执行更新步骤

超参数 beta1 一般取 0.9 左右,beta_2 取 0.99。Epsilon 一般取1e-10。

结论

在这篇文章中,我们介绍了 3 种基于梯度下降法来解决病态曲率同时加快搜索速度的方法。 这些方法通常称为「自适应方法」,因为学习步骤会根据等高线拓扑进行调整。

在上面的三种方法中,尽管 Adam 算法在论文中被认为是最有前景的算法,但是 Momentum 方法貌似更主流一些。实践结果表明,在给定损失函数的情况下,三种算法都能收敛到不同的局部最优极小值。但是用带 Momentum 的 SGD 算法比 Adam 算法找到的极小值更加平坦,而自适应方法往往会收敛到更加尖锐的极小值点。平坦的极小值通常好于尖锐的极小值。

image

尽管自适应算法有助于我们在复杂的损失函数上找到极小值点,但这还不够,特别是在当前网络越来越来越深的背景下。除了研究更好的优化方法之外,还有一些研究致力于构建产生更平滑损失函数的网络架构。Batch-Normalization 和残差连接是其中的解决方法,我们也会尽快在博客上发布有关的详细介绍。欢迎随时在评论中提问。

原文发布时间为:2018-07-20
本文来自云栖社区合作伙伴“机器学习算法与Python学习”,了解相关信息可以关注“机器学习算法与Python学习

相关文章
|
1天前
|
机器学习/深度学习 算法 调度
深度学习|改进两阶段鲁棒优化算法i-ccg
深度学习|改进两阶段鲁棒优化算法i-ccg
|
1天前
|
机器学习/深度学习 数据处理 网络架构
基于深度学习的图像识别优化策略
【4月更文挑战第30天】 在当前的计算机视觉领域,深度学习已成为推动图像识别技术革新的核心动力。本文旨在探讨并提出一系列优化策略,以增强现有深度神经网络模型在处理复杂图像数据时的性能和效率。通过分析网络架构、训练过程和数据处理流程,我们提出了改进的模型正则化方法、高效的训练技巧以及针对特定问题的适应性调整。这些策略不仅在理论上具有创新性,而且在实践中已被证明能够显著提高模型的准确率和泛化能力,为图像识别领域的研究与应用提供了新的视角和技术路径。
|
1天前
|
机器学习/深度学习 自然语言处理 算法
利用深度学习优化图像识别精度的策略
【5月更文挑战第15天】 在计算机视觉领域,图像识别的精确度直接关系到后续处理的效果与可靠性。本文旨在探讨如何通过深度学习技术提升图像识别任务的精度。首先,文中介绍了卷积神经网络(CNN)的基础结构及其在图像识别中的应用;然后,详细分析了数据增强、网络结构优化、正则化方法和注意力机制等策略对提高模型性能的作用;最后,通过实验验证了所提策略的有效性,并讨论了未来可能的研究方向。本文不仅为图像识别领域的研究者提供了实用的优化策略,也为相关应用的开发者指明了提升系统性能的可能途径。
|
1天前
|
机器学习/深度学习 自动驾驶 算法
利用深度学习优化图像识别在自动驾驶系统中的应用
【5月更文挑战第15天】 随着自动驾驶技术的不断进步,图像识别作为其核心技术之一,对准确性和实时性的要求日益提高。本文旨在探讨如何通过深度学习算法优化图像识别流程,进而提升自动驾驶系统的整体性能。文中首先回顾了当前自动驾驶领域中图像识别面临的挑战,接着介绍了几种先进的深度学习模型及其在图像处理中的应用,最后提出了一个结合这些模型的优化框架,并对其潜在的改进效果进行了分析。
|
1天前
|
机器学习/深度学习 人工智能 算法
构建高效AI系统:深度学习优化技术解析
【5月更文挑战第12天】 随着人工智能技术的飞速发展,深度学习已成为推动创新的核心动力。本文将深入探讨在构建高效AI系统中,如何通过优化算法、调整网络结构及使用新型硬件资源等手段显著提升模型性能。我们将剖析先进的优化策略,如自适应学习率调整、梯度累积技巧以及正则化方法,并讨论其对模型训练稳定性和效率的影响。文中不仅提供理论分析,还结合实例说明如何在实际项目中应用这些优化技术。
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
使用TensorFlow进行深度学习入门
【5月更文挑战第11天】本文引导读者入门TensorFlow深度学习,介绍TensorFlow——Google的开源机器学习框架,用于处理各种机器学习问题。内容包括TensorFlow安装(使用pip)、核心概念(张量、计算图和会话)以及构建和训练简单线性回归模型的示例。通过这个例子,读者可掌握TensorFlow的基本操作,包括定义模型、损失函数、优化器以及运行会话。
|
1天前
|
机器学习/深度学习 边缘计算 算法
基于深度学习的图像识别优化策略研究
【5月更文挑战第8天】 本研究旨在探索提高深度神经网络在图像识别任务中性能的有效策略。通过分析现有模型的局限性,本文提出了一系列优化技术,包括数据增强、网络结构调整和损失函数改进。实验结果表明,这些策略显著提升了模型的准确率和泛化能力,尤其在处理高复杂度图像时表现突出。此外,针对计算资源消耗问题,我们还探讨了模型压缩和加速方法,以期实现高效率的实时图像识别应用。
|
1天前
|
机器学习/深度学习 边缘计算 算法
基于深度学习的图像识别优化策略研究
【5月更文挑战第7天】 在计算机视觉领域,图像识别作为核心任务之一,其性能的提升一直是研究的热点。随着深度学习技术的不断发展,卷积神经网络(CNN)已成为图像识别的主要工具。然而,模型复杂度和计算资源的大量需求限制了其在实际应用中的推广。本文围绕减少模型参数、提高运算效率和保持识别准确率等方面展开,提出了一种结合深度可分离卷积与注意力机制的图像识别优化策略。通过实验验证,该策略在多个标准数据集上取得了与传统卷积网络相媲美的结果,同时显著降低了参数数量和计算成本。
29 4
|
1天前
|
机器学习/深度学习 人工智能 开发框架
构建未来:基于深度学习的图像识别优化策略
【5月更文挑战第6天】随着人工智能技术的飞速发展,深度学习在图像识别领域已经取得了显著的成就。然而,为了进一步提升系统的识别效率和准确性,本文提出了一种结合最新神经网络架构与数据增强技术的图像识别优化策略。通过引入自适应学习率调整机制和混合精度训练方法,该策略旨在降低模型训练过程中的时间成本,同时提高模型在复杂环境下的泛化能力。
|
1天前
|
机器学习/深度学习 监控 算法
利用深度学习优化图像识别准确性的探索
【5月更文挑战第6天】 在数字图像处理领域,随着数据量的激增和算法复杂度的提升,传统图像识别技术面临巨大挑战。本文通过构建一个基于深度卷积神经网络(CNN)的模型,探讨了如何提高图像识别的准确性。我们详细分析了网络结构、激活函数和优化器的选择对模型性能的影响,并通过实验验证了所提出方法的有效性。结果表明,采用适当的数据增强技术和调整网络参数,可以显著提升模型在复杂数据集上的识别精度。