梯度下降(gradient descent)?

在讲解梯度下降优化算法时,首先需要了解什么是梯度下降。

梯度下降是执行优化的最流行算法之一,也是迄今为止最优化神经网络的最常用方法。 同时,每个最新的深度学习库都包含各种算法的实现 ,但是,这些算法通常用作黑盒优化器,因为很难对它们的优缺点进行实用的解释。

梯度下降是一种最小化目标函数的方法 Ĵ(θ),Ĵ(θ) 由模型的参数设置参数 θ通过在目标函数梯度的相反方向上更新参数 ∇θĴ(θ)。学习率η确定我们要达到(本地)最低要求所需采取的步骤。换句话说,我们遵循由下坡的目标函数创建的表面的坡度方向,直到到达山谷。

参考国外文献
  • 梯度下降主要解决无约束多元函数极值的常用方法,也可以解决某一类求最小或最大值的问题。
  • 梯度下降主要思想:沿负梯度(梯度【通常是参数的偏导数】的反方向)方向迭代找到极值。
  • 梯度下降公式:
[公式]

梯度下降算法的变体

  • 批量梯度下降法(Batch gradient descent)

特点:每次采用全部样本

优点:可以保证朝着梯度下降方向更新

缺点:缓慢,内存消耗严重,不能在线更新参数

对于凸误差面,批梯度下降可以保证收敛到全局最小值,对于非凸面,可以保证收敛到局部最小值。

  • 随机梯度下降法(Stochastic gradient descent)

特点:每次更新一个样本

优点:速度快,可在线更新参数

缺点:不能保证朝着梯度下降方向更新

对于非凸和凸优化,它们分别收敛到局部或全局最小值。

  • 小批量梯度下降(Mini-batch gradient descent)

两者的综合,一次更新一批样本

挑战

  • 怎么选择合适的学习速度
  • 怎么根据时间步来动态的改变学习率(样本方向)
  • 让不同的特征有不同的学习率(特征方向)
  • 怎样脱离局部最优,到达全局最优

梯度下降优化算法(gradient descent optimization algorithms)

  • Momentum

SGD在沟壑中难以导航,即在一个维度上表面弯曲比在另一个维度上陡峭得多的区域,这在局部最优值附近很常见。在这些情况下,SGD会在峡谷的山坡上振荡,而仅沿着底部朝着局部最优方向犹豫前进

Momentum(动量)是一种有助于在相关方向上加速SGD并抑制振荡的方法,如图所示。它通过添加一个分数来实现γ过去时间步的更新向量到当前更新向量:

SGD without momentum
SGD with momentum

  • Nag(Nesterov accelerated gradient)

然而,非常不令人满意的是,一个球从山上滚下来,盲目地跟随斜坡。我们希望有一个更聪明的球,这个球有一个去向的概念,以便在山坡再次变高之前知道它会减速。

Nag算法主要通过计算不等于当前参数的梯度来有效的向前预测参数的大概位置

  • Adagrad

一种基于梯度的优化算法,他让学习率去适应参数。(在时间步上的更改),即它学习率在不同时间随着参数的变化发生变化。

主要思想:通过设置一个矩阵,随着时间步的变化,矩阵会逐渐增加,通过除法让学习率在后时间步逐渐降低。

[公式]

  • RMSprop

对Adagrad的改进,解决后期梯度消失问题

主要思路:将矩阵累加时设置权重,使得后期的梯度按比例形式变化。

  • Adam

主要是RMSprop和momentum算法的融合

  • AdaMax

主要是将Adam泛化(不太懂)

  • Nadam

主要思想:结合Adam与Neg

  • AMSGrad(2019年提出)

AMSGrad旨在解决基于Adam的优化器的收敛问题。AMSGrad使用过去平方梯度的最大值 而不是指数平均值来更新参数:(感觉不到优势所在)

  • LAMB与LARS(2019)

LARS(2017)算法的更新,分层大批量算法,据说处理大规模参数时有着不错的表现(看不懂,网上资料也不多)

LARS在注意力机制上表现不佳,所以出现了LAMB(为什么不佳我也不太懂)。

在训练BERT这样的最新语言模型方面表现出了良好的性能(惊叹,这句话很舒服)

 
目前共有0条评论
  • 暂无Trackback
你目前的身份是游客,评论请输入昵称和电邮!