美文网首页
Adam优化器的学习率(learning rate)的困惑

Adam优化器的学习率(learning rate)的困惑

作者: zelda2333 | 来源:发表于2020-05-22 20:50 被阅读0次

    链接:Adam优化器的学习率(learning rate)的困惑?
    问题:
    优化器选用tf.train.AdamOptimizer的优化器,参数全部默认:learning_rate=0.001, beta1=0.9, beta2=0.999。训练中曲线出现间歇性的剧烈下跌,然后恢复的情况。还有一些网络出现断崖式下跌然后固定一个值并且不再能够恢复。通过减小学习率,如0.0001,可以解决一些不稳定情况(当然训起来确实慢了)。

    这就引起我对Adam优化器学习率的一些疑问,因为Adam的实现我一直以为是包含了学习率的衰减的,所以我用Adam一直是0.001的固定值。后来看到官方的document解释学习率的更新是这样的:(下面的learning_rate指设定值0.001,lr_t指训练时的真实学习率)

    t <- t + 1

    lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

    lr_t是每一轮的真实学习率。那么这就带来一个问题,即按照default来设定beta1、beta2两个参数,学习率并不是随着训练轮数t而递减的,其曲线是一个先降后升的曲线(而且降的部分很短),最后接近1倍learning_rate(设定值)。关于这个问题,我找到了两种解释:

    1、文档写错了,beta1、beta2写反了。(来自stackoverflow上某一个问题的答案,抱歉实在找不到了)翻过来计算后lr_t确实变成一个下降曲线了。但是最后lr_t还是会趋向于learning_rate,而且文档写错概率很小吧。

    2、也是来自于stackoverflow的一个解释,见下面链接的最高票答案。意思大概是lr_t的更新就是前期先降低,以完成训练初期的“normalize”(这个没太看懂);而后随着t变得很大,lr_t会越来越接近设定值learning_rate。总体来讲,相当于只用默认Adam的话,学习率从头到尾都是固定的。

    https://stackoverflow.com/questions/37842913/tensorflow-confusion-regarding-the-adam-optimizer/37843152#37843152

    所以现在问题有两个:

    1、tf中的Adam的学习率迭代的实现原理到底是什么?是否就是没有做关于学习率的退火?

    2、Adam确实是可以自适应的,但我所理解的是Adam结合动量和RMS可以让训练的方向更准确,很多时候还是需要学习率衰减的。如果tf中的Adam确实是没有考虑学习率衰减,是不是完整的Adam优化器用法都应该配合tf.train.exponential_decay这样的工具,手动设置学习率的衰减?

    答: 你自己定义的lr是不变的,但作用到具体运算中是lr乘一个系数,这个系数是变得,所谓自适应是adam通过改变这个系数实现实际学习率变化,而不是改变你定义的lr

    拿用python写代码具体点来理解就是:
    你认为lr的更新是这样的:

    你可能理解的做法

    实际的更新是这样的:

    实际更新做法

    这就导致lr确实没发生变化,但实际作用中确实是根据情况调整了学习速率,adam的具体算法和对lr更新的理解如下:

    参考:
    深度学习中的Adam优化算法详解

    相关文章

      网友评论

          本文标题:Adam优化器的学习率(learning rate)的困惑

          本文链接:https://www.haomeiwen.com/subject/fzbcahtx.html