论文阅读-an-overview-of-gradient-descent-optimization-algorithms

1 minute read

Published:

k 论文笔记:an-overview-of-gradient-descent-optimization-algorithms.

论文阅读-An overview of gradient descent optimization algorithms

梯度下降法:

目的:最小化模型的目标函数
效果:对于凸函数可以达到最小值,对于非凸函数可以达到局部最小值


Batch gradient descent


每次都使用全部数据更新。
缺点:每次更新的代价太大
为学习率

mini-batch gradient descent


每次都使用一个batch_size(n) 的数据进行更新。
通常n选择为50 到256

Stochastic gradient descent


每次只用一对数据进行更新,
缺点:容易陷入局部最小值
if mini-batch size =1 => stochastic gradient descent
if min-batch size = m(训练集总数) => batch gradient descent
如何选择min-batch size :
如果训练集较小(<2000),使用batch
如果训练集较大,使用mini-batch,大小为64-512.使用2的幂次,代码运行速度更快
也可以把mini-batch size 当做一个超参数,试验几个不同的值,找到使cost funtion下降最快的mini batch size

Alt text

Challenges

  • 选择学习率的大小

  • 每个轮训练中学习率大小的变化,不同epoch 的学习率的变化, 训练停止的threshold

  • 数据稀疏或者feature 出现频率差异大时,可能不想同时更新全部的参数,而是对频率小的feature进行更大的更新

  • 如何避免陷入局部最优点

Gradient descent optimization algorithms

Momentum

Alt text


通常选0.9
在grdient descent 过程中,每次计算结果的梯度值变化太大,如果选取大的learning rate,可能结果无法收敛。所以只能使用小的learning rate。使用滑动平均值代替原本的梯度,每次的结果更平滑。不会出现剧烈波动,所以可以使用大的学习率,从而更快的收敛。
把梯度递减算法看成一个球从一个碗的边缘滚下去,算出的等可以算为其下滚的加速度,加入了momentum可以看做是为其加了一个摩擦力。

Nesterov accelerated gradient


Alt text
Momentum:蓝色的线:先计算当前的梯度,然后往“惯性”的方向
NAG:先往“惯性”的方向(棕色),再往当前的梯度的方向(红)
可以看做为一个聪明的小球,能注意到它将要去哪,并且在上坡再次向上倾斜时小球应该进行减速。
对RNN效果显著

Adagrad

之前算法更新时每个参数的学习率都是一样的大小,adagrad 每个参数的学习率都是不同的
对稀疏参数进行大幅更新和对频繁参数进行小幅更新
SGD:

Adagrad:

(之前的所有梯度的平方的和)
用G对学习率进行修正。因为G是正的,所以所有参数的学习率都是递减的。出现次数多的参数减得更快。
用于避免分母为0.一般是1e-8
缺点:
到最后学习率会变得太低

Adadelta

将梯度用g表示

将不断累积的梯度平方用滑动平均代替(跟上面的momentum类似)

RMSprop

基本与Adadelta相同
Hinton建议 0为.9, η 为 0.001.

Adaptive Moment Estimation (Adam)

最常用的优化方法
将momentum和RMSprop方法结合

可以看做是对梯度均值的估计,可以看做是对方差的估计
因为是非中心化的,所以需要进行修正
usually 0.9.usually 0.999.doesn’t matter but recommend 1e-8

AdaMax

发现用无穷范数代替二范数结果更稳定

Nadam (Nesterov-accelerated Adaptive Moment Estimation)

将Adam 与NAG结合
将Adam 的公式合并:

只是将换为

Visualize

Visualize demo

summarize

SGD->Adagrad->Adadelta==RMSprop
RMSprop + Momentum = Adam
Adam +NAG = Nadam
Adam Best!