在 pytorch 优化器中手动更新动量项

问题描述

Adam 优化器有几个术语,用于为梯度下降算法添加“动量”,使每个变量的步长自适应:

具体来说,在 Adam here 的情况下,我指的是 m-hat 和 v-hat 术语。

但是,有时您可能希望手动更新它们的状态,例如重置变量子集的训练。在 PyTorch 的基于动量的优化器(尤其是 Adam)中有没有办法做到这一点?

解决方法

由于 mhat 和 vhat 依赖于“betas”参数,如果您愿意,您可以在训练期间更新它,如下所示:

optimizer.param_groups[0]['betas'] = (beta1,beta2)

但是,为了解决您的问题,https://github.com/pytorch/pytorch/blob/22b12179db15923007aaec80829766079bb0b9d1/torch/optim/_functional.py#L53 处的源代码似乎不支持直接修改 mhat (exp_avg) 和 vhat(exp_avg_sq,我至少假设)。如果你想这样做,我认为你必须实现你自己的 Adam 优化器函数(如果你只是复制源代码并根据你想使用的内容修改它,这看起来相对简单)。