RMSprop

梯度下降 \(\mathbf{x}_{t} = \mathbf{x}_{t-1} - \eta\mathbf{g}_{t}\) 中学习率是固定的。

但我们期望学习率可变:在参数空间更为平缓的区域,学习率高一些;参数空间更为陡峭的区域,学习率低一些。

由这个思路可以导出 RMSprop:

\[\mathbf{s}_{t} = \alpha\mathbf{s}_{t-1} + (1 - \alpha)\mathbf{g}_{t}^{2}\]
\[\mathbf{x}_{t} = \mathbf{x}_{t-1} - \frac{\eta}{\sqrt{\mathbf{s}_{t}} + \epsilon}\odot\mathbf{g}_{t}\]

\(\mathbf{s}_{t}\) 即梯度平方的 moving average 反映近期梯度的大小,它高学习率就低,它低学习率就高,每一步跨度差不多。

import torch
from torch import nn

net = nn.Sequential(nn.Linear(784, 10))
# pytorch中的RMSprop
optimizer = torch.optim.RMSprop(net.parameters(), lr=0.01, alpha=0.99)