各种优化方法总结比較(sgd/momentum/Nesterov/adagrad/adadelta)

前言

这里讨论的优化问题指的是,给定目标函数f(x),我们须要找到一组參数x。使得f(x)的值最小。

本文下面内容如果读者已经了解机器学习基本知识,和梯度下降的原理。

SGD

SGD指stochastic gradient descent,即随机梯度下降。是梯度下降的batch版本号。

对于训练数据集,我们首先将其分成n个batch,每一个batch包括m个样本。我们每次更新都利用一个batch的数据。而非整个训练集。

即:

xt+1=xt+Δxt

Δxt=?ηgt

当中。η为学习率,gt为x在t时刻的梯度。

这么做的优点在于:

  • 当训练数据太多时。利用整个数据集更新往往时间上不显示。batch的方法能够降低机器的压力,而且能够更快地收敛。

  • 当训练集有非常多冗余时(相似的样本出现多次),batch方法收敛更快。以一个极端情况为例。若训练集前一半和后一半梯度同样。那么如果前一半作为一个batch,后一半作为还有一个batch。那么在一次遍历训练集时,batch的方法向最优解前进两个step,而总体的方法仅仅前进一个step。

Momentum

SGD方法的一个缺点是,其更新方向全然依赖于当前的batch。因而其更新十分不稳定。

解决这一问题的一个简单的做法便是引入momentum。

momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向。同一时候利用当前batch的梯度微调终于的更新方向。

这样一来,能够在一定程度上添加稳定性,从而学习地更快,而且还有一定摆脱局部最优的能力:

Δxt=ρΔxt?1?ηgt

当中,ρ 即momentum,表示要在多大程度上保留原来的更新方向,这个值在0-1之间,在训练開始时,因为梯度可能会非常大,所以初始值一般选为0.5;当梯度不那么大时,改为0.9。η 是学习率,即当前batch的梯度多大程度上影响终于更新方向,跟普通的SGD含义同样。ρ 与 η 之和不一定为1。

Nesterov Momentum

这是对传统momentum方法的一项改进,由Ilya Sutskever(2012 unpublished)在Nesterov工作的启示下提出的。

其基本思路例如以下图(转自Hinton的coursera公开课lecture 6a):

首先,依照原来的更新方向更新一步(棕色线)。然后在该位置计算梯度值(红色线),然后用这个梯度值修正终于的更新方向(绿色线)。

上图中描写叙述了两步的更新示意图。当中蓝色线是标准momentum更新路径。

公式描写叙述为:

Δxt=ρΔxt?1?ηΔf(xt+ρΔxt?1)

Adagrad

上面提到的方法对于全部參数都使用了同一个更新速率。可是同一个更新速率不一定适合全部參数。比方有的參数可能已经到了仅须要微调的阶段。但又有些參数因为相应样本少等原因,还须要较大幅度的调动。

Adagrad就是针对这一问题提出的,自适应地为各个參数分配不同学习率的算法。其公式例如以下:

Δxt=?η∑tτ=1g2τ+? ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄√gt

当中gt 同样是当前的梯度,连加和开根号都是元素级别的运算。eta 是初始学习率。因为之后会自己主动调整学习率,所以初始值就不像之前的算法那样重要了。而?是一个比較小的数,用来保证分母非0。

其含义是,对于每一个參数。随着其更新的总距离增多,其学习速率也随之变慢。

Adadelta

Adagrad算法存在三个问题

  • 其学习率是单调递减的,训练后期学习率非常小
  • 其须要手工设置一个全局的初始学习率
  • 更新xt时。左右两边的单位不同一

Adadelta针对上述三个问题提出了比較美丽的解决方式。

首先,针对第一个问题,我们能够仅仅使用adagrad的分母中的累计项离当前时间点比較近的项,例如以下式:

E[g2]t=ρE[g2]t?1+(1?ρ)g2t

Δxt=?ηE[g2]t+? ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄√gt

这里ρ是衰减系数,通过这个衰减系数。我们令每一个时刻的gt随之时间依照ρ指数衰减。这样就相当于我们仅使用离当前时刻比較近的gt信息。从而使得还非常长时间之后,參数仍然能够得到更新。

针对第三个问题,事实上sgd跟momentum系列的方法也有单位不统一的问题。sgd、momentum系列方法中:

Δx的单位∝g的单位∝?f?x∝1x的单位

相似的,adagrad中,用于更新Δx的单位也不是x的单位。而是1。

而对于牛顿迭代法:

Δx=H?1tgt

当中H为Hessian矩阵。因为其计算量巨大。因而实际中不常使用。其单位为:

Δx∝H?1g∝?f?x?2f?2x∝x的单位

注意,这里f无单位。因而,牛顿迭代法的单位是正确的。

所以,我们能够模拟牛顿迭代法来得到正确的单位。注意到:

Δx=?f?x?2f?2x?1?2f?2x=Δx?f?x

这里,在解决学习率单调递减的问题的方案中,分母已经是?f?x的一个近似了。这里我们能够构造Δx的近似,来模拟得到H?1的近似,从而得到近似的牛顿迭代法。详细做法例如以下:

Δxt=?E[Δx2]t?1 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄√E[g2]t+? ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄√gt

能够看到,如此一来adagrad中分子部分须要人工设置的初始学习率也消失了,从而顺带攻克了上述的第二个问题。

各个方法的比較

Karpathy做了一个这几个方法在MNIST上性能的比較,其结论是:

