[TOC]
随机梯度下降,注意这里的随机梯度下降是mini-batch gradient descent。一般深度学习中就用sgd代表。
a) 权重参数$w$ , 权重梯度$\nabla_w$
b) 学习率
c) 动量大小$\gamma$ (一般设置为0.9) , t次迭代时累积的动量为$v_t$
则学习率的更新公式为: $$ \eta_t = \eta /(1+t \cdot decay) \tag 1 $$ 累积动量和权重的更新公式如下: $$ \begin{align} &v_t=\gamma \cdot v_{t-1} + \eta_t \cdot \nabla_w & 其中v_0=0 \tag 2 \ &w = w - v_t \tag 3 \end{align} $$
这一节我们介绍 Adagrad 算法,它根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,从而避免统一的学习率难以适应所有维度的问题。
Adagrad 的算法会使用一个小批量随机梯度按元素平方的累加变量每次迭代中,首先将梯度$\nabla_w$ 按元素平方后累加到变量
需要强调的是,梯度按元素平方的累加变量
- Adagrad 在迭代过程中不断调整学习率,并让目标函数自变量中每个元素都分别拥有自己的学习率。
- 使用 Adagrad 时,自变量中每个元素的学习率在迭代过程中一直在降低(或不变)。
当学习率在迭代早期降得较快且当前解依然不佳时,Adagrad 在迭代后期由于学习率过小,可能较难找到一个有用的解。为了应对这一问题,RMSProp 算法对 Adagrad 做了一点小小的修改。
不同于 Adagrad 里状态变量$s$是到目前时间步里所有梯度按元素平方和,RMSProp 将过去时间步里梯度按元素平方做指数加权移动平均。公式如下: $$ s_t =\gamma \cdot s_{t-1} + (1-\gamma) \cdot \nabla_w^2 \ ; \ \ \ \ 其中 0<\gamma <1\ \tag6 $$ 权重更新公式仍然如AdaGrad $$ w = w - \frac {\eta_t} {\sqrt{s_t + \epsilon }} \cdot \nabla_w \tag 5 $$
未完待续... ...
a) An overview of gradient descent optimization
b) 优化算法