4.1 卷积神经网络调参-adagrad_adam

4.3.1 adagrad_adam

咱们以前将了随机梯度降低和动量梯度降低,不过,还有不少其余的优化算法可使得模型稳定。算法

先来回顾随机梯度降低和动量梯度降低bash

随机梯度降低有两个问题:局部极值问题和saddle point 问题,动量梯度降低能够必定程度上解决这两个问题学习

由于他可使用以前积累的梯度方向。优化

不过这两个方法还有其余的两个问题:spa

  • 受初始学习率影响太大code

    初始化的学习率比较大,无论用哪一种梯度降低,都会致使梯度爆炸,模型不收敛cdn

  • 每个梯度的学习率都是同样的blog

    α是针对全局的,而不是每个维度定制的。图片

    这个在图像上应用还不是特别明显,若是是针对稀疏的问题来讲,就比较明显了,会使得咱们丢失不少稀疏数据上的信息。it

    由于对w求导数的时候,根据链式求导法则,最终都会到w对x的偏导,这时候若是x=0,那么他的参数更新也是0,对于稀疏数据来讲,由于他很稀疏,因此不少值都是0,不少时候是得不到梯度的更新的。

    可是

    可是其余维度的数据是不少的,这时候若是统一把学习率调小,会使得稀疏数据学习不到足够的信息

    最好的解决方法是给每个维度都设置不一样的学习率

针对这两个问题,还有哪些其余的算法呢?

  1. AdaGrad

    学习率是逐渐衰减的,用以往梯度的平方和做为学习率的分母,从而使得整个学习率随着训练次数的增长而愈来愈小,这样也摆脱了学习率对初始值的依赖

    image

grad_squared = 0 
while True:
    dx = compute_gradient(x)
    grad_squared += dx ** 2
    # + 1e-7 加一个比较小的值以防止初始值为0
    x -= learning_rate * dx / (np.sqrt(grad_squared) + 1e-7)
复制代码
*   优势

    *   前期, regularizer较小,放大梯度

    *   后期, regularizer较大,缩小梯度

    *   梯度随训练次数下降(能够防止一直跳过极值区域)

    *   每一个份量有不一样的学习率

*   缺点

    *   学习率设置太大,致使regularizer影响过于敏感

    *   后期,regularizer累积值太大,提早结束训练
复制代码
  1. RMSProp

    • AdaGrad 的变种

    • 由累积平方梯度变为平均平方梯度

    • 解决了后期提早结束训练的问题

grad_squared = 0 
while True:
  dx = compute_gradient(x)
  # 平方和变成了平均值
  grad_squared += decay_rate * grad_squared + (1 - decay_rate) * (dx ** 2)
  x -= learning_rate * dx / (np.sqrt(grad_squared) + 1e-7)
复制代码
  1. Adam

    • 全部的上述算法都会用learning_ rate来作参数,可是Adam和上面讲的几种算法会在后期给每一个维度一个定制的学习率

    • Adam在如下场景比较有效

      • Beta1 = 0.9

      • Beta2 = 0.999

      • Learning_rate = 1e-3 or 5e-4(初始值比较小,能够经过冲量和累积梯度去放大他)

    Adam结合了Momentum(动量梯度降低)(学习稳定)和Adagrad(能够随着训练次数和维度的变化而变化)的优势

    image

    [图片上传失败...(image-9a19d6-1538918434302)]

    校准的意义在于经过这种方式使得开始的时候first_moment和second_moent变的相对大一些来加速训练

相关文章
相关标签/搜索