tensorflow中的优化器

1.GradientDescent(梯度下降法):

lr = tf.Variable(0.003, dtype=tf.float32)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=lr).minimize(loss)

在这里插入图片描述
2.Momentum(动量法)

lr = tf.Variable(0.003, dtype=tf.float32)
optimizer = tf.train.MomentumOptimizer(learning_rate=lr,momentum=0.9).minimize(loss)

当前权值的改变受到上一次权值改变的影响,类似带上了惯性,加快速度。在更新模型参数时,对于那些当前梯度方向与上一次梯度方向相同的参数进行加强,即在这些方向上更快了;对于那些当前的梯度方向与上一次梯度方向不同的参数进行削减,即这些方向上减慢了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.AdaGrad(Adaptive Gradient)

lr = tf.Variable(0.003, dtype=tf.float32)
global_step = tf.Variable(0, name='global_step', trainable=False, dtype=tf.int64)
optimizer = tf.train.AdagradDAOptimizer(learning_rate=lr,global_step=global_step).minimize(loss)

AdaGrad的基本思想是对每个变量用不同的学习率,对低频参数用较大学习率,对高频参数用较小学习率。学习率在一开始比较大,用于快速梯度下降。随着优化过程的进行,对于已经下降很多的变量,则减缓学习率,对于还没怎么下降的变量,则保持一个较大的学习率。适用于稀疏数据集;优点是自动调节学习率,缺点是学习率越来越小,最后趋于0.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.RMSProp(root mean square prop)

lr = tf.Variable(0.003, dtype=tf.float32)
optimizer = tf.train.RMSPropOptimizer(learning_rate=lr).minimize(loss)

RMSProp算法采用了指数衰减平均的方式淡化遥远过去的历史对当前步骤参数更新量的影响,仍然保持了在梯度较大或较小方向上,对于更新步长的补偿效果,但是不会再发生更新停止的情况。在AdaGrad基础上改进了学习率趋于0的问题。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.Adadelta

lr = tf.Variable(0.003, dtype=tf.float32)
optimizer = tf.train.AdadeltaOptimizer(learning_rate=lr).minimize(loss)

AdaDelta算法主要是为了解决AdaGrad算法中存在的缺陷,下面先介绍一下AdaGrad算法优点和以及存在的问题:
其学习率是单调递减的,训练后期学习率非常小
其需要手工设置一个全局的初始学习率
更新xt时,左右两边的单位不统一
Adadelta针对上述三个的改进:在一个窗口w中对梯度进行求和,而不是对梯度一直累加。因为存放 w 之前的梯度是低效的,所以可以用对先前所有梯度均值(使用RMS即均方根值实现)的一个指数衰减作为代替的实现方法。
在这里插入图片描述
RMS:求均方根
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.Adam:Adaptive Moment Estimation
相当于 RMSprop + Momentum

lr = tf.Variable(0.003, dtype=tf.float32)
optimizer = tf.train.AdamOptimizer(learning_rate=lr).minimize(loss)

先把原始梯度做一个指数加权平均,再做一次归一化处理,然后再更新梯度值。除了像 Adadelta 和 RMSprop 一样存储了过去梯度的平方 vt 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结
在这里插入图片描述
如何选择?
如果数据是稀疏的,就用自适用方法,即 Adagrad, Adadelta, RMSprop, Adam。
RMSprop, Adadelta, Adam 在很多情况下的效果是相似的。
Adam 就是在 RMSprop 的基础上加了 bias-correction 和 momentum,随着梯度变的稀疏,Adam 比 RMSprop 效果会好。
整体来讲,Adam 是最好的选择。
很多论文里都会用 SGD,没有 momentum 等。SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点。
如果需要更快的收敛,或者是训练更深更复杂的神经网络,需要用一种自适应的算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值