这个问题主要是针对Keras或tf.keras
的运行机制,适合对该框架有非常深入了解的人
据我所知,tf.keras.optimizers.Adam
是一种已经具备自适应学习率方案的优化器。因此,如果我们使用from keras.callbacks.ReduceLROnPlateau
与Adam
优化器或其他优化器,这么做不是毫无意义吗?我对基于Keras
的Optimizer
的内部运作了解不多,但对我来说,如果我们使用自适应优化器,为什么还要使用这个回调函数呢?如果我们使用这个给定的回调函数,它对训练会有何影响?
回答:
从概念上讲,请将梯度视为自动微分得到的一个固定的数学值。
除了纯SGD之外的所有优化器所做的就是获取梯度并应用一些统计分析来创建一个更好的梯度。在最简单的例子中,动量优化将梯度与之前的梯度进行平均。在RMSProp中,测量批次间梯度的方差 – 梯度越嘈杂,RMSProp对梯度的信任就越少,因此梯度被减小(除以该权重的梯度标准差)。Adam同时使用这两种方法。
然后,所有优化器都会将经过统计调整的梯度乘以一个学习率。
因此,尽管Adam的一个通俗描述是它自动调整学习率……但更详细的描述是Adam统计调整梯度以使其更可靠,但你仍然需要决定学习率以及它在训练过程中如何变化(例如,学习率策略)。ReduceLROnPlateau、余弦衰减、预热等都是学习率策略的例子。
无论你是编程使用TensorFlow还是PyTorch,PyTorch的优化器伪代码是我理解优化器算法的首选。乍一看,这似乎是一堆希腊字母,但如果你盯着它看几分钟,你会理解的。