【问题标题】:Neural Network optimization神经网络优化
【发布时间】:2018-02-21 17:25:24
【问题描述】:
我正在尝试了解 keras 中 ReduceLROnPlateau() 函数的用途。
我了解到,当验证损失没有改善时,此功能有助于降低学习率。但这不会使网络无法摆脱局部最小值吗?如果网络在大约 5 个 epoch 内保持局部最小值,并且这个函数进一步降低了学习率,而提高学习率实际上会帮助网络摆脱这样的局部最小值怎么办?
换句话说,它如何理解它是否达到了局部最小值或平稳状态?
【问题讨论】:
标签:
optimization
machine-learning
neural-network
deep-learning
keras
【解决方案1】:
首先,CS231n class 很好地解释了为什么学习率衰减是合理的一般:
在训练深度网络时,退火通常是有帮助的
学习率随时间变化。要记住的良好直觉是
学习率高,系统包含过多的动能和
参数向量乱跳乱跳,无法安定下来
进入损失函数更深但更窄的部分。知道什么时候
衰减学习率可能很棘手:慢慢衰减它,你会
浪费计算几乎没有混乱地弹跳
长期改善。但是过于激进地衰减它并且
系统冷却过快,无法达到最佳位置
可以。
关于你的问题,很遗憾,你不知道。如果优化器遇到了一个深谷并且无法摆脱它,它只是希望这个谷是好的并且值得以较小的学习率进行探索。目前,没有技术可以判断是否有更好的山谷,即它是局部最小值还是全局最小值。所以优化器会下注去探索当前的,而不是跳得很远重新开始。实践证明,没有哪一个局部最小值比其他最小值差很多,这就是这种策略经常奏效的原因。
另请注意,对于某些学习率,损失表面可能看起来像一个平台,但对于小 10 倍的学习率则不会。所以“逃离高原”和“逃离局部最小值”是不同的挑战,ReduceLROnPlateau 的目标是第一个。