欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

梯度下降优化算法

程序员文章站 2022-07-04 22:02:36
...

梯度下降优化算法

写这篇博客其实是为了记录所读的这篇论文的笔记An overview of gradient descent optimization algorithms

Batch gradient descent

梯度下降优化算法
他每次为整个数据集计算梯度,然后进行一次更新。

for i in range(nb_epochs): 
    params_grad = evaluate_gradient(loss_function, data, params)
    params = params - learning_rate * params_grad 

Stochastic gradient descent(SGD)

梯度下降优化算法
他对于每个样本都会计算一次梯度,然后进行一次更新。

for i in range(nb_epochs):
  np.random.shuffle(data)
  for example in data:
    params_grad = evaluate_gradient(loss_function, example, params)
    params = params - learning_rate * params_grad

SGD 因为更新比较频繁,会造成 cost function 有严重的震荡
梯度下降优化算法

Mini-batch gradient descent

MBGD每一次梯度更新是作用于一小批样本n,n取50~256,收敛更稳定。
梯度下降优化算法

for i in range(nb_epochs):
  np.random.shuffle(data)
  for batch in get_batches(data, batch_size=50):
    params_grad = evaluate_gradient(loss_function, batch, params)
    params = params - learning_rate * params_grad

Momentum

在当前更新向量中加入了上一次梯度更新因子,γ(伽马)的值一般设为0.9左右.
加入的这一项,可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。

梯度下降优化算法

Adagrad

g _t,i 为t 时刻参数 θ_i 的梯度
梯度下降优化算法
如果是普通的 SGD, 那么 θ_i 在每一时刻的梯度更新公式为:
梯度下降优化算法
对于每个参数、时间,都对应不同的学习率
梯度下降优化算法
G_t,ii是个对角矩阵,元素G_t,ii表示到t时刻为止参数 θ_i所有梯度的平方和,E(不好意思这个不知道怎么打也不知道怎么读[捂脸])是平滑参数,避免出现除0的情况。
其中 η 一般取 0.01。
Adagrad 的优点是减少了学习率的手动调节。它的缺点是分母会不断积累,这样学习率就会收缩并最终会变得非常小。

RMSprop

RMSprop 是 Geoff Hinton 提出的一种自适应学习率方法。
RMSprop 为了解决 Adagrad 学习率急剧下降问题的。
梯度下降优化算法
Hinton 建议设定 γ 为 0.9, 学习率 η 为 0.001。

Adam

这个算法是另一种计算每个参数的自适应学习率的方法。
除了像 Adadelta 和 RMSprop 一样存储了过去梯度的平方 vt 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值:
梯度下降优化算法
梯度下降优化算法
梯度下降优化算法
建议 β1 = 0.9,β2 = 0.999,ϵ = 10e−8
实践表明,Adam 比其他适应性学习方法效果要好。