AdaGrad通过累积过去梯度的平方来调整每个参数 (parameter)的学习率。虽然这有助于应对不同的曲率,但它带来了一个潜在问题:分母中累积的和∑gi2单调增长。经过多次迭代,特别是在具有非凸目标函数的深度学习 (deep learning)情况中,这个分母会变得非常大,导致有效学习率过早地趋近于零。这会有效地停止学习过程,远未收敛时便如此。
RMSprop(均方根传播),一个由Geoff Hinton提出的未发表的自适应学习率方法,直接处理了这个问题。RMSprop没有让平方梯度的和无限累积,而是使用平方梯度的指数衰减平均。这意味着较旧的梯度对平均值的贡献逐渐减少,阻止分母无限增大并停止学习。
我们来看其机制。在每个时间步t,RMSprop首先为当前参数θt计算梯度gt=∇θJ(θt)。然后,它维护平方梯度的移动平均值E[g2]t,更新方式如下:
E[g2]t=γE[g2]t−1+(1−γ)gt2
具体来说:
- gt2表示梯度向量 (vector)gt的逐元素平方。
- E[g2]t是平方梯度在时间步t的移动平均估计值。
- γ是衰减率(或动量项),一个超参数 (hyperparameter),通常设置为类似0.9、0.99或0.999的值。它控制过去平方梯度相对于当前梯度的权重 (weight)分配。γ值越高,意味着平均值包含更长的梯度历史信息。
与此相比,AdaGrad的分母实际上具有γ=1(无衰减),并持续添加当前平方梯度。通过使用γ<1,RMSprop确保非常旧梯度的影响随时间减小。
RMSprop的参数更新规则然后使用这个移动平均值:
θt+1=θt−E[g2]t+ϵηgt
在此:
- η是全局学习率,另一个超参数。
- ϵ是一个小的常数(例如10−8),为数值稳定性而添加,以防止除以零,特别是在E[g2]t可能非常小的初始步骤中。
- 除法和平方根运算是逐元素执行的。
核心思想很直观:如果某个参数的近期梯度很大,E[g2]t将很大,并且该参数的有效学习率(η/E[g2]t+ϵ)将减小。反之,如果近期梯度很小,有效学习率将增加。重要的一点是,由于E[g2]t是一个移动平均值,如果近期梯度再次变小,它也可以减小,从而允许学习率恢复,这与AdaGrad不同。
超参数 (parameter) (hyperparameter)
RMSprop引入了衰减率γ以及全局学习率η和稳定性常数ϵ。
- 学习率(η): 仍需仔细选择。典型的起始值可能是0.001。
- 衰减率(γ): 控制平方梯度平均值的记忆长度。常见值为0.9或0.99。接近1的值意味着更慢的衰减,并考虑更长的历史信息。
- Epsilon (ϵ): 通常设置为类似10−8或10−6这样的小值,并且通常不需要大量调整。
优势和注意事项
- 处理AdaGrad的学习率过快衰减问题: 通过使用移动平均值,RMSprop避免了AdaGrad学习率单调递减的问题,使其更适合长时间训练和非凸问题。
- 良好的实际表现: RMSprop在实践中通常表现良好,特别是对于训练循环神经网络 (neural network) (RNN),尽管它作为一种通用默认算法在某种程度上已被Adam(我们接下来会讨论)所取代。
- 超参数 (parameter) (hyperparameter)调整: 需要调整η和γ,尽管默认值通常提供一个合理的起始点。
本质上,RMSprop修改了AdaGrad的分母,使用指数加权平均值而非累积和。这一简单的改变避免了可能导致AdaGrad停滞不前的激进学习率衰减,从而得到一个更有效且常用的自适应优化算法。它为Adam算法奠定了基础,Adam通过引入动量进一步完善了这一思想。