optimizer优化算法总结

优化方法总结

参考

深度学习最全优化方法总结比较

An overview of gradient descent optimization algorithms


目录


1. SGD

3种不同的梯度下降方法,区别在于每次参数更新时计算的样本数据量不同。

1.1 Batch gradient descent

每进行1次参数更新,需要计算整个数据样本集

θ=θηθJ(θ)

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

1.2 Stochastic gradient descent

每进行1次参数更新,只需要计算1个数据样本

θ=θηθJ(x(i),y(i);θ)

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

1.3 Mini-batch gradient descent

每进行1次参数更新,需要计算1个mini-batch数据样本

θ=θηθJ(x(i:i+n),y(i:i+n);θ)

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
【三种gradient descent对比】

Batch gradient descent的收敛速度太慢,而且会大量多余的计算(比如计算相似的样本)。

Stochastic gradient descent虽然大大加速了收敛速度,但是它的梯度下降的波动非常大(high variance)。

Mini-batch gradient descent中和了2者的优缺点,所以SGD算法通常也默认是Mini-batch gradient descent。

【Mini-batch gradient descent的缺点】

然而Mini-batch gradient descent也不能保证很好地收敛。主要有以下缺点:

  • 选择一个合适的learning rate是非常困难的

    学习率太低会收敛缓慢,学习率过高会使收敛时的波动过大。

  • 所有参数都是用同样的learning rate

    对于稀疏数据或特征,有时我们希望对于不经常出现的特征的参数更新快一些,对于常出现的特征更新慢一些。这个时候SGD就不能满足要求了。

  • sgd容易收敛到局部最优解,并且在某些情况可能被困在鞍点

    在合适的初始化和step size的情况下,鞍点的影响没那么大。

正是因为SGD这些缺点,才有后续提出的各种算法。

2. Momentum

momentum利用了物理学中动量的思想,通过积累之前的动量( mt1 )来加速当前的梯度。

mt=μmt1+ηθJ(θ)θt=θt1mt 
其中, μ 是动量因子,通常被设置为0.9或近似值。

【特点】

  • 参数下降初期,加上前一次参数更新值;如果前后2次下降方向一致,乘上较大的 μ 能够很好的加速。
  • 参数下降中后期,在局部最小值附近来回震荡时, gradient0 μ 使得更新幅度增大,跳出陷阱。
  • 在梯度方向改变时,momentum能够降低参数更新速度,从而减少震荡;在梯度方向相同时,momentum可以加速参数更新, 从而加速收敛。
  • 总而言之,momentum能够加速SGD收敛,抑制震荡

3. Nesterov

Nesterov在梯度更新时做一个矫正,避免前进太快,同时提高灵敏度。

Momentum并没有直接影响当前的梯度 θJ(θ) ,所以Nesterov的改进就是用上一次的动量( μmt1 )当前的梯度 θJ(θ) 做了一个矫正。

mt=μmt1+ηθJ(θμmt1)θt=θt1mt

image

Momentum与Nexterov的对比,如下图:

  • Momentum:蓝色向量

    Momentum首先计算当前的梯度值(短的蓝色向量),然后加上之前累计的梯度/动量(长的蓝色向量)。

  • Nexterov:绿色向量

    Nexterov首先先计算之前累计的梯度/动量(长的棕色向量),然后加上当前梯度值进行矫正后( μmt1 )的梯度值(红色向量),得到的就是最终Nexterov的更新值(绿色向量)。

Momentum和Nexterov都是为了使梯度更新更灵活。但是人工设计的学习率总是有些生硬,下面介绍几种自适应学习率的方法。

4. Adagrad

Adagrad是对学习率进行了一个约束。

gt=

  • 12
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值