好的,我一直在读一些关于AdamOptimizer在tensorflow的文章。我觉得有些混乱,至少在像我这样的NNs初学者中是这样的。
如果我的理解正确的话,tf.train.AdamOptimizer会保持一个所谓的“适应性学习率”.我认为随着时间的推移,这一学习速度会越来越小。
然而,当我从文档中绘制出学习速率缩放函数时,
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,然后随着时间的推移而增加,慢慢接近极限=用户选择的学习速率。
是不是有点奇怪?我想我错了,但我希望学习率从一个更高的值开始,然后逐渐减少到更小的值。
发布于 2018-04-23 09:15:13
你不能像这样画出亚当的学习速度,因为亚当是一个动量优化器。每个步骤的应用梯度取决于前几步梯度的均值和标准差的移动平均值。
一般情况下,学习收敛没有保证,Adams本身不会直接改变原始学习速率alpha本身。它只使用梯度的动量重新标度。只有当梯度的均值和标准差在达到全局极小时随时间减小时,学习才能很好地收敛,这通常是简单神经网络的情况。
然而,对于高度随机的问题,可能仍然需要实现某种形式的学习速率衰减,以抑制最优参数周围的“振荡”,或者至少使其变小,以确保真正的收敛性。
如果你真的想了解这到底是如何工作的,你可能想读亚当纸,这比乍一看要简单得多。
https://stackoverflow.com/questions/49969957
复制相似问题