Okey我一直在阅读有关tensorflow中关于AdamOptimizer的一些帖子。我认为存在一些混乱,至少在像我这样的NN中的初学者中存在。
如果我理解正确,tf.train.AdamOptimizer会保持所谓的适应性学习率"。我认为随着时间的推移,这种学习率会变小。
但是,当我绘制学习率缩放的函数时,取自docs,
t <- t + 1
lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)
这就是我得到的:
t = np.arange(200)
result = np.sqrt(1-0.999**t)/(1-0.9**t)
plt.plot(result)
plt.show
因此,对于t = 1,用户选择的学习率的值乘以0.3然后它快速下降直到其值的0.15,然后随着时间增加,慢慢接近极限=用户选择的学习率。
难道有点奇怪吗?我想我错了,但我希望学习率从更高的值开始,然后逐渐减小到更小的值。
答案 0 :(得分:3)
你无法真实地绘制这样的亚当学习率,因为亚当是一个动量优化者。每个步骤应用的梯度取决于平均值的移动平均值和先前步骤的梯度的标准偏差。
一般来说,无法保证学习收敛,原始学习率alpha
本身不会被亚当斯直接改变。它仅使用渐变的动量重新缩放。如果梯度的均值和标准偏差在达到全局最小值时随时间减小,则学习仅收敛得很好,这通常是简单神经网络的情况。
对于高度随机问题,人们可能仍然需要实施某种形式的学习率衰减来抑制“振荡”。围绕最佳参数,或者至少使它们变小以确保确实存在收敛。
如果你真的想要了解它是如何工作的,你可能想要阅读Adam paper,它比初看起来要简单得多。