为什么动量因子大于 1 是个坏主意?数学动机/原因是什么?
为什么动量因子必须在 0-1 范围内?
如果您只想要特定问题的答案,您可以跳到答案的最后一部分。要详细回答动量是一个技术上不正确的术语,我宁愿称之为惯性学习。
惯性 -惯性是任何物理对象对其位置和运动状态发生任何变化的阻力。
beta
动量项在哪里。如果我们扩展表达式,我们会得到如下内容:
Courtsey:具有动量的随机梯度下降
这S_t
是梯度或dels
特定训练示例。显然,这是针对 3 个示例训练集的。
现在我们为什么要使用动量?正如@Andreas Storvik Strauman 提供的链接一样,您可以轻松地深入研究数学的用法。但是为了更直观的感觉这里有几点需要注意:
- 指数加权的术语可以被认为是你所学内容的过去记忆。你不想完全忘记它,所以你不断地修改它,修改它的权重随着时间的推移而减少。已经迭代的训练示例的向量更新越来越小,而在正常梯度下降中它完全不存在。
- 动量项可以被认为起到阻尼作用,它不允许新的训练样本完全发挥作用。您可以通过取 2 个点和一条直线来可视化这一点,更新方案与线和点之间的距离成正比,然后检查法线和动量梯度下降方法。因此,具有动量的梯度下降是一种阻尼振荡,因此总是有更高的收敛机会。
- 当您到达损失曲线中斜率为 0 的点时,惯性学习也会有所帮助。正常学习会导致该位置的权重更新非常小,但通过惯性学习,该位置将很容易越过。
至于您最初关于为什么动量项 <1 的问题,以下是大多数答案都遗漏的几点:
- 首先,如果
beta > 1
,先前训练示例的权重将成倍增加。(就像1.01^1000 = 20959
在 1000 次迭代之后)。这可以通过相应地增加来处理learning rate
,但不仅需要大量额外的计算,而且在数学上几乎是不可能的。 - 其次,具有
r >= 1
共同比率的指数级数永远不会收敛。它继续变得越来越大。另外,如果你可以用连续函数画平行线,这就是我们所说的函数,它不是绝对可积函数。 - 同样根据我们之前的直觉,为什么要对您之前学过的东西给予高权重。如果您遵循在线学习方法,这可能甚至不重要(由于训练示例数量众多,您只查看每个训练示例一次)。
所有这些都导致一个单一的结论,如果beta >= 1
,将会有大量的振荡并且误差将继续呈指数增长(可能可以通过严格的数学分析来证明)。虽然它可能适用于beta = 1
(由于感知器收敛定理)
让我们谈谈梯度体面!
比喻:
所以你站在山边,你想到达这座山的最低处。你有一个记事本。
虽然实际的物理动量在这里是一个很好的类比,但我不会使用它。
你在这个山边的某个地方,你知道哪条路是向下的*,然后你朝那个方向跳了几米。一次跳跃的幅度取决于山坡的陡峭程度(坡度的长度),以及你用脚推动的额外量。你第一次决定不要用脚推那么多。新元动能,来了;你在记事本上写下你去的方向,走多远(例如向南,4 米)。
注意:这里的物理动量代表梯度的长度。
你重复这个一段时间,你来到一个只有向上的地方。
这是否意味着你触底了?不必要; 您可能被困在山谷或“局部最小值”中。你真的很想走出这个山谷,但是四面八方都是向上的,那么你应该往哪个方向跳呢?
你现在拿出你的笔记本,注意到你已经在东南方向跳了最后 40 步,而且很远。然后你推断你很可能想去东南部。所以你用脚向东南跳跃:这是对动量作用的直觉;
如果你有一个明确的“模式”表明哪条路是下来的,那么这也应该算数!
注意:动量只取决于上一步,但上一步取决于之前的步骤,依此类推。这只是一个类比。
数学:
对于数学,您只需添加一个作为最后一个梯度的术语,乘以某个常数。
Heading(t)=γ Heading(t-1)+η Gradient(t)
其中γ是动量因子,η是学习率。
Sebsastian Ruders 关于梯度下降的博客非常棒,可以了解更多关于它的数学细节。
γ ≷ 1
对于数学结论:
Heading(t)=γ Heading(t-1)+η Gradient(t)
γ > 1:从“表达式”可以推断出这种情况会产生回声。上一步的梯度将比实际梯度贡献更多。对于即将到来的步骤,这种效果会得到增强,并且沿着这条路走 10 步,你就会被困在一个方向上。
如果您愿意,γ < 1 使其“收敛”到“终端速度”。它将越来越少地依赖于前面的步骤,而不是越来越多。
这些效果在您在Ruders 博客上找到的方程式中非常清楚
如果您的动量项大于 1,则笔记本将克服实际梯度。走了几步,连小山都看不到了;你会说“我到目前为止只向东去了,所以我会继续向东”,你的跳跃越来越长。情况不妙。
综上所述
高动量项会导致您走向错误的方向(炸毁并始终朝同一个方向前进),和/或围绕全局最小值振荡(使您跳得太远)。
希望能帮助到你 :)
*:严格来说,我们正在寻找“向上”的方向并走相反的方向。“向上”方向是梯度。