【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模型就像是一个经验丰富的老师,它可以帮助模型更好地学习,避免犯一些常见的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值