[机器学习基础二] 深度学习优化器一览

Posted 朴素人工智能

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[机器学习基础二] 深度学习优化器一览相关的知识,希望对你有一定的参考价值。

本文为机器学习基础 第二篇

Hello大家好,本期将和大家一起分享和讨论一下深度学习中的一个基础组件:Optimizer,也就是优化器。这是一个在炼丹过程中容易被忽视,但其实又非常重要的组件。接下来几分钟里,让我们重温优化器的发展和应用,希望对大家有所帮助。本期是机器学习基础三篇中的第二篇,希望大家多多支持~

快速传送门     

什么是优化器

概括地来说,优化器其实是一种算法,它在模型优化过程中,动态地调整梯度的大小和方向,使模型能够收敛到更好的位置,或者用更快的速度进行收敛。

优化器的起源

在微积分中,对多元函数的参数 θ 求偏导数,把求得的各个参数的导数以向量的形式写出来就是梯度。梯度就是函数变化最快的方向。梯度下降法是迭代法的一种,在求解机器学习算法的模型参数 θ 时,即无约束问题时,梯度下降是最常采用的方法之一。

我们可以把模型的参数空间想象成是一个曲面,曲面的高度是整体上模型预测值与真实值的误差。我们的目的就是找到整个曲面的最低点,这样我们其实就找到了模型参数的最优点。梯度下降是一个常用方法,它让参数朝着梯度下降最大的方向去变化。

假设模型参数为 θ,损失函数为 J(θ) ,损失函数 J(θ) 关于参数 θ 的偏导数,也就是梯度为 θJ(θ) ,学习率为 α ,则使用梯度下降法更新参数为:

批量梯度下降法BGD

第一种很天然的想法是批量梯度下降法BGD(Batch Gradient Descent),其实就是每次用全量的数据对参数进行梯度下降。

假设训练样本总数为n,样本为 {(x1,y1), .... (xn, yn)} ,模型参数为 θ ,损失函数为 J(θ) ,学习率为 α,则使用BGD更新参数为:

[机器学习基础二] 深度学习优化器一览

由上式可以看出,每进行一次参数更新,需要计算整个数据样本集,因此导致批量梯度下降法的速度会比较慢,尤其是数据集非常大的情况下,收敛速度就会非常慢,但是由于每次的下降方向为总体平均梯度,它可能得到的会是一个全局最优解。

随机梯度下降法SGD

但是上述的这种方案,因为效率和空间的限制基本是不可使用的,那么人们想到了对每个样本进行梯度下降。

随机梯度下降法SGD(Stochastic Gradient Descent),不像BGD每一次参数更新,需要计算整个数据样本集的梯度,而是每次参数更新时,仅仅选取一个样本 (xi, yi) 计算其梯度,参数更新公式为:

[机器学习基础二] 深度学习优化器一览

可以看到BGD和SGD是两个极端,SGD由于每次参数更新仅仅需要计算一个样本的梯度,训练速度很快,即使在样本量很大的情况下,可能只需要其中一部分样本就能迭代到最优解,由于每次迭代并不是都向着整体最优化方向,导致梯度下降的波动非常大,更容易从一个局部最优跳到另一个局部最优,准确度下降。

小批量梯度下降法

小批量梯度下降法就是结合BGD和SGD的折中,对于含有n个训练样本的数据集,每次参数更新,选择一个大小为m (m < n) 的mini-batch数据样本计算其梯度,其参数更新公式如下:

[机器学习基础二] 深度学习优化器一览

小批量梯度下降法即保证了训练的速度,又能保证最后收敛的准确率,目前的SGD已经默认是小批量梯度下降算法。不过它也有一定的问题,比如选择合适的learning rate比较困难 ,学习率太低会收敛缓慢,学习率过高会使收敛时的波动过大, 易收敛到局部最优。

动量优化法

于是学者想到了一些方法,解决上述问题,比如动量优化法。动量优化方法引入物理学中的动量思想,加速梯度下降。当我们将一个小球从山上滚下来,没有阻力时,它的动量会越来越大,但是如果遇到了阻力,速度就会变小,动量优化法就是借鉴此思想,使得梯度方向在不变的维度上,参数更新变快,梯度有所改变时,更新参数变慢,这样就能够加快收敛并且减少动荡。动量优化法比较代表性的有Momentum和Nesterov。

Momentum

momentum 算法思想:参数更新时在一定程度上保留之前更新的方向,同时又利用当前batch的梯度微调最终的更新方向,简言之就是通过积累之前的动量来加速当前的梯度。假设 mt 表示t时刻的动量, μ 表示动量因子,通常取值0.9或者近似值,在SGD的基础上增加动量,则参数更新公式如下

[机器学习基础二] 深度学习优化器一览

在梯度方向改变时,momentum能够降低参数更新速度,从而减少震荡;在梯度方向相同时,momentum可以加速参数更新, 从而加速收敛。总而言之,momentum能够加速SGD收敛,抑制震荡。

NAG(Nesterov accelerated gradient)

momentum保留了上一时刻的梯度 ▽θJ(θ) ,对其没有进行任何改变,NAG是momentum的改进,在梯度更新时做一个矫正,具体做法就是在当前的梯度 ▽θJ(θ) 上添加上一时刻的动量 μ* mt ,梯度改变为 ▽θJ(θ - u*mt)

[机器学习基础二] 深度学习优化器一览

