【发布时间】:2021-05-14 17:50:23
【问题描述】:
Adam 优化器有几个术语用于向梯度下降算法添加“动量”,使每个变量的步长自适应:
具体来说,对于 Adam here,我指的是 m-hat 和 v-hat 术语。
不过,有时您可能希望手动更新它们的状态,例如为变量子集重置训练。在 PyTorch 的基于动量的优化器(尤其是 Adam)中有没有办法做到这一点?
【问题讨论】:
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 优化器功能(如果您只是复制源代码并根据您想要使用的内容进行修改,这似乎相对简单)。
【讨论】: