gpt4 book ai didi

machine-learning - Pytorch:当优化器必须调用 Zero_grad() 来帮助累积梯度时,带有动量的 SGD 如何工作?

转载 作者:行者123 更新时间:2023-11-30 08:57:28 24 4
gpt4 key购买 nike

在pytorch中,backward()函数会累积梯度,我们必须通过调用optimizer.zero_grad()在每个小批量中重置它。在这种情况下,当动量 SGD 实际上使用过去一些小批量的指数平均值更新权重时,动量 SGD 是如何工作的。

对于 Pytorch 的初学者来说,我很困惑。是否需要有过去的梯度来执行更新。

最佳答案

使用动量时,您需要存储每个参数的单元素历史记录,其他求解器(例如 ADAM)需要更多。优化器知道如何存储这些历史数据并以有序的方式积累新的梯度。您不必担心。

那么,您可能会问自己为什么要zero_grad()
好吧,有时整个小批量不适合 GPU 内存,您希望将其处理分成几个“迷你”小批量,但不减少用于计算梯度和权重更新的有效批量大小。
在这种情况下,您调用 zero_grad() 一次,对所有迷你批处理执行 forwardbackward,然后才调用 optimizer。 step() - 此步骤对所有迷你批处理的梯度进行平均,您将获得有效的更新,就像运行单个迷你批处理一样。请参阅this thread更多细节。

有关 pytorch 中的梯度和优化器的更多信息可以找到 herehere .

关于machine-learning - Pytorch:当优化器必须调用 Zero_grad() 来帮助累积梯度时,带有动量的 SGD 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53981485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com