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

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

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

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

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

tensorflow2中调用优化器 tensorflow 优化器原理_随机梯度下降

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

再加下面这段代码

tensorflow2中调用优化器 tensorflow 优化器原理_tensorflow_02


馈送给 feed_dict 的 X 和 Y 数据可以是 X 和 Y 个点(随机梯度)、整个训练集(Vanilla)或成批次的。第二个优化器 tf.train.MomentumOptimizer()。

跟第一个区别就是增加了动量项,就是有两个初始化参数:momentum

tensorflow2中调用优化器 tensorflow 优化器原理_损失函数_03


第三个优化器 tf.train.AdadeltaOptimizer()

实现一个自适应的、单调递减的学习率。

跟第一个区别就是多了个单调衰减因子rho。

tensorflow2中调用优化器 tensorflow 优化器原理_tensorflow2中调用优化器_04

第四个优化器 tf.train.RMSpropOptimizer():

tensorflow2中调用优化器 tensorflow 优化器原理_梯度下降_05


第五个优化器 Adam优化器。

该方法利用梯度的一阶和二阶矩对不同的系数计算不同的自适应学习率:

tensorflow2中调用优化器 tensorflow 优化器原理_tensorflow2中调用优化器_06

除此之外,TensorFlow 还提供了以下优化器:

tensorflow2中调用优化器 tensorflow 优化器原理_随机梯度下降_07


通常建议你从较大学习率开始,并在学习过程中将其降低。这有助于对训练进行微调。可以使用 TensorFlow 中的 tf.train.exponential_decay 方法来实现这一点。根据 TensorFlow 文档,在训练模型时,通常建议在训练过程中降低学习率。该函数利用指数衰减函数初始化学习率。需要一个 global_step 值来计算衰减的学习率。可以传递一个在每个训练步骤中递增的 TensorFlow 变量。函数返回衰减的学习率。

即:

tensorflow2中调用优化器 tensorflow 优化器原理_损失函数_08

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

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