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 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点。

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

  • 相关阅读:
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 获取指定进程的输入命令行
    dotnet 获取指定进程的输入命令行
    PHP sqrt() 函数
    PHP sinh() 函数
    PHP sin() 函数
    PHP round() 函数
  • 原文地址:https://www.cnblogs.com/eilearn/p/9035424.html
Copyright © 2011-2022 走看看