@。Tensorflow,纯新手入门笔记->优化器

夙愿已清 提交于 2020-01-16 21:38:34

第九节:Tensorflow优化器
高中数学学过,函数在一阶导数为零的地方达到其最大值和最小值。梯度下降算法基于相同的原理,即调整系数(权重和偏置)使损失函数的梯度下降。
(就是使用优化器,调整权重W,偏置B,使得损失函数到达一个损失最少的点)

有三种梯度下降:
1.Vanilla 梯度下降:在 Vanilla 梯度下降(也称作批梯度下降)中,在每个循环中计算整个训练集的损失函数的梯度。该方法可能很慢并且难以处理非常大的数据集。该方法能保证收敛到凸损失函数的全局最小值,但对于非凸损失函数可能会稳定在局部极小值处。
**2.随机梯度下降:**在随机梯度下降中,一次提供一个训练样本用于更新权重和偏置,从而使损失函数的梯度减小,然后再转向下一个训练样本。整个过程重复了若干个循环。由于每次更新一次,所以它比 Vanilla 快,但由于频繁更新,所以损失函数值的方差会比较大。
3.小批量梯度下降:该方法结合了前两者的优点,利用一批训练样本来更新参数。

亮点:
1.Vanilla 梯度下降:很慢,难以处理非常大的数据集。能保证收敛到凸损失函数的全局最小值,但对于非凸损失函数可能会稳定在局部极小值处。
2.随机梯度下降:比第一个快,但是由于频繁更新,所以损失函数值得方差会比较大。
3.批量梯度下降,快!准!狠

优化器的使用:
第一个优化器:
GradientDescentOptimizer 中的 learning_rate 参数可以是一个常数或张量。它的值介于 0 和 1 之间。

然后要必须为优化器给定要优化的函数。使用它的方法实现最小化。该方法计算梯度并将梯度应用于系数的学习。该函数在 TensorFlow 文档中的定义如下:
在这里插入图片描述

# 最流行,最简单的梯度下降优化器
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
    train_step = optimizer.minimize(loss)

再加下面这段代码
在这里插入图片描述
馈送给 feed_dict 的 X 和 Y 数据可以是 X 和 Y 个点(随机梯度)、整个训练集(Vanilla)或成批次的。

第二个优化器 tf.train.MomentumOptimizer()。
跟第一个区别就是增加了动量项,就是有两个初始化参数:momentum
在这里插入图片描述
第三个优化器 tf.train.AdadeltaOptimizer()
实现一个自适应的、单调递减的学习率。
跟第一个区别就是多了个单调衰减因子rho。
在这里插入图片描述

第四个优化器 tf.train.RMSpropOptimizer():
在这里插入图片描述
第五个优化器 Adam优化器。
该方法利用梯度的一阶和二阶矩对不同的系数计算不同的自适应学习率:
在这里插入图片描述

除此之外,TensorFlow 还提供了以下优化器:
在这里插入图片描述
通常建议你从较大学习率开始,并在学习过程中将其降低。这有助于对训练进行微调。可以使用 TensorFlow 中的 tf.train.exponential_decay 方法来实现这一点。

根据 TensorFlow 文档,在训练模型时,通常建议在训练过程中降低学习率。该函数利用指数衰减函数初始化学习率。需要一个 global_step 值来计算衰减的学习率。可以传递一个在每个训练步骤中递增的 TensorFlow 变量。函数返回衰减的学习率。
即:
在这里插入图片描述

接下来聊一聊这些优化器各种东西
tf.train.GradientDescentOptimizer()、tf.train.MomentumOptimizer()、f.train.AdamOptimizer()区别

https://www.jianshu.com/p/200f3c4336a3
👆
看! 这个可以,简洁

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!