LossScaleOptimizer 类keras.optimizers.LossScaleOptimizer(
inner_optimizer, initial_scale=32768.0, dynamic_growth_steps=2000, name=None, **kwargs
)
一个动态缩放损失以防止下溢的优化器。
损失缩放是一种在float16用于数值计算时防止中间梯度发生数值下溢的技术。为了防止下溢,损失值会被乘以(或“缩放”)一个称为“损失尺度”的特定因子,这会导致中间梯度也按损失尺度进行缩放。最终的梯度会被除以(或“反缩放”)损失尺度,使其恢复到原始值。
LossScaleOptimizer 包装了另一个优化器,并对其应用动态损失缩放。此损失尺度会随着时间动态更新,具体如下: - 在任何一个训练步,如果遇到非有限梯度,损失尺度就会减半,并且该训练步会被跳过。 - 如果自上次更新损失尺度以来已经发生了 dynamic_growth_steps 次训练步,并且没有出现非有限梯度,则损失尺度会加倍。
参数
keras.optimizers.Optimizer 实例。dynamic_growth_steps 步后,损失尺度会加倍。False。如果为 True,则应用指数移动平均 (EMA)。EMA 包括在模型权重(随着训练批次更新)上计算权重的指数移动平均,并定期用其移动平均值覆盖权重。use_ema=True 时使用。这是在计算模型权重 EMA 时使用的动量:new_average = ema_momentum * old_average + (1 - ema_momentum) * current_variable_value。use_ema=True 时使用。每进行 ema_overwrite_frequency 步迭代,我们就用其移动平均值覆盖模型变量。如果为 None,优化器不会在训练中间覆盖模型变量,您需要通过调用 optimizer.finalize_variable_values()(该函数会就地更新模型变量)来显式覆盖变量。使用内置的 fit() 训练循环时,这会在最后一个 epoch 之后自动完成,您无需执行任何操作。None。如果是浮点数,将用该缩放因子乘以损失值,然后再计算梯度,并将梯度的逆乘以缩放因子,然后再更新变量。有助于防止混合精度训练期间的下溢。或者,keras.optimizers.LossScaleOptimizer 会自动设置损失缩放因子。None。如果为整数,模型和优化器变量将不会在每一步更新;而是每 gradient_accumulation_steps 步更新一次,使用自上次更新以来的平均梯度值。这被称为“梯度累积”。当您的批次大小非常小时,这可能很有用,目的是减少每次更新步骤中的梯度噪声。EMA 频率将查看“累积”的迭代次数(optimizer steps // gradient_accumulation_steps)。学习率调度器将查看“实际”的迭代次数(optimizer steps)。