位置: 首页 > 新闻动态 > 行业新闻
tensorflow中各种优化器有什么区别? 作者:佚名    发布时间:2024-07-29

如AdamOptimizer,GradientDescentOptimizer

有论文有书籍介绍的。

各种优化器用的是不同的优化算法(经典的如:Mmentum,SGD,Adam等),本质上都是梯度下降算法的拓展

参考下面的blog吧,非常全面的总结。

An overview of gradient descent optimization algorithms

@superbrother 回答的那篇博客已经很经典了。我自己也写了一篇博客总结了下,也可以参考下,博客地址:深度学习中优化方法--momentum、Nesterov Momentum、AdaGrad、Adadelta、RMSprop、Adam

RMSprop 算法是一种自适应学习率的优化算法,其核心思想是通过统计相似梯度

的平均值的方式来自动地调整学习率。一般来讲,我们会在梯度算法中引入一个衰减

系数,使每一次衰减都有一定的比例。在TensorFlow 中,一般使用tf.train.RMSPropOptimizer()方法来创建一个优化器。

Momentum 算法也是神经网络的常用优化算法之一,并且也属于梯度下降的变形

算法。Momentum 算法的核心在于将梯度学习算法中加入了动量的概念,使得

优化速度会变得更快。在TensorFlow 中, 一般使用tf.train.MomentumOptimizer() 方法来创建一个momentum 优化器。

普通的梯度下降算法对于所有的参数所使用的学习率都是相同的,但是同一个学

习率却不一定适用于所有的参数。相对于梯度下降算法来讲,Adagrad 算法最大的特

点就是可以自适应地为各个参数设置不同的学习率,对于各个参数,随着其更新总距

离的增加,其学习速率也会随着变慢。在TensorFlow 中,一般调用tf.train.AdagradOptimizer()方法来创建一个Adagrad优化器。

Adam 这个名字来源于自适应矩估计(adaptive moment estimation),也是梯度下

降算法的一种变形,但是每次迭代参数的学习率都有一定的范围,不会因为梯度很大

而导致学习率(步长)也变得很大,参数的值相对比较稳定。在TensorFlow 中,一般调用tf.train.AdamOptimizer()方法来创建一个Adam 优化器。


节选自《TensorFlow进阶指南》(预计9月初出版,嘻嘻,这本书是我写的)

1、SGD:(stochastiac gradient descent)随机梯度下降。

学习原理:选择一条数据学习一条数据。

缺点:1、对于参数比较敏感,需要需要参数的初始化。

2、容易陷入局部极小值。

3、当数据较多时训练时间比较长

4、没迭代一步需要用到全部数据集。

2、Adagrad gradient(自适应梯度):

学习原理:将每一维历史的梯度平方叠加起来,然后更新时候除以该历史梯度值。每一个参数的和梯度学习率就和有关系,但是又不一样,成为自适应学习率。

缺点:容易收到过去的影响,梯度下降的很快,导致学习率越来越弱,也就会提前停止学习。

3、rmsprop(root mean square prop)

学习原理:在自适应梯度基础上引入了衰减因子,在梯度累计时候会对过去现在做一个平衡,通过超参数调节衰减量,适合处理非平稳目标也就是也就是与时间有关的,对rnn效果很好。

4、Adam (adaptive momentun optization)自适应动量优化)

目前最流行的优化器,它结合了自适应梯度善于处理稀疏梯度和均方根善于处理非平稳目标的优点,适合大数据集和高维空间

5、dropout 正则化。

前行传播时候让某个神经元一定概率激活停止工作,可以有效结合模型和过拟合问题。

平台注册入口