另一个问题,就是针对性处理对结果影响更大/更小的权重,让重要的迭代的迭代更谨慎,而不重要的获得更快衰减。以保证优势权重,剔除不必要影响。
迭代公式:
$$ {\displaystyle \begin{aligned} g_{t,i} &= \nabla_\theta J(\theta_i) \ G_{t,i} &= \sum {\tau=1} ^{t} g{\tau, i}^2 \ \theta_{t+1,i} &= \theta_{t,i} - \frac{\eta}{\sqrt{G_{t,i}+\epsilon}} \dot{} g_{t,i} \ \end{aligned} } $$
以
自适应梯度算法(AdaGrad/AGA [Adaptive Gradient Algorithm]) 是将 SGD 的统一学习速率修改为,有一定预测成分在内的,参数对应独立更新的处理方式。这样处理的好处是,每一个不同参数都会根据当前自身变化和总模型结果关系的差异,独立的进行变更,变化大的会更快,变化小的会更慢。减少了手动调节学习速率的次数。
缺点也比较明显:
- 前期需手工设置一个全局的初始学习率,过大值会导致惩罚变化不明显,过小会提前停止
- 中后期自适应分母会不断累积导致学习速率不断收缩,趋于非常小从而可能提前结束训练
因此,我们有了改进版 RMSprop 法。
迭代公式:
$$ {\displaystyle \begin{aligned} g_{t,i} &= \nabla_\theta J(\theta_i) \quad , \quad E[g^2]{t,i} = \gamma E[g^2]{t-1,i} + (1-\gamma)g_{t,i}^2 \ \Delta \theta_{t,i} &= - \frac{\eta}{\sqrt{E[g^2]{t,i}+\epsilon}}g{t,i} = - \frac{\eta}{RMS[g]{t,i}}g{t,i} \ \theta_{t+1,i} &= \theta_{t,i} + \Delta \theta_{t,i} =\theta_{t,i} - \frac{\eta}{\sqrt{E[g^2]{t,i}+\epsilon}}g{t,i} \ \end{aligned} } $$
以
$$ RMS[g]{t,i}=\sqrt{E[g^2]{t,i}+\epsilon} $$
因为学习速率变化采用的是 梯度均方和(RMS)。所以,某一维度变化较大时,RMS 较大;变化较小时,RMS 较小。这样就保证了各个维度的变化速率是基于同一个变化量级的,同时也避免了 AdaGrad 中后期的学习速率极速下降,过早停止的问题。而且,因为 RMS 采用近似算法,极大降低了内存消耗(毕竟不需要记录每一次的迭代值了)
不过,RMSprop 可以看出,仍然依赖于全局学习速率 的设定,那么是否能够继续改进不依赖呢?
如果对比两个方法的过程中单位差异,或许能找到答案。
我们知道,很多单位是有实际价值的。比如是米(meter),天(day)等,就有具体物理含义。所以,对于迭代使用的加速度
但是:
有
也就是说,对于 AdaGrad 和 RMSprop 来说,$$\Delta\theta_t$$ 权重变化量最终得到的结果,其单位和
如果我们用牛顿法使
上述变化后,便能将
$$ \Delta x = \frac{\frac{\partial f}{\partial x}}{\frac{\partial ^2 f}{\partial ^2 x}} \Rightarrow \Delta x_t = -\frac{\sqrt{\sum{ {\tau=1} ^{t-1}} \Delta x\tau} }{\sqrt{E[g^2]_t+\epsilon}} $$
上式在
如此,既可以保证单位,又能简化运算。同时我们发现,$$\Delta\theta_t$$ 的更新在这种拟合下,后续迭代不再依赖于全局学习速率
于是,便有了 AdaDelta 算法。
迭代公式:
$$ {\displaystyle \begin{aligned} g_{t,i} &= \nabla_\theta J(\theta_i) \quad , \quad E[g^2]{t,i} = \gamma E[g^2]{t-1,i} + (1-\gamma)g_{t,i}^2 \ \Delta \theta_{t,i} &= - \frac{RMS[\Delta \theta]{t-1,i}}{RMS[g]{t,i}}g_{t,i} \ \theta_{t+1,i} &= \theta_{t,i} + \Delta \theta_{t,i} =\theta_{t,i} - \frac{RMS[\Delta \theta]{t-1,i}}{RMS[g]{t,i}}g_{t,i} \ \end{aligned} } $$
以
$$ RMS[g]{t,i}=\sqrt{E[g^2]{t,i}+\epsilon} $$
相较于前两种,AdaDelta 具有优势:
- 结合了 AdaGrad 善于处理稀疏梯度和 RMSprop 善于处理非平稳目标的优点
- 不需要依赖于 全局学习速率的设置
是一种相对理想的,针对强弱重点的梯度优化算法了。
目前,我们所有的处理方式都是秩针对性的解决单一问题。那么有没有什么方法,可以结合两类的优点呢?既解决鞍点,又能自适应学习速率呢?
当然有,那就是 Adam 自适应实时评估算法。