为什么在pytorch中学习率(LR)不会低于1e-08?

时间:2019-03-06 15:23:29

标签: optimization deep-learning pytorch gradient-descent

我正在训练一个模型。为了克服过度拟合的问题,我已经进行了优化,数据扩充等。我有一个更新的LR(我尝试过SGD和Adam),并且当出现停顿(也尝试过一步)时,学习率会降低一个因子,直到达到到达LR 1e-08,但不会低于该值,并且此后我的模型验证被卡住了。我尝试将epsilon参数传递给Adam建议一个较小的值,但它仍然卡在LR 1e-08上。我还通过了重量衰减,但这并没有改变情况。都没有将amsgrad设置为true。

我进行了一些研究,人们认为Adam优化器存在固有的问题,但是没有提到学习率-每次讨论都补充说,使用SGD不会有问题。

这是为什么?是错误还是设计错误,是因为作者认为在那之后毫无意义的小价值?看来为我的数据集提供一个较小的学习速率确实会有所帮助,因为在学习速率降至LR 1e-08之前,一切似乎都很好。

2 个答案:

答案 0 :(得分:2)

我个人不知道学习率的下限(0.0除外)。但是您可以通过在计算反向传递之前减少损失来达到降低学习率的效果:

outputs = model(batch)
loss = criterion(outputs, targets)

# Equivalent to lowering the learning rate by a factor of 100
loss = loss / 100

self.optimizer.zero_grad()
loss.backward()
self.optimizer.step()

答案 1 :(得分:0)

理查德的工作应该很好,但是如果有人愿意知道的话,我也得到了官方的答复。

为ReduceLROnPlateau调度程序的(而不是Adam的)eps参数设置较小的值已起作用。

eps(float)–应用于lr的最小衰减。如果新旧lr之间的差异小于eps,则忽略该更新。默认值:1e-8。