如何在不改变学习率的情况下加快线性回归的学习速度

每当我创建一个线性回归模型时,它总是发散,我实在找不到解决方案。但是当我将学习率改为0.0000252时,它就工作了!但另一个问题是,它学的非常慢,我不得不等待模型学习超过10分钟。

如何在不改变学习率的情况下加快学习速度?


回答:

第一个问题是:为什么使用SGD(我在这里假设)。对于线性回归,有更多专门的学习程序,这些程序部分不需要那种超参数调整。也许你在一个非常大规模的设置中,那里SGD是一种有效的方法。

假设基于SGD的学习是可行的方法:

  • 你应该使用某种学习时间表
    • 至少添加一种学习率衰减,例如在每个epoch后将学习率减少一个因子,例如0.9(是的,又一个超参数)
    • 尝试使用某种动量,例如为凸优化开发的Nesterov动量(你的情况是凸的),并且具有强大的保证
      • 这种动量甚至在非凸设置中也很流行
      • 大多数深度学习库应该提供这种开箱即用的功能
  • 你可以尝试使用自适应学习率的算法,如:
    • Adam, AdaDelta, AdaGrad, …
    • 这些算法试图减轻选择那些学习率超参数的负担,同时尽可能快地收敛
      • 当然,它们严格来说是启发式方法,但它们对大多数人似乎都有效(尽管优化后的SGD大多数时候是最好的)
      • 大多数深度学习库应该提供这种开箱即用的功能
  • 使用专门用于线性模型的软件,如liblinear或其他

还有一件事,因为我惊讶于在这个简单的问题上如此容易观察到发散:标准化你的输入!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注