论文阅读-an-overview-of-gradient-descent-optimization-algorithms
Published:
论文阅读-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
Challenges
选择学习率的大小
每个轮训练中学习率大小的变化,不同epoch 的学习率的变化, 训练停止的threshold
数据稀疏或者feature 出现频率差异大时,可能不想同时更新全部的参数,而是对频率小的feature进行更大的更新
如何避免陷入局部最优点
Gradient descent optimization algorithms
Momentum
通常选0.9
在grdient descent 过程中,每次计算结果的梯度值变化太大,如果选取大的learning rate,可能结果无法收敛。所以只能使用小的learning rate。使用滑动平均值代替原本的梯度,每次的结果更平滑。不会出现剧烈波动,所以可以使用大的学习率,从而更快的收敛。
把梯度递减算法看成一个球从一个碗的边缘滚下去,算出的等可以算为其下滚的加速度,加入了momentum可以看做是为其加了一个摩擦力。
Nesterov accelerated gradient
Momentum:蓝色的线:先计算当前的梯度,然后往“惯性”的方向
NAG:先往“惯性”的方向(棕色),再往当前的梯度的方向(红)
可以看做为一个聪明的小球,能注意到它将要去哪,并且在上坡再次向上倾斜时小球应该进行减速。
对RNN效果显著
Adagrad
之前算法更新时每个参数的学习率都是一样的大小,adagrad 每个参数的学习率都是不同的
对稀疏参数进行大幅更新和对频繁参数进行小幅更新
SGD:
(之前的所有梯度的平方的和)
用G对学习率进行修正。因为G是正的,所以所有参数的学习率都是递减的。出现次数多的参数减得更快。
用于避免分母为0.一般是1e-8
缺点:
到最后学习率会变得太低
Adadelta
将梯度用g表示
RMSprop
基本与Adadelta相同
Hinton建议 0为.9, η 为 0.001.
Adaptive Moment Estimation (Adam)
最常用的优化方法
将momentum和RMSprop方法结合
因为是非中心化的,所以需要进行修正
AdaMax
Nadam (Nesterov-accelerated Adaptive Moment Estimation)
将Adam 与NAG结合
将Adam 的公式合并:
Visualize
summarize
SGD->Adagrad->Adadelta==RMSprop
RMSprop + Momentum = Adam
Adam +NAG = Nadam
Adam Best!