这是一个比较普遍的问题,在我实现的反向传播算法中,我从一个较大的学习率开始,然后在发现错误开始增加而不是缩小时降低学习率。我可以选择在错误略有增加后(状态A)降低学习率,或者在错误即将增加之前(状态B,类似于回滚到之前的“成功”状态)降低学习率。
那么,从数学角度来看,哪一种方法更好呢?或者我是否需要进行两个并行测试,例如从状态A和状态B开始学习,降低学习率,然后比较哪一个下降得更快?
顺便说一下,我还没有尝试过最后一段提到的方法。这个想法是在我写这个问题的时候突然想到的。在当前算法的实现中,我继续从状态A开始学习,并降低学习率,假设学习率的降低幅度较小,不会让我回到之前的方向去寻找全局最小值,如果我只是偶然遇到局部最小值的话。
回答:
你描述的方法属于一类称为学习率调度的技术。仅供你参考,学习率调度技术不止两种:
- 预定分段恒定学习率
- 性能调度(看起来与你的方法最相似)
- 指数调度
- 幂调度
- …
每种方法的具体表现很大程度上取决于优化器(如SGD、动量、NAG、RMSProp、Adam等)和数据流形(即训练数据和目标函数)。但这些方法已经在深度学习问题中得到了研究。例如,我推荐你阅读Andrew Senior等人撰写的这篇论文,该论文比较了语音识别任务中的各种技术。作者得出的结论是,指数调度表现最佳。如果你对背后的数学原理感兴趣,强烈建议你查看他们的研究。