深度学习常见的优化方法(Optimizer)总结:Adam,SGD,Momentum,AdaGard等

机器学习的常见优化方法在最近的学习中常常遇到,可是仍是不够精通.将本身的学习记录下来,以备不时之需git

基础知识:


机器学习几乎全部的算法都要利用损失函数 lossfunction 来检验算法模型的优劣,同时利用损失函数来提高算法模型.

这个提高的过程就叫作优化(Optimizer)

下面这个内容主要就是介绍能够用来优化损失函数的经常使用方法github

经常使用的优化方法(Optimizer):

  • 1.SGD&BGD&Mini-BGD:

    SGD(stochastic gradient descent):随机梯度降低,算法在每读入一个数据都会马上计算loss function的梯度来update参数.假设loss function为L(w),下同.\[w-=\eta \bigtriangledown_{w_{i}}L(w_{i}) \]

    Pros:收敛的速度快;能够实如今线更新;可以跳出局部最优

    Cons:很容易陷入到局部最优,困在马鞍点.

    BGD(batch gradient descent):批量梯度降低,算法在读取整个数据集后累加来计算损失函数的的梯度
    \[w-=\eta \bigtriangledown_{w}L(w)\]

    Pros:若是loss function为convex,则基本能够找到全局最优解

    Cons:数据处理量大,致使梯度降低慢;不能实时增长实例,在线更新;训练占内存

    Mini-BGD(mini-batch gradient descent):顾名思义,选择小批量数据进行梯度降低,这是一个折中的方法.采用训练集的子集(mini-batch)来计算loss function的梯度.\[w-=\eta \bigtriangledown_{w_{i:i+n}}L(w_{i:i+n})\]

    这个优化方法用的也是比较多的,计算效率高并且收敛稳定,是如今深度学习的主流方法.算法

    上面的方法都存在一个问题,就是update更新的方向彻底依赖于计算出来的梯度.很容易陷入局部最优的马鞍点.能不能改变其走向,又保证原来的梯度方向.就像向量变换同样,咱们模拟物理中物体流动的动量概念(惯性).引入Momentum的概念.

  • 2.Momentum

    在更新方向的时候保留以前的方向,增长稳定性并且还有摆脱局部最优的能力\[\Delta w=\alpha \Delta w- \eta \bigtriangledown L(w)\] \[w=w+\Delta w\]

    若当前梯度的方向与历史梯度一致(代表当前样本不太可能为异常点),则会加强这个方向的梯度,若当前梯度与历史梯方向不一致,则梯度会衰减。一种形象的解释是:咱们把一个球推下山,球在下坡时积聚动量,在途中变得愈来愈快,\(\eta\)可视为空气阻力,若球的方向发生变化,则动量会衰减。
  • 3.Adagrad:(adaptive gradient)自适应梯度算法,是一种改进的随机梯度降低算法.
    之前的算法中,每个参数都使用相同的学习率\(\alpha\). Adagrad算法可以在训练中自动对learning_rate进行调整,出现频率较低参数采用较大的\(\alpha\)更新.出现频率较高的参数采用较小的\(\alpha\)更新.根据描述这个优化方法很适合处理稀疏数据.\[G=\sum ^{t}_{\tau=1}g_{\tau} g_{\tau}^{T}  其中 s.t. g_{\tau}=\bigtriangledown L(w_{i})\] 对角线矩阵\[G_{j,j}=\sum _{\tau=1}^{t} g_{\tau,j\cdot}^{2}\] 这个对角线矩阵的元素表明的是参数的出现频率.每一个参数的更新\[w_{j}=w_{j}-\frac{\eta}{\sqrt{G_{j,j}}}g_{j}\]
  • 4.RMSprop:(root mean square propagation)也是一种自适应学习率方法.不一样之处在于,Adagrad会累加以前全部的梯度平方,RMProp仅仅是计算对应的平均值.能够缓解Adagrad算法学习率降低较快的问题.\[v(w,t)=\gamma v(w,t-1)+(1-\gamma)(\bigtriangledown L(w_{i}))^{2} ,其中 \gamma 是遗忘因子\]  参数更新\[w=w-\frac{\eta}{\sqrt{v(w,t)}}\bigtriangledown L(w_{i})\]
  • 5.Adam:(adaptive moment estimation)是对RMSProp优化器的更新.利用梯度的一阶矩估计和二阶矩估计动态调整每一个参数的学习率.
    优势:每一次迭代学习率都有一个明确的范围,使得参数变化很平稳.
    \[m_{w}^{t+1}=\beta_{1}m_{w}^{t}+(1-\beta_{1}) \bigtriangledown L^{t} ,m为一阶矩估计\]
    \[v_{w}^{t+1}=\beta_{2}m_{w}^{t}+(1-\beta_{2}) (\bigtriangledown L^{t})^{2},v为二阶矩估计\]
    \[\hat{m}_{w}=\frac{m_{w}^{t+1}}{1-\beta_{1}^{t+1}},估计校订,实现无偏估计\]
    \[\hat{v}_{w}=\frac{v_{w}^{t+1}}{1-\beta_{2}^{t+1}}\]
    \[w^{t+1} \leftarrow=w^{t}-\eta \frac{\hat{m}_{w}}{\sqrt{\hat{v}_{w}}+\epsilon}\]
    Adam是实际学习中最经常使用的算法
    机器学习

优化方法在实际中的直观体验

损失曲面的轮廓和不一样优化算法的时间演化。 注意基于动量的方法的“过冲”行为,这使得优化看起来像一个滚下山的球

优化环境中鞍点的可视化,其中沿不一样维度的曲率具备不一样的符号(一维向上弯曲,另外一维向下)。 请注意,SGD很难打破对称性并陷入困境。 相反,诸如RMSprop之类的算法将在鞍座方向上看到很是低的梯度。 因为RMSprop更新中的分母术语,这将提升此方向的有效学习率,从而帮助RMSProp继续进行.

参考文献:

相关文章
相关标签/搜索