RMSprop 翻译成中文是“均方根传递”,它也能加速算法学习的速度。

仍然使用上篇文章中的图:

RMSprop

在此,我们假设 W 为水平方向的参数,b 为竖直方向的参数。从上图可以看出,更新 W 时的步伐过小,而更新 b 的步伐过大,这是 dW 过小和 db 过大造成的,如果我们可以增大 dW 和减小 db,就可以使上图蓝线更快地向右行进,而减少上下振动。下面就来实现这个目的。

回忆一下,在动量梯度下降算法中,算法描述如下:

第 t 次迭代:
        在当前的 mini-batch 上计算 dW, db
        vdW=βvdW+(1β)dWv_{dW} = β · v_{dW} + (1 - β) · dW
        vdb=βvdb+(1β)dbv_{db} = β · v_{db} + (1 - β) · db
        W:=WαvdWW := W - α · v_{dW}
        b:=bαvdbb := b - α · v_{db}

RMSprop 的算法描述与其十分相似:

第 t 次迭代:
        在当前的 mini-batch 上计算 dW, db
        sdW=βsdW+(1β)dW2s_{dW} = β · s_{dW} + (1 - β) · dW^2
        sdb=βsdb+(1β)db2s_{db} = β · s_{db} + (1 - β) · db^2
        W:=WαdWsdWW := W - α · \cfrac{dW}{\sqrt{s_{dW}}}
        b:=bαdbsdbb := b - α · \cfrac{db}{\sqrt{s_{db}}}

Note: 为了区分清楚,RMSprop 中使用指数滑动平均时用的是 S 而不是 V。

从 RMSprop 的算法描述可以看到,计算滑动指数平均时,(1β)(1 - \beta) 后面的项是 dW2dW^2db2db^2,如此一来,假如 dW 本身较小(比如小于 1),平方后就会更小,sdWs_{dW} 也会变小;如果 db 较大(比如大于 1),平方后就会更大,sdbs_{db} 也会更大。即我们让小的更小,大的更大,这么做是为了更新权重时做准备。

观察更新 W 的式子,我们发现 dW 下面有一个 sdW\sqrt{s_{dW}},由于在前面的操作中,我们把 sdWs_{dW} 变得很小,因此这里 dW 除以一个很小的数就会变大,相当于加大了更新 W 的步伐。对于 b,则相当于减小了在 b 方向上的步伐。最终的效果就是,水平方向前进更快,而竖直方向的振荡变小。

这便是 RMSprop 算法,当然在实践中我们不可能只有两个参数,但原理对于更多的参数也是一样的,即增大过小的导数,减小过大的导数。

顺便一提,RMSprop 翻译成中文是均方根传递。

现在我们介绍了动量梯度下降算法和 RMSprop,如果将二者结合起来会怎么样呢?下篇文章就来介绍一下 Adam 梯度下降算法。

相关文章:

  • 2021-12-24
  • 2021-04-01
  • 2021-11-19
  • 2021-05-13
  • 2021-08-10
  • 2021-10-13
  • 2021-11-02
  • 2021-06-25
猜你喜欢
  • 2021-10-09
  • 2021-12-20
  • 2021-04-15
  • 2022-12-23
  • 2022-12-23
  • 2022-01-23
相关资源
相似解决方案