Muon

[源代码]

Muon

keras.optimizers.Muon(
    learning_rate=0.001,
    adam_beta_1=0.9,
    adam_beta_2=0.999,
    epsilon=1e-07,
    weight_decay=0.1,
    clipnorm=None,
    clipvalue=None,
    global_clipnorm=None,
    use_ema=False,
    ema_momentum=0.99,
    ema_overwrite_frequency=None,
    loss_scale_factor=None,
    gradient_accumulation_steps=None,
    name="muon",
    exclude_layers=None,
    exclude_embeddings=True,
    muon_a=3.4445,
    muon_b=-4.775,
    muon_c=2.0315,
    adam_lr_ratio=0.1,
    momentum=0.95,
    ns_steps=6,
    nesterov=True,
    **kwargs
)

实现 Muon 算法的优化器。

请注意,此优化器不应在以下层中使用:

  1. 嵌入层
  2. 最终输出全连接层
  3. 任何 {0,1}-D 变量

所有这些都应该使用 AdamW 进行优化。

Muon 优化器可以根据以下条件使用 Muon 更新步骤或 AdamW 更新步骤:

  • 对于任何不是 2D、3D 或 4D 的变量,将使用 AdamW 步骤。这是不可配置的。
  • 如果参数 exclude_embeddings(默认为 True)设置为 True,将使用 AdamW 步骤。
  • 对于任何名称与参数 exclude_layers(列表)中列出的表达式匹配的变量,将使用 AdamW 步骤。
  • 任何其他变量使用 Muon 步骤。

通常,您只需将密集连接输出层的名称传递给 exclude_layers,例如 exclude_layers=["output_dense"]

参考文献

参数

  • learning_rate:浮点数、keras.optimizers.schedules.LearningRateSchedule 实例,或不接受任何参数并返回实际值的可调用对象。学习率。默认为 0.001
  • adam_beta_1:浮点数值或常量浮点张量,或不接受任何参数并返回实际值的可调用对象。一阶矩估计的指数衰减率。默认为 0.9
  • adam_beta_2:浮点数值或常量浮点张量,或不接受任何参数并返回实际值的可调用对象。二阶矩估计的指数衰减率。默认为 0.999
  • epsilon:用于数值稳定性的小常数。这是 Kingma 和 Ba 论文中的“epsilon hat”(在第 2.1 节之前的公式中),而不是论文算法 1 中的 epsilon。它将在 AdamW 中使用。默认为 1e-7
  • exclude_layers:字符串列表,要排除的层名称关键字。路径中包含关键字的所有层都将使用 adamw。
  • exclude_embeddings:布尔值。如果为 True,嵌入层将使用 adamw。
  • muon_a:浮点数,muon 算法的参数 a。建议使用默认值。
  • muon_b:浮点数,muon 算法的参数 b。建议使用默认值。
  • muon_c:浮点数,muon 算法的参数 c。建议使用默认值。
  • adam_lr_ratio:浮点数,使用 Adam 时的学习率与主学习率之比。建议将其设置为 0.1。
  • momentum:浮点数,内部 SGD 使用的动量。
  • ns_steps:整数,要运行的 Newton-Schulz 迭代次数。
  • nesterov:布尔值,是否使用 Nesterov 风格的动量 {{base_optimizer_keyword_args}}