Batch and Momentum
Momentum方法
momentum就是动量,即loss函数在到达gradient的critical point不会直接停下来,能够直接凭借之前(较大的)gradient直接冲过critical point。
在真实的物理世界里面不会被saddle point 或者 local minima 卡住。与此类似的技术就是momentum方法。
Vanilla Gradient Descent 一般梯度下降
vanilla 仙草
在初始点,确定一个g0,同时朝这个的反方向运动。朝gradient的反方向去update参数
Gradient Descent + Momenturn
使用Momentum之后,每次更新参数的时候,不是光光去gradient的反方向,而是用gradient的反方向,加上一个前一步移动的方向,因为都是向量,求两者加起来的结果
初始的参数,此时上一步update的参数则为。
接下来在 的地方,计算 Gradient 的方向 ,前一步刚好是0,所以update的方向没有什么变化。但是从第二个开始就开始变化了,不过这里的都是要自己去设置的参数。第二个的m就是由第一个的m和第一个的g共同作用下
g1 告诉我们,Gradient 告诉我们要往红色反方向这边走,但是我们不是只听 Gradient 的话,加上Momentum 以后,我们不是只根据 Gradient 的反方向,来调整我们的参数,我们也会看前一次 Update 的方向
1.如果前一次说要往蓝色及蓝色虚线这个方向走
2.Gradient 说要往红色反方向这个方向走
3.把两者相加起来,走两者的折中,也就是往蓝色这一个方向走,所以我们就移动了 m2,走到 θ2 这个地方
接下来就反覆进行同样的过程,在这个位置我们计算出 Gradient,但我们不是只根据 Gradient 反方向走,我们看前一步怎麼走,前一步走这个方向,走这个蓝色虚线的方向,我们把蓝色的虚线加红色的虚线,前一步指示的方向跟 Gradient 指示的方向,当做我们下一步要移动的方向
每一步的移动,我们都用 m 来表示,那这个 m 其实可以写成之前所有算出来的,Gradient 的 Weighted Sum.从右边的这个式子,其实就可以轻易的看出来。 其实所有的m,都可以看成和g然后和 有关的
m0 我们把它设為 0,m1 是 m0 减掉 g0,m0 為 0,所以 m1 就是 g0 乘上负的 η,m2 是 λ 乘上 m1,λ 就是另外一个参数,就好像 η 是 Learning Rate 我们要调,λ 是另外一个参数,这个也是需要调的,m2 等於 λ 乘上m1,减掉 η 乘上 g1,然后 m1 在哪裡呢,m1 在这边,你把 m1 代进来,就知道说 m2,等於负的 λ 乘上 η 乘以g0,减掉 η 乘上 g1,它是 g0 跟 g1 的 Weighted Sum
以此类推,所以你会发现说,现在这个加上 Momentum 以后,一个解读是 Momentum 是,Gradient 的负反方向加上前一次移动的方向,那但另外一个解读方式是,所谓的 Momentum,当加上 Momentum 的时候,我们 Update 的方向,不是只考虑现在的 Gradient,而是考虑过去所有 Gradient 的总合.
那我们从这个地方开始 Update 参数,根据 Gradient 的方向告诉我们,应该往右 Update 参数,那现在没有前一次 Update 的方向,所以我们就完全按照 Gradient 给我们的指示,往右移动参数,好 那我们的参数,就往右移动了一点到这个地方
Gradient 变得很小,告诉我们往右移动,但是只有往右移动一点点,但前一步是往右移动的,我们把前一步的方向用虚线来表示,放在这个地方,我们把之前 Gradient 告诉我们要走的方向,跟前一步移动的方向加起来,得到往右走的方向,那再往右走 走到一个 Local Minima,照理说走到 Local Minima,一般 Gradient,Descent 就无法向前走了,因為已经没有这个 Gradient 的方向,那走到 Saddle Point 也一样,没有Gradient 的方向已经无法向前走了
但没有关係,如果有 Momentum 的话,你还是有办法继续走下去,因為 Momentum 不是只看
Gradient,Gradient 就算是 0,你还有前一步的方向,前一步的方向告诉我们向右走,我们就继续向右走,甚至你走到这种地方,Gradient 告诉你应该要往左走了,但是假设你前一步的影响力,比 Gradient 要大的话,你还是有可能继续往右走,甚至翻过一个小丘,搞不好就可以走到更好 Local Minima,这个就是 Momentum有可能带来的好处。
根据文章
(56条消息) NN中的学习技巧之(一)参数的最优化之 Momentum_doubleslow;的博客-CSDN博客_momentum参数
中所提到的,收敛速度会在其他章节开始展开。