一系列梯度下降算法

梯度下降算法是优化神经网络最常见的方式,这里我们会接触梯度下降法的不同变种以及多种梯度下降优化算法。
梯度下降变种

  1. batch gradient descent
    缺点:一次参数更新需要使用整个数据集,因此十分慢,并且内存不够的话很难应付。
    优点:保证收敛到全局最小值或者局部最小值
  2. stochastic gradient descent
    一次参数更新使用一个样本
    优点:速度快。因为SGD的波动性,一方面,可以跳到更好的局部最小点。
    缺点:参数更新方差大,从而目标函数波动严重,**另一方面,**很难收敛到最小值,但是我们可以逐渐减小学习率来应对。
    在这里插入图片描述
  3. mini-batch gradient descent
    BGD和SGD的折中结合,减少了参数更新的方差,从而可以更稳定的收敛;可以利用矩阵优化

上面提到的有很多问题需要解决:

  1. 学习率的选择比较困难。太小的学习率使得收敛很慢,太大的学习率使得难以收敛。
  2. 对所有的参数更新使用同样的学习率。
  3. 鞍点。
  4. 预定义好的学习率方案太死板了,不灵活。

梯度下降优化算法
在深度学习中广泛使用的一阶方法。
Note:二阶方法,例如牛顿法,在高维数据上计算量太大,实际上不可行。

  1. Momentum
    动量法是一种帮助SGD在相关方向上加速并且抑制摇摆的一种方法。动量法将历史步长的更新向量的一个分量增加到当前的更新向量中。
    v t = γ v t 1 + η J ( θ ) θ v_t = \gamma v_{t-1} + \eta \frac{\partial J(\theta)}{\partial \theta}
    θ = θ v t \theta = \theta - v_t
    对于在梯度点处具有相同的方向的维度,其动量项增大,对于在梯度点处改变方向的维度,其动量项减小。因此,我们可以得到更快的收敛速度,同时可以减少摇摆
  2. Nesterov加速梯度下降法(NAG)
    我们希望有一个智能的球,这个球能够知道它将要去哪里。NAG能够给予动量项预知能力的方法。
    通过计算关于参数未来的近似位置的梯度,而不是关于当前的参数的梯度
    v t = γ v t 1 + η J ( θ γ v t 1 ) θ v_t = \gamma v_{t-1} + \eta \frac{\partial J(\theta-\gamma v_{t-1})}{\partial \theta}
    θ = θ v t \theta = \theta - v_t

自适应学习率算法:Adagrad, Adadelta,RMSprop,Adam
3. Adagrad
Adagrad通过参数来调整合适的学习率 η \eta ,对稀疏参数进行大幅度更新和对频繁参数进行小幅度更新。Adagrad为不同的参数设置不同的学习率。
因此,Adagrad非常适合处理稀疏数据。
例如,Pennington等人利用Adagrad训练Glove词向量,因为低频词比高频词需要更大的步长。
θ t + 1 , i = θ t , i η G t , i + ϵ J ( θ ) θ t , i \theta_{t+1,i} = \theta_{t,i} - \frac{\eta}{\sqrt{G_{t,i}+\epsilon}} \cdot \frac{\partial J(\theta)}{\partial \theta_{t,i}}
其中, G i G_i 是到t时刻为止,关于 θ i \theta_i 的梯度的平方和。有趣的是,没有平方根的操作,算法的效果会变得很差。
优点:无需手工调整学习率,大多数情况下, η = 0.01 \eta = 0.01
缺点:学习率总是在降低以至于最终变得很小,从而停止学习
4. Adadelta
它是Adagrad的一种延申方法,以解决Adagrad的学习率单调递减的问题。而且,无需设置默认的学习率。
在这里插入图片描述
R M S [ g ] t = E [ g 2 ] t + ϵ RMS[g]_t = \sqrt{E[g^2]_t+\epsilon}
在这里插入图片描述
R M S [ Δ θ ] t = E [ Δ θ 2 ] t + ϵ RMS[\Delta \theta]_t=\sqrt{E[\Delta \theta^2]_t+\epsilon}
在这里插入图片描述
5. RMSprop
RMSprop是一个未被发表的自适应学习率的算法。RMSprop和Adadelta在相同的时间内被独立的提出,都源于对Adagrad的学习率单调递减的问题的求解。
在这里插入图片描述
Hinton建议将 γ \gamma 设置为0.9, η = 0.001 \eta=0.001
6. Adam
Adam是另一种自适应学习率的算法。除了像Adadelta和RMSprop一样存储一个指数衰减的历史平方梯度的平均值,还保存一个历史梯度的指数衰减平均值
在实际应用中,Adam效果很好,与其他自适应学习率算法相比,其收敛速度更快,学习效果更有效,而且可以纠正其他优化技术中存在的问题,如:学习率消失,收敛过慢或是高方差的参数更新导致损失函数波动较大等问题。

总结:
自适应学习率算法能很快收敛,并快速找到参数更新中正确的目标方向;SGD,NAG和动量法收敛缓慢,且很难找到正确的方向。

[1] https://blog.csdn.net/google19890102/article/details/69942970
[2] https://zhuanlan.zhihu.com/p/27449596
[3] 学习率退火
https://blog.csdn.net/lanmengyiyu/article/details/79341487?utm_source=blogxgwz4

猜你喜欢

转载自blog.csdn.net/YQMind/article/details/84825185