adagrad相比于sgd和momentum更加稳定,即不须要怎么调參。而精调的sgd和momentum系列方法不管是收敛速度还是precision都比adagrad要好一些。

在精调參数下,一般Nesterov优于momentum优于sgd。而adagrad一方面不用怎么调參,还有一方面其性能稳定优于其它方法。

实验结果图例如以下:

Loss vs. Number of examples seen

Testing Accuracy vs. Number of examples seen

Training Accuracy vs. Number of examples seen

其它总结文章

近期看到了一个非常棒的总结文章,除了本文的几个算法。还总结了RMSProp跟ADAM(当中ADAM是眼下最好的优化算法,不知道用什么的话用它就对了)

原文地址:https://www.cnblogs.com/zhchoutai/p/8670897.html

时间: 2024-11-02 12:24:23

各种优化方法总结比較(sgd/momentum/Nesterov/adagrad/adadelta)的相关文章

Caffe学习系列(8):solver优化方法

上文提到,到目前为止,caffe总共提供了六种优化方法: Stochastic Gradient Descent (type: "SGD"), AdaDelta (type: "AdaDelta"), Adaptive Gradient (type: "AdaGrad"), Adam (type: "Adam"), Nesterov’s Accelerated Gradient (type: "Nesterov&qu

Caffe中的优化方法

在Deep Learning中,往往loss function是非凸的,没有解析解,我们需要通过优化方法来求解.Caffe通过协调的进行整个网络的前向传播推倒以及后向梯度对参数进行更新,试图减小损失. Caffe已经封装好了三种优化方法,分别是Stochastic Gradient Descent (SGD), AdaptiveGradient (ADAGRAD), and Nesterov's Accelerated Gradient (NAG). Solver的流程: 1.     设计好需

NN优化方法对比:梯度下降、随机梯度下降和批量梯度下降

1.前言 这几种方法呢都是在求最优解中经常出现的方法,主要是应用迭代的思想来逼近.在梯度下降算法中,都是围绕以下这个式子展开: 其中在上面的式子中hθ(x)代表,输入为x的时候的其当时θ参数下的输出值,与y相减则是一个相对误差,之后再平方乘以1/2,并且其中 注意到x可以一维变量,也可以是多维变量,实际上最常用的还是多维变量.我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解.这个θ的更新过程可以描

深度学习最全优化方法---来源于知乎

写在前面:本宝宝好想只了解sgd,monument,adagrad,adam深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam) ycszen 1 年前 前言 (标题不能再中二了)本文仅对一些常见的优化方法进行直观介绍和简单的比较,各种优化方法的详细内容及公式只好去认真啃论文了,在此我就不赘述了. SGD 此处的SGD指mini-batch gradient descent,关于batch gradient descent, stochas

第9章 优化方法和归一化

9章 优化方法和归一化 "Nearly all of deep learning is powered by one very important algorithm: Stochastic Gradient Descent (SGD)" – Goodfellow et al.[1] 我们之前讨论了评价函数,它根据权重W和偏置b参数,根据输入返回数据点 的预测输出.我们也讨论了两种常见的损失函数,它能度量一个给定的分类器在分类数据时有多好或多坏. 给定这些模块,我们转到机器学习.神经网

卷积神经网络(CNN)的参数优化方法

著名: 本文是从 Michael Nielsen的电子书Neural Network and Deep Learning的深度学习那一章的卷积神经网络的参数优化方法的一些总结和摘录,并不是我自己的结论和做实验所得到的结果.我想Michael的实验结果更有说服力一些.本书在github上有中文翻译的版本, 前言 最近卷积神经网络(CNN)很火热,它在图像分类领域的卓越表现引起了大家的广泛关注.本文总结和摘录了Michael Nielsen的那本Neural Network and Deep Lea

深度学习之(十一)Deep learning中的优化方法:随机梯度下降、受限的BFGS、共轭梯度法

Deep learning中的优化方法 三种常见优化算法:SGD(随机梯度下降),LBFGS(受限的BFGS),CG(共轭梯度法). 1.SGD(随机梯度下降) 随机梯度下降(Stochastic Gradient Descent, SGD)是随机和优化相结合的产物,是一种很神奇的优化方法,属于梯度下降的一种,适用于大规模问题. 要想扯清楚它,还得先谈谈梯度下降.众所周知,每个优化问题都会有一个目标函数F(w)F(w),梯度下降采用迭代的策略,从初始点w0w0开始,每次沿着目标函数在当前点的负梯

tensorflow 加速优化方法

1. stochastic gradient decent(CGD) 将data分小批放入神经网络中进行计算 W += -Learning rate * dx 缺点:选择合适的learning rate比较困难 速度慢 容易收敛到局部最优,并且在某些情况下可能被困在鞍点 2. momentum 模拟物理里动量的概念,积累之前的动量来替代真正的梯度.(利用斜坡的惯性) m = b1 * m - Learning rate * dx W += m 特点:在相关方向加速SGD,抑制振荡,从而加快收敛

垃圾邮件过滤优化方法

垃圾邮件过滤优化方法 通过honeypot project 搜集大量垃圾邮件数据 通过解析邮件header 获取垃圾邮件发送路径和服务器相关信息 对编写错误的单词的修正 比如:w4tch 对相同含义的词进行归类处理,比如:discount 和discounts   (可以通过porter stemmer,下面就是该算法c语言的一种实现) /* This is the Porter stemming algorithm, coded up in ANSI C by the author. It m