这已经完成了吗?
很难证明是否定的,但我怀疑尽管已经进行了大量研究来寻找理想的学习率值(对学习率的需求根本令人烦恼),但它还没有达到建议一个值得近似的全局函数的水平.
问题是学习率调整,和其他超参数调整一样,高度依赖于手头的问题,加上当前使用的其他超参数值,例如层的大小,正在使用哪个优化器,正在使用什么正则化,激活职能。
虽然你可能希望Ψ(ϵ,i|P)存在于 P 是问题域的情况下,它很可能不存在,除了作为所有的平均值Ψ(ϵ,i|D,H)对于问题域,其中 D 是数据集,H 是所有其他超参数。
很可能存在这样一个函数,它具有理想的学习率,可实现每个时期的最佳预期收敛。然而,用足够的细节对其进行采样以使其近似有用会非常昂贵。再加上有限的适用性(不是特定领域的,但与数据和其他超参数相关联),搜索所有可能的学习率轨迹看起来会产生很差的投资回报。
相反,通常的务实方法是:
在超参数搜索中包含学习率,例如网格搜索、随机搜索、遗传算法和其他全局优化器。
使用已成功猜测且实验表明有效的几种方法之一来衰减学习率。这些通常通过绘制损失函数或其他指标的学习曲线来验证,并且在新实验中通常需要相同的跟踪来检查该方法是否仍然有益。
一些优化器使用动态学习率参数,这与您的想法相似,但基于学习期间对测量的反应,而不是基于理想函数的变化。他们有一个起始学习率,然后根据从测量学习进度得出的启发式方法对其进行调整。这些启发式方法可以基于每个时期的测量,例如验证集结果是否在改进。一种这样的方法是在每个 epoch 的结果改善的同时提高学习率,如果结果没有改善或变得更糟,则降低学习率。
我在 Kaggle 比赛中尝试了最后一个选项,它在一定程度上对我有用,但并没有真正改善整体结果——我认为这是 ML 中许多有希望的想法之一,可以让它发挥作用,但这已经不像说 dropout 或使用 CNN 处理图像,不是作为“必须拥有”的。
一些优化器存储每层甚至每个权重的乘数 - RMSProp 和 Adam 例如跟踪每个参数的变化率,并在更新期间调整每个权重的比率。这些在大型网络中可以很好地工作,问题不是在任何时候都需要特定的学习率,而是单个学习率太粗糙,无法覆盖整个索引空间的大范围梯度和梯度差异所有的连接。使用 RMSProp 和 Adam,选择特定学习率或探索它们的需要大大减少,而且库的默认设置通常很好。