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.如果正则器的范围很大,那么它离最优决策就很远了。