• 机器学习优化器总结


    算法流程参考:https://blog.csdn.net/nickkissbaby_/article/details/81066643

    解释及可视化参考:https://blog.csdn.net/weixin_40170902/article/details/80092628

    下面简要总结一下:

    梯度算法:包括全局梯度下降、批量梯度下降、随机梯度下降。

    训练速度逐渐上升,而效果逐渐下降,权衡考虑,一般是批量梯度下降法较好。

    动量算法:包括Momentum算法和Nesterov算法。这类算法一般探索的参数空间范围大,且收敛速度快。

    Momentum:使用速度v累积之前的梯度,然后再应用梯度更新。当梯度陡峭时,它可以更快地趋向极值点。当梯度改变正负时,它考虑了之前的梯度,不会摆动到极值点另一边太厉害。它只能在梯度正负变化时悬崖勒马。

    Nesterov:在Momentum计算梯度前,增加一步(先用速度更新参数),然后再计算损失函数对参数的梯度。先让参数在之前的速度上前进一步(探路),这样计算的梯度不仅考虑了前因,还考虑了“后因”(以当前速度考虑)。简单说,它可以提前刹车

    自适应算法:AdaGrad、RMSprop、AdaDelta、Adam。

    AdaGrad:它累积梯度的平方,计算梯度的时候,再除以这个累积的平方。所以梯度陡峭时,更新较慢,梯度平缓时,更新较快。

    RMSprop_1:应用滑动平均后的AdaGrad算法,即在累积梯度平方时使用了一个滑动平均。这样使得该累积量变化较为平滑,从而参数更新也可以平滑。

    RMSprop_2:应用Nesterov动量的RMSprop_1算法,即在计算梯度前更新参数,计算梯度后更新速度,再以这个速度更新参数。

    AdaDelta:这个参考资料一没有给出算法流程。从参考资料2看,它应用RMSprop_1算法,但在参数更新时不使用本次计算的梯度作为分子,而是使用之前梯度的和的开方作为分子。参考资料2中作者对iris数据集的测试表明,这个优化器在10轮训练中准确率表现最好。

    Adam:在上面的3个自适应算法中,都是以二阶矩(梯度平方)累积。Adam算法添加了一阶矩累积(梯度本身),2个矩的累积的方式还是滑动平均,并应用了一种修正(使得原点附近的曲线更接近真实值,因为滑动平均有一定滞后,原点处更是)处理这2个矩,最后梯度的更新正比于一阶矩而反比与二阶矩的开方。

  • 相关阅读:
    Linux下端口被占用确认
    Debuggex – 超好用的正则表达式可视化调试工具
    URL最大长度
    无需重启 修改计算机名直接生效
    UDP穿越NAT原理(p2p)
    gdb中信号
    锁 (读写锁优先级 写饥饿) (锁竞争引发的高系统调用)
    Loopback接口用途---用作管理地址。
    C/C++调试:gdbserver的简单使用
    总结一下NDK crash排查步骤
  • 原文地址:https://www.cnblogs.com/lunge-blog/p/11934244.html
Copyright © 2020-2023  润新知