错误反向传播算法中的学习率递减

这是一个比较普遍的问题,在我实现的反向传播算法中,我从一个较大的学习率开始,然后在发现错误开始增加而不是缩小时降低学习率。我可以选择在错误略有增加后(状态A)降低学习率,或者在错误即将增加之前(状态B,类似于回滚到之前的“成功”状态)降低学习率。

那么,从数学角度来看,哪一种方法更好呢?或者我是否需要进行两个并行测试,例如从状态A和状态B开始学习,降低学习率,然后比较哪一个下降得更快?

顺便说一下,我还没有尝试过最后一段提到的方法。这个想法是在我写这个问题的时候突然想到的。在当前算法的实现中,我继续从状态A开始学习,并降低学习率,假设学习率的降低幅度较小,不会让我回到之前的方向去寻找全局最小值,如果我只是偶然遇到局部最小值的话。


回答:

你描述的方法属于一类称为学习率调度的技术。仅供你参考,学习率调度技术不止两种:

  • 预定分段恒定学习率
  • 性能调度(看起来与你的方法最相似)
  • 指数调度
  • 幂调度

每种方法的具体表现很大程度上取决于优化器(如SGD、动量、NAG、RMSProp、Adam等)和数据流形(即训练数据和目标函数)。但这些方法已经在深度学习问题中得到了研究。例如,我推荐你阅读Andrew Senior等人撰写的这篇论文,该论文比较了语音识别任务中的各种技术。作者得出的结论是,指数调度表现最佳。如果你对背后的数学原理感兴趣,强烈建议你查看他们的研究。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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