Tensorflow中的优化器

Tensorflow中的优化器

优化器是用于通过调整各种参数和权重来减少损失(错误)的技术或算法,从而使损失函数最小化,更快地提供更好的模型精度。

Tensorflow中的优化器

优化器是Tensorflow的一个扩展类,它被初始化为模型的参数,但没有给它提供张量。Tensorflow提供的基本优化器是。

tf.train.Optimizer - Tensorflow version 1.x
tf.compat.v1.train.Optimizer - Tensorflow version 2.x

该类从未被直接使用,但其子类被实例化。

梯度下降算法

在解释之前,让我们先了解一下其他算法的基础,即梯度下降算法。梯度下降将权重和损失函数联系起来,因为梯度意味着变化的度量,梯度下降算法确定应该做什么来使用部分导数最小化损失函数–比如增加0.7,减少0.27等等。但是,在大型多维数据集的情况下,当它卡在局部最小值而不是全局最小值时就会出现障碍。

语法:

 tf.compat.v1.train.GradientDescentOptimizer(learning_rate, 
                                                    use_locking,
                                                    name = 'GradientDescent)

参数:
learning_rate:算法更新参数的速率。张量或浮点数类型的值。
use_locking:在更新操作中使用锁,如果是真的。
name:操作的可选名称。

Tensorflow Keras优化器类

Tensorflow主要支持9个优化器类,包括其基类(Optimizer)。

  • Gradient Descent
  • SGD
  • AdaGrad
  • RMSprop
  • Adadelta
  • Adam
  • AdaMax
  • NAdam
  • FTRL

SGD 优化器(Stochastic Gradient Descent)

随机梯度下降(SGD)优化方法为每个训练实例执行参数更新。在巨大的数据集的情况下,SGD执行多余的计算,导致频繁的更新,具有较高的差异性,导致目标函数变化很大。

语法:

tf.kears.optimizers.SGD(learning_rate = 0.01,
                                momentum=0.0, 
                                nesterov=False, 
                                name='SGD', 
                                **kwargs)

参数:
learning_rate:算法更新参数的速率。张量或浮点类型的值。默认值是0.01。
momentum:在适当的方向上加速梯度下降。Float类型的值。默认值为0.0
nesterov:是否应用Nesterov Momentum。布尔类型的值。默认值为False。
name:操作的可选名称
**kwargs:关键字的可变长度参数长度。

优势:

1.需要更少的内存。
2.频繁地改变模型参数。
3.如果使用Momentum,那么有助于减少噪音。

劣势:

1.高差异性
2.计算上很昂贵

AdaGrad 优化器

AdaGrad是指自适应梯度算法。AdaGrad优化器对学习率进行修改,特别是针对个别特征,即数据集中的某些权重可能比其他权重有不同的学习率。

语法:

 tf.keras.optimizers.Adagrad(learning_rate=0.001,
                                     initial_accumulator_value=0.1,
                                     epsilon=1e-07,
                                     name="Adagrad",
                                     **kwargs)

参数:
learning_rate:算法更新参数的速率。 张量或浮点类型的值。默认值是0.001
initial_accumulator_value:每个参数动量的起始值。浮点类型的值。必须为非负值。默认值为0.1。
epsilon:用于维持数值稳定性的小值。 浮点类型的值。默认值为1e-07。
name:操作的可选名称。
**kwargs:关键字的可变长度参数长度

优势:

1.最适用于稀疏数据集
2.学习率随迭代而更新

劣势:

1.随着神经网络深度的增加,学习率变得很小
2.可能导致死神经元问题

RMSprop 优化器

RMSprop是均方根传播的意思。RMSprop优化器不允许梯度累积为动力,而只累积特定固定窗口的梯度。它可以被认为是AdaGrad的更新版本,并有一些改进。RMSprop使用简单动量而不是Nesterov动量。

语法:

tf.keras.optimizers.RMSprop(learning_rate=0.001, 
                                    rho=0.9, 
                                    momentum=0.0, 
                                    epsilon=1e-07, 
                                    centered=False,
                                    name='RMSprop', 
                                    **kwargs)

参数:
learning_rate:算法更新参数的速度。张量或浮点类型的值。默认值是0.001
rho:梯度的折扣系数。默认值为0.9
momentum:在适当的方向上加速rmsprop。浮动类型的值。默认值为0.0
epsilon:用于维持数值稳定性的小值。浮点类型的值。默认值为1e-07
centered:通过这个梯度被梯度的方差规范化。布尔类型的值。设置为 “真 “可能有助于训练模型,但是它的计算成本更高。默认值为False。
name:操作的可选名称
**kwargs:关键字的可变长度参数长度。

优势:

1.学习率会自动调整。
2.每个参数的离散学习率

劣势:学习缓慢

Adadelta 优化器

自适应三角洲(Adadelta)优化器是AdaGrad的一个扩展(类似于RMSprop优化器),然而,Adadelta摒弃了学习率的使用,取而代之的是三角洲平方的指数移动平均值(当前权重与更新权重之差)。它还试图消除学习率衰减的问题。

语法:

tf.keras.optimizers.Adadelta(learning_rate=0.001, 
                                     rho=0.95, 
                                     epsilon=1e-07, 
                                     name='Adadelta',
                                     **kwargs)

参数:
learning_rate:算法更新参数的速度。 张量或浮点类型的值。默认值是0.001
rho:衰减率。张量或浮点类型的值。默认值为0.95
epsilon:用于维持数值稳定性的小数值。 浮点类型的值。默认值为1e-07
name: 操作的可选名称
**kwargs:关键字的变长参数长度

优点:不需要设置默认学习率。

劣势:计算成本高

Adam 优化器

自适应时刻估计法(Adam)是目前使用的最顶级的优化技术之一。在这种方法中,每个参数的自适应学习率被计算出来。这种方法结合了RMSprop和动量的优点,即储存以前梯度的衰减平均值和以前的平方梯度。

语法:

tf.keras.optimizers.Adam(leaarning_rate=0.001, 
                                 beta_1=0.9, 
                                 beta_2=0.999, 
                                 epsilon=1e-07, 
                                 amsgrad=False,
                                 name='Adam', 
                                 **kwargs)

参数:
learning_rate:算法更新参数的速度。 张量或浮点类型的值。默认值是0.001
beta_1:第一时刻的指数衰减率。常数 浮动张量或浮动类型的值。默认值为0.9。
beta_2:第二时刻的指数衰减率。恒定的浮动张量或浮动类型的值。默认值为0.999
epsilon:用于维持数值稳定性的小数值。浮点类型的值。默认值为1e-07
amsgrad: 是否使用AMSGrad变量。默认值为False。
name: 操作的可选名称
**kwargs:关键字的变长参数长度

优势:

1.易于实施
2.需要更少的内存
3.计算效率高

劣势:

1.可能有体重下降的问题
2.有时可能无法收敛到最优解

AdaMax 优化器

AdaMax是Adam优化器的一个改进。它建立在对低阶矩的自适应近似上(基于无穷大规范)。有时在嵌入的情况下,AdaMax被认为比Adam更好。

语法:

tf.keras.optimizers.Adamax(learning_rate=0.001, 
                                   beta_1=0.9, 
                                   beta_2=0.999, 
                                   epsilon=1e-07,
                                   name='Adamax', 
                                   **kwargs)

参数:
learning_rate:算法更新参数的速度。 张量或浮点类型的值。默认值是0.001
beta_1:第一时刻的指数衰减率。常数 浮动张量或浮动类型的值。默认值为0.9。
beta_2:加权无穷大准则的指数衰减率。恒定的浮动张量或浮动类型的值。默认值为0.999
epsilon:用于维持数值稳定性的小数值。浮点类型的值。默认值为1e-07
name: 操作的可选名称
**kwargs:关键字的变长参数长度

优势:

1.无限的秩序使算法稳定。
2.需要对超参数进行较少的调整

劣势:泛化问题

NAdam 优化器

NAdam是Nesterov和Adam优化器的简称。NAdam使用Nesterov动量来更新梯度,而不是Adam使用的vanilla动量。

语法:

tf.keras.optimizers.Nadam(learning_rate=0.001, 
                                  beta_1=0.9, 
                                  beta_2=0.999, 
                                  epsilon=1e-07,
                                  name='Nadam', 
                                  **kwargs)

参数:
learning_rate:算法更新参数的速度。张量或浮点类型的值。默认值是0.001
beta_1:第一时刻的指数衰减率。常数 浮动张量或浮动类型的值。默认值为0.9。
beta_2:加权无穷大准则的指数衰减率。恒定的浮动张量或浮动类型的值。默认值为0.999
epsilon:用于维持数值稳定性的小数值。浮点类型的值。默认值为1e-07
name: 操作的可选名称
**kwargs:关键字的变长参数长度

优势:

1.对高曲率的梯度或噪声梯度有更好的结果。
2.学得更快

缺点:有时可能无法收敛到最优解

FTRL 优化器

Follow The Regularized Leader(FTRL)是一种最适合于具有稀疏和大特征空间的浅层模型的优化算法。该版本同时支持收缩型L2正则化(L2惩罚和损失函数之和)和在线L2正则化。

语法:

tf.keras.optimizers.Ftrl(learning_rate=0.001, 
                                 learning_rate_power=-0.5, 
                                 initial_accumulator_value=0.1,
                                 l1_regularization_strength=0.0, 
                                 l2_regularization_strength=0.0,
                                 name='Ftrl', 
                          l2_shrinkage_regularization_strength=0.0, 
                                 beta=0.0,
                                 **kwargs)

参数:
learning_rate:算法更新参数的速度。张量或浮点类型的值。默认值是0.001
learning_rate_power:控制训练期间学习率的下降。浮点数类型的值。应小于或等于0。默认值为-0.5。
initial_accumulator_value:累积器的初始值。该值应大于或等于0。默认值为0.1。
l1_regularization_strength:稳定化惩罚。只允许正值或0。浮动类型的值。默认值是0.0。
l2_regularization_strength:稳定化惩罚。只允许正值或0。浮动类型的值.默认值是0.0
name:操作的可选名称
l2_shrinkage_regularization_strength:幅度罚金。只允许正值或0。浮动类型的值。默认值为0.0。
beta:默认的浮点数为0.0
**kwargs:关键字的变长参数长度

优点:能更好地减少损失函数。

劣势:

1.如果正则器的范围不够,就不能达到足够的稳定性。
2.如果正则器的范围很大,那么它离最优决策就很远了。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Tensorflow 教程