优化算法
1.1 梯度下降
梯度方向是函数值增大方向,梯度反方向是函数值下降方向,沿梯度反方向对参数迭代更新,以最小化损失函数
证明如下

式1,2,3,5说明了要使得函数值减小需要满足的条件,式6说明负梯度方向更新参数函数值下降最快
梯度下降算法描述如下
eps为接近0的正数,N为最大迭代次数,防止出现死循环
学习率\(\alpha\)要设置为接近于0的正数,原因如下,结合式3进行理解
1.2 梯度下降法的改进
改进方向主要有学习率衰减和梯度方向优化,对应的优化算法如下图所示
动量法
借用物理学动量得概念,直观理解是依靠惯性保持迭代时的前进方向,用历史梯度信息对当前梯度进行修正,消除病态条件问题上的来回震荡
参数更新公式为
对动量项展开得
考虑动量的优点
- 收敛更快
- 有机会逃脱局部最小值(因为动量可能推动它脱离局部极小值)
梯度截断
gradient clipping,是为了解决梯度爆炸问题,当梯度大于一定的阈值时,就将其截断,在训练原始RNN时采取了此方法,参考RNN - dctwan - 博客园 (cnblogs.com)
按值截断
按模截断
AdaGrad
Adaptive Gradient Descent,自适应学习率梯度下降,学习率在不断发生变化, 且对于每个参数的学习率是不同的。学习率衰减的思想是:训练刚开始时学习率大一些,以保持收敛速度,在收敛到最优点附近时,要小一些避免震荡
对稀疏特征的理解, 稀疏特征的平均梯度通常很小,所以这些特征的训练速度要慢得多。Adagrad 解决这个问题的思路是: 你已经更新的特征越多,你将来更新的就越少,这样就有机会让其它特征(例如稀疏特征)赶上来。更新这个特征的程度即在这个维度中移动了多少,这个概念由梯度平方的累积和表达
参数更新公式为
-
优点
更好地避开鞍点,Adagrad 将采取直线路径,而梯度下降(或相关的动量)采取的方法是“让我先滑下陡峭的斜坡,然后才可能担心较慢的方向”。
-
缺点
收敛非常慢,随着参数更新的进行,分母越来越大,逐渐趋向于0
RMSProp
Root Mean Square Propagation,通过添加衰减因子来解决AdaGrad收敛太慢(学习率趋向于0)的问题
为了看到衰减的效果,在这个对比中,AdaGrad (白色)最初与 RMSProp (绿色)差不多,正如调整学习率和衰减率的预期。 但是 AdaGrad 的梯度平方和累计得非常快,以至于它们很快变得非常巨大(从动画中方块的大小可以看出)。买路费负担沉重,最终 AdaGrad 几乎停止了。 另一方面,由于衰变率的原因,RMSProp 一直将方块保持在一个可控的大小。 这使得 RMSProp 比 AdaGrad 更快。
Adam
综合考虑了动量和自适应学习率
总结如下

参考:
- 梯度下降的可视化解释(Momentum,AdaGrad,RMSProp,Adam)
- 《机器学习的数学》——雷明