Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

Huiyuan Zhuo 思源编译

小改进,大飞跃:深度学习中的最小牛顿求解器

牛顿法等利用二阶梯度信息的方法在深度学习中很少有应用,我们更喜欢直接使用一阶梯度信息求解最优参数。本论文提出了一种新型基于二阶信息的最优化方法,它的内存占用与带动量的 SGD 一样小,但当收敛速度却比只使用一阶信息的最优化方法快。

1 引言

随机梯度下降(SGD)和反向传播 [9] 是现今深度网络训练的算法核心。深度学习的成功证明了这种组合的有效性,它已经成功地运用在各种具有大型数据集和极深网络的不同任务中。

然而,尽管 SGD 有很多优点,但这种一阶方法的收敛速度(就迭代次数而言)还有很大的改进区间。尽管单次 SGD 迭代的计算速度非常快并且在优化开始时有迅速的进展,但很快,优化就会进入一个缓慢提升的阶段。这可以归因于迭代进入了目标函数错误缩放的参数空间中。在这种情况下,快速的进展需要在参数空间内不同的方向上采用不同的步长,而 SGD 无法实现这种迭代。

诸如牛顿法及其变体的二阶方法根据目标函数的局部曲率重新调整梯度,从而消除了这个问题。对于 R 中的标量损失,这种调整采用 H−1J 的形式,其中 H 是黑塞矩阵(Hessian matrix;二阶导数)或者是目标空间中局部曲率的一个近似,J 是目标函数的梯度。事实上,它们可以实现局部尺度不变性,并在梯度下降停滞 [24] 的地方取得显著进展。尽管在其它领域它们是无可比拟的,但一些问题阻碍了它们在深度模型中的应用。首先,因为黑塞矩阵的参数数量以二次形式增长,且通常有着数百万的参数,故而对它求逆或存储它是不现实的。其次,由于随机抽样,任何黑塞矩阵的估计都必然产生噪声和病态的条件数,因而经典的求逆方法如共轭梯度对于黑塞矩阵是不稳健的。

在本文中,我们提出了一种新的算法,它可以克服这些困难并使得二阶优化适用于深度学习。我们特别展示了如何去避免存储黑塞矩阵或其逆矩阵的任何估计值。反之,我们将牛顿更新,即 H−1J 的计算看成是求解一个能通过梯度下降法求解的线性系统。通过交叉求解步骤和参数更新步骤,求解这个线性系统的成本会随着时间推移被摊销。此外,与共轭梯度法不同,梯度下降的选择使其对噪声稳健。我们提出的方法增加了很小的开销,因为一个黑塞矩阵向量积可通过两步自动微分的现代网络实现。有趣的是,我们证明了我们的方法等价于带有一个额外项的动量 SGD(也称为重球法),这个额外项能计算曲率。因此,我们将该方法命名为 CURVEBALL。与其他方法不同,我们方法的总内存占用与动量 SGD 一样小。

图 1:已知解决方案的问题。左:不同求解器的 Stochastic Rosenbrock 函数轨迹(较深的阴影区域表示较高的函数值)。右:针对轨迹图绘制的损失函数与迭代数之间的关系。

表 1:在小数据集上优化器的比较。对于每一个优化器,我们展示了解决问题所需迭代数的平均值 ± 标准差。对于随机 Rosenbrock 函数,U[λ1, λ2] 表示来自 U[λ1, λ2] 的噪声(详见 4.1)。

图 2:不同优化器在不同数据集和网络上的性能对比。在一系列实际设置下,包括大型数据集(ImageNet)、是否使用批量归一化和过度参数化的模型(ResNet),我们的方法似乎表现十分良好。

表 2:不同模型和优化方法的最佳百分比误差(训练/验证误差)。CURVEBALL λ 表示使用了重新调整的参数 λ(第 3 节)。括号内的数字表示带有额外 Dropout 正则化(比例 0.3)的验证误差。前 3 列在是在 CIFAR - 10 上训练的,第 4 列是在 ImageNet - 100 上训练的。

图 3:训练误差 vs. 训练时间(基于 CIFAR - 10 模型)。

论文:Small steps and giant leaps: Minimal Newton solvers for Deep Learning(小改进,大飞跃:深度学习中的最小牛顿求解器)

论文地址:https://arxiv.org/abs/1805.08095

我们提出了一种能直接替换现今深度学习求解器的快速二阶方法。与随机梯度下降法(SGD)比,它只需要在每次迭代时进行 2 次额外的前向自动微分操作,同时它的运算成本与 2 次标准前向传播相当且易于实现。我们的方法解决了现有二阶求解器长期存在的问题,即在每次迭代时需要对黑塞矩阵的近似精确求逆或使用共轭梯度法,而这个过程既昂贵又对噪声敏感。相反,我们提出保留逆黑塞矩阵投影梯度的单个估计,并在每次迭代时更新一次。这个估计值有着相同的维度,并与 SGD 中常用的动量变量相似。黑塞矩阵的估计是变动的。我们首先验证我们的方法—CurveBall 在一些已知闭式解的小问题(带噪声的 Rosenbrock 函数和退化的 2 层线性网络)上的有效性,而这是现今深度学习解释器仍在努力的地方。我们接着在 CIFAR、ImageNet 上训练一些大型模型,包括 ResNet,VGG-f 网络,我们的方法在没有调整超参数的情况下,表现出更快的收敛性。最后,所有的代码已经开源。

理论论文梯度下降牛津大学牛顿法
3
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

随机梯度下降技术

梯度下降(Gradient Descent)是遵循成本函数的梯度来最小化一个函数的过程。这个过程涉及到对成本形式以及其衍生形式的认知,使得我们可以从已知的给定点朝既定方向移动。比如向下朝最小值移动。 在机器学习中,我们可以利用随机梯度下降的方法来最小化训练模型中的误差,即每次迭代时完成一次评估和更新。 这种优化算法的工作原理是模型每看到一个训练实例,就对其作出预测,并重复迭代该过程到一定的次数。这个流程可以用于找出能导致训练数据最小误差的模型的系数。

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

动量技术

优化器的一种,是模拟物理里动量的概念,其在相关方向可以加速SGD,抑制振荡,从而加快收敛

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

推荐文章
暂无评论
暂无评论~