【diffusers极速入门(四)】EMA 操作是什么?

系列文章目录

  • 【diffusers 极速入门(一)】pipeline 实际调用的是什么? call 方法!
  • 【diffusers 极速入门(二)】如何得到扩散去噪的中间结果?Pipeline callbacks 管道回调函数
  • 【diffusers极速入门(三)】生成的图像尺寸与 UNet 和 VAE 之间的关系
  • 本文将介绍 diffusers 中常见的 EMA 操作。

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
      • 一句话总结⬇️
      • 什么是EMA?
      • 为什么EMA有效?
      • EMA如何工作?
      • 对应的 Diffusers 代码
      • EMA的应用场景
      • 总结


一句话总结⬇️

EMA(Exponential Moving Average of models weights):让模型更稳定、更泛化

什么是EMA?

EMA(Exponential Moving Average,指数移动平均)模型在深度学习中常用于存储模型可学习参数的局部平均值。
可以把它想象成一个“影子模型”,这个影子模型的参数会随着原模型的训练不断更新,但更新的方式不是直接复制,而是以指数衰减的方式逐渐向原模型的参数靠拢

为什么EMA有效?

  • 稳定性提升: 深度神经网络在训练过程中,参数的更新可能会比较剧烈,导致模型在训练集上表现很好,但在测试集上表现不佳。EMA模型通过对参数进行平滑处理,可以有效地减缓模型参数的波动,提高模型的稳定性。
  • 泛化能力增强: EMA模型可以帮助模型找到一个更好的局部最小值,从而提高模型的泛化能力。这是因为EMA模型在一定程度上抑制了模型过拟合的倾向
  • 加速收敛: 在某些情况下,EMA模型可以加速模型的收敛速度。

EMA如何工作?

假设我们有一个模型参数 θ θ θ,它的EMA值为 θ E M A θ_{EMA} θEMA。在每次训练迭代后,我们按照以下公式更新 θ E M A θ_{EMA} θEMA

θ E M A = β ∗ θ E M A + ( 1 − β ) ∗ θ θ_{EMA} = β * θ_{EMA} + (1 - β) * θ θEMA=βθEMA+(1β)θ

其中:

  • β:衰减率,通常取值为0.999或0.9999。β越大,EMA模型对历史参数的权重就越大。
  • θ:当前模型参数。
  • θ_EMA:EMA模型的参数。

对应的 Diffusers 代码

在 diffusers 的官方训练代码中可以找到,路径位于 /path/to/diffusers/examples/unconditional_image_generation/train_unconditional.py

 # Create EMA for the model.
    if args.use_ema:
        ema_model = EMAModel(
            model.parameters(),
            decay=args.ema_max_decay,
            use_ema_warmup=True,
            inv_gamma=args.ema_inv_gamma,
            power=args.ema_power,
            model_cls=UNet2DModel,
            model_config=model.config,
        )

...
parser.add_argument("--ema_max_decay", type=float, default=0.9999, help="The maximum decay magnitude for EMA.")

EMA的应用场景

  • 模型集成: 可以将多个EMA模型的预测结果进行平均,以提高模型的鲁变性。
  • 半监督学习: 在半监督学习中,EMA模型可以用来生成伪标签。
  • 强化学习: 在强化学习中,EMA模型可以用来平滑策略。

总结

EMA是一种简单而有效的技术,可以提高深度学习模型的性能。通过维护模型参数的指数移动平均,EMA模型可以帮助模型找到更好的局部最小值,提高模型的稳定性和泛化能力。

形象地说,EMA模型就像是一个经验丰富的老师,它可以帮助模型更好地学习,避免犯一些常见的错误。

你可能感兴趣的:(Diffusion,AIGC,Transformer,人工智能,深度学习,pytorch,python,AIGC,diffusers)