zoukankan      html  css  js  c++  java
  • 深度学习—优化算法对比

    1、优化算法

    • SGD:随机梯度下降
    • SGD+Momentum: 基于动量的SGD(在SGD基础上做过优化)
    • SGD+Nesterov+Momentum:基于动量,两步更新的SGD(在SGD+Momentum基础上做过优化)
    • Adagrad:自适应地为各个参数分配不同学习速率
    • Adadelta: 针对Adagrad问题,优化过的算法(在Adagrad基础上做过优化)
    • RMSprop:对于循环神经网络(RNNs)是最好的优化器(在Adadelta基础上做过优化)
    • Adam:对每个权值都计算自适应的学习速率(在RMSprop基础上做过优化)
    • Adamax:针对Adam做过优化的算法(在Adam基础上做过优化)

      (1)SGD:随机梯度下降

      指mini-batch gradient descent,SGD就是每一次迭代计算mini-batch的梯度,然后对参数进行更新,是最常见的优化方法了

      缺点:选择合适的learning rate比较困难 - 对所有的参数更新使用同样的learning rate。对于稀疏数据或者特征,有时我们可能想更新快一些对于不经常出现的特征,对于常出现的特征更新慢一些,这时候SGD就不太能满足要求了;

       SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点。

      (2)momentum

      是模拟物理里动量的概念,积累之前的动量来替代真正的梯度。momentum项能够在相关方向加速SGD,抑制振荡,从而加快收敛。

      (3)Adam(Adaptive Moment Estimation)

      Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

      优点:

    • 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
    • 对内存需求较小
    • 为不同的参数计算不同的自适应学习率
    • 也适用于大多非凸优化 - 适用于大数据集和高维空间

    2、如何选择

      整体来讲,Adam 是最好的选择。

      很多论文里都会用 SGD,没有 momentum 等。SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点。

      如果需要更快的收敛,或者是训练更深更复杂的神经网络,需要用一种自适应的算法。

  • 相关阅读:
    XSS
    XSS练习小游戏
    CTF中常见的编码
    BugkuCTF
    A、B、C、D和E类IP地址
    JDK和JRE的区别及配置
    SQL注入漏洞测试(HTTP头注入)
    MS17-010远程溢出漏洞(CVE-2017-0143)拿权限
    SQL注入——布尔型盲注注入攻击——手工注入篇——SQL手工注入漏洞测试(MySQL数据库)
    mysql增删改查
  • 原文地址:https://www.cnblogs.com/eilearn/p/9035424.html
Copyright © 2011-2022 走看看