AdaGrad是2011年发表的一种亚梯度方法,论文地址为: http://jmlr.org/papers/volume12/duchi11a/duchi11a.pdf. 在很多大规模问题上验证了有效性. 它的迭代为:
$$sum_{t+1} = sum_t + (g_{t+1})^2 $$ $$\Delta x_t = - \eta * \frac{1}{(\sqrt{sum_{t+1}} + \epsilon)}* g_{t+1} $$
关于数学符号,请看"1. Standard GD and Momentum".
AdaGrad有类似于learning rate annealing的效果,不过学习率衰减不是迭代次数的函数,而是梯度平方和的平方根的函数. 预期达到的效果就是:
缺点:
Adadelta是2012年作者在Google实习时提出的对AdaGrad的改进.论文地址为: https://arxiv.org/abs/1212.5701.
每次迭代为 $$E[g^2]_{t+1} = \rho * E[g^2]_t + (1 - \rho) * (g_{t+1})^2 $$ $$RMS(g)_{t+1} = \sqrt{ E[g^2]_{t+1} + \epsilon} $$ $$E[(\Delta x)^2]_t = \rho * E[(\Delta x)^2]_{t-1} + (1 - \rho) * (\Delta x_{t-1})^2 $$ $$RMS(\Delta x)_t = \sqrt{ E[(\Delta x)^2]_t + \epsilon} $$ $$\Delta x_t = - g_{t+1} * \frac{RMS(\Delta x)_t}{RMS(g)_{t+1}} $$
其中 $\epsilon$ 不仅为了稳定数值计算,同时也是为了初始化 $RMS(\Delta x)_t $. Adadelta对于AdaGrad的改进主要是
但是,实验中发现不需要人工设定的学习率,但是对 $\epsilon$ 很敏感,因为第一步的步长是 $\sqrt{\epsilon} $
作为对比,以下是带Momentum的GD和RMSProp的效果
In [ ]: