RMSprop 翻译成中文是“均方根传递”,它也能加速算法学习的速度。
仍然使用上篇文章中的图:

在此,我们假设 W 为水平方向的参数,b 为竖直方向的参数。从上图可以看出,更新 W 时的步伐过小,而更新 b 的步伐过大,这是 dW 过小和 db 过大造成的,如果我们可以增大 dW 和减小 db,就可以使上图蓝线更快地向右行进,而减少上下振动。下面就来实现这个目的。
回忆一下,在动量梯度下降算法中,算法描述如下:
第 t 次迭代:
在当前的 mini-batch 上计算 dW, db
vdW=β⋅vdW+(1−β)⋅dWv_{dW} = β · v_{dW} + (1 - β) · dWvdW=β⋅vdW+(1−β)⋅dW
vdb=β⋅vdb+(1−β)⋅dbv_{db} = β · v_{db} + (1 - β) · dbvdb=β⋅vdb+(1−β)⋅db
W:=W−α⋅vdWW := W - α · v_{dW}W:=W−α⋅vdW
b:=b−α⋅vdbb := b - α · v_{db}b:=b−α⋅vdb
RMSprop 的算法描述与其十分相似:
第 t 次迭代:
在当前的 mini-batch 上计算 dW, db
sdW=β⋅sdW+(1−β)⋅dW2s_{dW} = β · s_{dW} + (1 - β) · dW^2sdW=β⋅sdW+(1−β)⋅dW2
sdb=β⋅sdb+(1−β)⋅db2s_{db} = β · s_{db} + (1 - β) · db^2sdb=β⋅sdb+(1−β)⋅db2
W:=W−α⋅dWsdWW := W - α · \cfrac{dW}{\sqrt{s_{dW}}}W:=W−α⋅sdWdW
b:=b−α⋅dbsdbb := b - α · \cfrac{db}{\sqrt{s_{db}}}b:=b−α⋅sdbdb
Note: 为了区分清楚,RMSprop 中使用指数滑动平均时用的是 S 而不是 V。
从 RMSprop 的算法描述可以看到,计算滑动指数平均时,(1−β)(1 - \beta)(1−β) 后面的项是 dW2dW^2dW2 和 db2db^2db2,如此一来,假如 dW 本身较小(比如小于 1),平方后就会更小,sdWs_{dW}sdW 也会变小;如果 db 较大(比如大于 1),平方后就会更大,sdbs_{db}sdb 也会更大。即我们让小的更小,大的更大,这么做是为了更新权重时做准备。
观察更新 W 的式子,我们发现 dW 下面有一个 sdW\sqrt{s_{dW}}sdW,由于在前面的操作中,我们把 sdWs_{dW}sdW 变得很小,因此这里 dW 除以一个很小的数就会变大,相当于加大了更新 W 的步伐。对于 b,则相当于减小了在 b 方向上的步伐。最终的效果就是,水平方向前进更快,而竖直方向的振荡变小。
这便是 RMSprop 算法,当然在实践中我们不可能只有两个参数,但原理对于更多的参数也是一样的,即增大过小的导数,减小过大的导数。
顺便一提,RMSprop 翻译成中文是均方根传递。
现在我们介绍了动量梯度下降算法和 RMSprop,如果将二者结合起来会怎么样呢?下篇文章就来介绍一下 Adam 梯度下降算法。
1290

被折叠的 条评论
为什么被折叠?