[机器学习基础二] 深度学习优化器一览

首先,按照原来的更新方向更新一步(棕色线),然后在该位置计算梯度值(红色线),然后用这个梯度值修正最终的更新方向(绿色线)。上图中描述了两步的更新示意图,其中蓝色线是标准momentum更新路径。

自适应学习率优化算法

上述是动量优化法的思想,另一方面在机器学习中,学习率是一个非常重要的超参数,但是学习率是非常难确定的,虽然可以通过多次训练来确定合适的学习率,但是一般也不太确定多少次训练能够得到最优的学习率,属于玄学事件,对人为的经验要求比较高,所以是否存在一些策略自适应地调节学习率的大小,从而提高训练速度。目前的自适应学习率优化算法主要有:AdaGrad算法,Adam算法,AdaDelta算法等。

AdaGrad

定义参数:全局学习率 δ ; 一个极小的常量 ε ,通常取值10e-8, 目的是为了分母为0的处理; 梯度加速变量(gradient accumulation variable) r 。

[机器学习基础二] 深度学习优化器一览

从上式可以看出,r累积了t时刻前所有梯度g的平方和,那么其实g乘上的系数可以认为是一个约束项,随着迭代次数越来越多,平方和越来越大,系数越来越小,那么可以随着时间缩小梯度,使参数更新量减小。

Adadelta

Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值

[机器学习基础二] 深度学习优化器一览

Adadelta的特点是训练初中期,加速效果不错,加速比较快,但是训练后期由于没有累积的效应,所以经常会在局部最小值附近抖动。

Adam: adaptive Moment Estimation

Adam几乎是使用最为广泛的自适应学习率优化器了,它有自己的独到之处。在Adam中,动量直接并入了梯度的一阶矩计算。Adam的关键是偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩估计。β1 = 0.9, β2 = 0.999, ε = 1e-8。

[机器学习基础二] 深度学习优化器一览

其中,mt ,vt 分别是对梯度的一阶矩估计和二阶矩估计;带帽的是对他们的偏差校正,这样可以近似为对期望的无偏估计。以下是vt的表示和其期望的推导:

[机器学习基础二] 深度学习优化器一览

[机器学习基础二] 深度学习优化器一览

可以看到,t时刻的二阶矩的期望相对梯度平方的期望是有偏的,通过系数修正以后就无偏了,训练更加稳定。

所以,Adam梯度经过偏置校正后,每一次迭代学习率都有一个固定范围,使得参数比较平稳。结合了Adagrad善于处理稀疏梯度和AdaDelte善于处理非平稳目标的优点,为不同的参数计算不同的自适应学习率。同时,也适用于大多非凸优化问题——适用于大数据集和高维空间。

AdamW

Adam的论文最后提到,Adam非常鲁棒,广泛用于各种非凸优化问题。但是,后来的一些实验却渐渐发现带动量的SGD效果反而比复杂的Adam更好。17年末,人们发现,这可能是因为WeightDecay的施加。之前的实现,在Adam上实施的权重衰减似乎都是错误的,并提出了AdamW来修复。


红色部分是直接在梯度上施加L2正则,绿色的是在参数上实施权重的衰减,在SGD上两者是能够统一的,在Adam上两者是不一样的,形成了错误的改变。AdamW修正了这一点,使它的实验效果恢复了它的领先位置。

Adabound

SGD的问题是前期收敛速度慢。SGD前期收敛慢的原因:SGD在更新参数时对各个维度上梯度的放缩是一致的,并且在训练数据分布极不均时训练效果很差。而因为收敛慢的问题应运而生的自适应优化算法Adam、AdaGrad 等,但这些自适应的优化算法虽然可以在训练早期展现出快速的收敛速度,但其在测试集上的表现却经常会陷入停滞,并最终被 SGD 超过。

一些学者对Adam的这系列问题进行了分析,认为原因出在自适应方法训练后期不稳定的极端学习率。深入来看,自适应学习率训练到后期,学习率出现极端情况,更新参数时有些维度上学习率特别大,有些维度学习率特别小,导致效果受到影响。

所以后面又提出过Adabound算法,Adam和SGD都可以认为是它的特例,它在训练过程中用上下界去规范参数,对于SGD, 上界下界ηl = ηu = α, 对于Adam ηl = 0 and ηu = ∞。

现在很多研究都是将SGD和Adam结合来弥补两者各自的缺陷,但还没有具有颠覆性的算法出现改变优化器的格局。

未完待续

本期的机器学习知识就给大家分享到这里,感谢大家的阅读和支持,下期我们还会带来新的分享,敬请期待!

参考资料

1.https://zhuanlan.zhihu.com/p/55150256?utm_source=wechat_session&utm_medium=social&utm_oi=942087358187851776&utm_campaign=shareopn


预训练语言模型专题

快速传送门     
1-4: 、 、  、
5-8: 、 、 、[ ]
9-12: 、 、 、
13-16: 、 , 、
17-18: 、


以上是关于[机器学习基础二] 深度学习优化器一览的主要内容,如果未能解决你的问题,请参考以下文章

深度学习优化背后包含哪些数学知识?

深度学习优化背后的数学基础

深度学习,机器学习所涵盖的100多个基本概念总结

人工智能-机器学习-深度学习-概述

转载零基础入门深度学习-参考文献

转载零基础入门深度学习-参考文献