每当我创建一个线性回归模型时,它总是发散,我实在找不到解决方案。但是当我将学习率改为0.0000252时,它就工作了!但另一个问题是,它学的非常慢,我不得不等待模型学习超过10分钟。
如何在不改变学习率的情况下加快学习速度?
回答:
第一个问题是:为什么使用SGD(我在这里假设)。对于线性回归,有更多专门的学习程序,这些程序部分不需要那种超参数调整。也许你在一个非常大规模的设置中,那里SGD是一种有效的方法。
假设基于SGD的学习是可行的方法:
- 你应该使用某种学习时间表
- 至少添加一种学习率衰减,例如在每个epoch后将学习率减少一个因子,例如0.9(是的,又一个超参数)
- 尝试使用某种动量,例如为凸优化开发的Nesterov动量(你的情况是凸的),并且具有强大的保证
- 这种动量甚至在非凸设置中也很流行
- 大多数深度学习库应该提供这种开箱即用的功能
- 你可以尝试使用自适应学习率的算法,如:
- Adam, AdaDelta, AdaGrad, …
- 这些算法试图减轻选择那些学习率超参数的负担,同时尽可能快地收敛
- 当然,它们严格来说是启发式方法,但它们对大多数人似乎都有效(尽管优化后的SGD大多数时候是最好的)
- 大多数深度学习库应该提供这种开箱即用的功能
- 使用专门用于线性模型的软件,如liblinear或其他
还有一件事,因为我惊讶于在这个简单的问题上如此容易观察到发散:标准化你的输入!