让我们假设我的成本函数,它的斜率从 z=2 的点 A 上升到 z=4 的 B;在 z=4 处保持不变直到 C;在 z=1 处下降到 D;在 z=5 时上升到 E。

如果我在 B 点和 C 点之间选择起点,则成本函数的微分将为 0(因为斜率为 0)。因此 theta 永远不会改变它的值。
那么,我的函数如何在 D 处达到最小值?
让我们假设我的成本函数,它的斜率从 z=2 的点 A 上升到 z=4 的 B;在 z=4 处保持不变直到 C;在 z=1 处下降到 D;在 z=5 时上升到 E。

如果我在 B 点和 C 点之间选择起点,则成本函数的微分将为 0(因为斜率为 0)。因此 theta 永远不会改变它的值。
那么,我的函数如何在 D 处达到最小值?
它不会——梯度下降只会找到一个局部最小值*,而“高原”就是其中之一。
但是,有几种方法可以修改梯度下降来避免此类问题。一种选择是多次重新运行下降算法,每次运行使用不同的起始位置。在 B 和 C 之间开始的运行将收敛到 z=4。在 D 和 E 之间开始的运行将收敛到 z=1。由于它更小,您将确定 D 是(最佳)局部最小值并选择该值。
或者,您可以添加动量项。想象一个沉重的炮弹从山上滚下来。它的动量使它继续穿过小山坡,直到它落到底部。通过考虑这个时间步长和之前的梯度,您可以跳过(较小的)局部最小值。
简单的答案:不会。
梯度下降爬下一座小山。如果它达到一个平台,它认为算法收敛并且不再移动。
如果您认为这是梯度下降的错误,那么您应该知道多模态问题非常困难并且超出了精细网格搜索的范围(这很容易在计算上过于昂贵,并且需要您确定必须解决的区域),对于多模态问题没有真正的通用算法。
处理此问题的一种简单方法是从随机起点多次重新启动爬山算法(对不起,我习惯于最大化术语,而不是最小化)并使用您获得的最佳解决方案。如果问题是单模态的,那么您的所有解决方案都应该相对接近。如果问题是多模式的,希望您的随机起点之一是在正确的山坡上。
关于梯度下降,你只需要知道一件事。它完全是垃圾,是一个绝对可怕的算法,除非有至少数亿个变量,否则不应该考虑它,在这种情况下,不要指望它能很好地工作,除非一遍又一遍地解决同一个问题再次,已经找到了良好的学习率值。这是穷人最陡峭下降的无保障版本,即使是有保障的形式也是糟糕的。使用信任区域或线搜索准牛顿方法会更好。不要自己写。
梯度下降是用词不当。它甚至可能不会下降。使用信任区域或行搜索的受保护算法要么下降,要么在无法下降时终止。从某种意义上说,“学习率”是由算法根据它们遇到的情况自适应地确定的。它们不会像梯度下降那样过冲,并且可以在必要时自动加速。一个世纪前,梯度下降甚至不是一个好的算法。
延长的零斜率区域可能会导致任何优化算法出现问题,除非它是严格的全局优化算法。严格的全局优化算法,例如基于分支定界的,确实存在(我不是在谈论遗传算法和其他启发式垃圾,它们在道德上等同于梯度下降),但如果是,则可能无法成功解决问题太大或太难,可能无法接受所有功能。如果可能,您的本地优化算法算法应检查二阶最佳条件。这将区分局部最小值与局部最大值或鞍点。
如其他答案所述,运行具有多个不同起始值的局部优化算法是一个好主意。但是该算法通常不应该是梯度下降。
在我看来,Andrew Ng 教梯度下降对人们造成了极大的伤害。人们认为他们知道如何优化,但他们并不知道如何优化或优化,就像一个 3 岁的孩子用安慰剂方向盘“驾驶”一辆附在超市购物车前面的塑料汽车对驾驶所做的那样。(为了某位评论者的利益,他声称我将他(她)的问题明确表述为一个约束优化问题,他说我只是重复了他(她)的问题,并且在事后施加约束并不是解决优化问题的好方法,然后在我解释了约束优化的工作原理后拒绝改变他(她)的观点,这不是“事后”施加约束,并且有一个非常完善的约束优化理论和实用的现成软件来解决约束优化问题,然后他(她)否决了这个非常详细、深思熟虑和友好的答案,并写道我们都同意我没有回答他(她)的问题)有实用的现成软件来解决约束优化问题,显然许多从 Andrew Ng 等人“学习”优化的人甚至不知道存在。非专业人士不会很好地编写自己的约束优化软件(或无约束优化软件)。Andrew Ng 让人们认为他们可以做到,这对他们造成了伤害。也没有必要这样做,因为存在好的优化软件,尽管 R 充斥着不太好的优化软件。例如,为了利用特殊问题结构而对现成软件进行的任何改进都不太可能由数值优化和数值分析方面的专家以外的人有效地进行。