如何为随机梯度下降选择一个好的步长?

计算科学 优化 随机
2021-11-27 12:32:45

为了在大型时间序列数据集中进行模型拟合,我使用负对数似然的随机梯度下降。该模型是非线性和非凸的。选择一个好的步长是否有经验法则?我可以选择一个非常小的步长来实现稳定但非常缓慢的收敛,但我希望能够选择一个足够大的步长来实现更快的收敛并对其进行退火。

3个回答

根据您的特定系统和大小,您可以尝试其他答案中建议的线搜索方法,例如共轭梯度来确定步长。

但是,如果您的数据量非常大,这可能会变得非常低效且耗时。对于大型数据集,人们通常选择固定步长并在一定次数的迭代后停止和/或在每次通过数据后将步长减小一定百分比,以便您在第一次开始时可以有效地进行大“跳跃”一旦你越来越接近你的解决方案,就放慢速度。您可以使用交叉验证等验证方法来确定步长,并选择一个最小化交叉验证错误的步长。如果您的训练集很大并且您的模型(自由参数的数量)不是非常复杂,那么适用于样本内的步长也可能适用于样本外(测试数据集)。即使是这样,

Netflix 比赛是一个巨大数据集(480,189 名用户和 17,770 部电影,以及数百万个训练集的评分)的一个很好的例子,其中随机梯度下降被用作训练使用的大多数预测模型的主力优化算法。一篇关于 Netflix 竞赛中使用的算法的好论文是竞赛获胜者 Y. Koren 的Factorization Meets the Neighborhood 。为了训练他们的模型,他们通常使用固定的学习率,并且根据经验使用学习率η=0.001似乎对 Netflix 问题很有效。但是,这是高度特定于应用程序的!

我刚刚阅读的博客文章中的另一个建议是指NIPS 2007 教程中的一个演讲:

对样本子集进行一次线搜索,然后将学习率固定为线搜索中的有效步长。

你考虑过线搜索吗?通常,优化问题的收敛证明和收敛轶事都严重依赖于适当的线搜索。