我们可以使用梯度下降来找到全局/局部最大值吗?最大化功能需要什么类型的问题?我们可以用GD做吗?有人可以用与机器学习相关的例子来解释我的问题吗?
提前致谢。
我们可以使用梯度下降来找到全局/局部最大值吗?最大化功能需要什么类型的问题?我们可以用GD做吗?有人可以用与机器学习相关的例子来解释我的问题吗?
提前致谢。
理论上,可以使用梯度下降找到全局最小值。
然而,在现实中,这种情况很少发生——也几乎不可能证明你有全局最小值!
假设我们有一个 2d 损失表面;如下图的损失曲线。为了达到全局最小值(曲线上的最低点),您需要朝着最小值稳步前进,并减少您在途中所采取的步骤的大小,以免超过最小值(左图)。如果你减速太快,你永远不会达到最小值(中间图)。如果你做得恰到好处,你就会达到全局最小值(右图)。这些跳跃的大小由学习率控制,学习率乘以反向传播的每次迭代中的损失。
对于这一理论成就,该理论要求损失曲线是凸的——这意味着它的形状类似于图中的形状。这是最近的一篇论文,更详细地探讨了这一点。标题说明了一切:梯度下降发现深度神经网络的全局最小值
有一些方法可以增加成功的机会,通常涉及使用动态学习率,该学习率会根据模型的学习速度进行调整,即在从训练集学习的同时,它在验证数据集上的改进程度。如右上图所示,随着损失曲线变平,最好降低学习率。
实际上,我们正在搜索的“损失表面”不是二维的,而是具有更高的阶数,例如 200。诸如模型的随机初始化之类的事情可能会影响您最终进入哪个模型。
这也许就是为什么使用集成方法(模型组)通常比单个模型表现更好的原因。它更彻底地探索了损失情况,并增加了找到更好最小值的几率。
如果一个模型似乎可以覆盖(通过例如验证集上的损失停止改进来验证),但测试集上的结果似乎远非最优或应该是可能的,那么可能是算法已经结束的情况在当地最低限度,无法逃脱。
您可以想象,参数的更新变得如此之小,以至于它不再“活跃”或没有足够的能量跳出最小的最小值。解决这种情况(或防止这种情况)的常用方法包括:
这是一篇关于这些优化器和模拟退火作为“跳出”局部最小值的另一种方式的精彩博客文章。