SGD 和它的兄弟们
Batch Gradient Descent
(正常的梯度下降)正常下山
SGD
用单个训练样本的损失来近似平均损失 蒙着眼睛下山 (害怕山谷(震荡)和鞍点(停滞))
Mini-Batch SGD
为了降低随机梯度的方差,使得迭代算法更加稳定,也为了充分利用高度优化的矩阵运算操作,同时处理若干个(一个小批量)的数据
改进随机梯度下降法:惯性保持
环境感知
Momentum
: 惯性的获得是基于历史信息 (SGD在山谷震荡、鞍点停止,而加上惯性之后,有助于打破这一困境)
前进步伐$-v_t$由两部分组成:一是学习率$\eta$乘以当前估计的梯度$g_t$;二是带衰减的前一次步伐$v_{t-1}$
AdaGrad
: 感知环境才能更好地前进 (根据自变量在每个维度的梯度值大小来调整各个维度上的学习率,从而避免统一的学习率难以适应所有维度的问题)
分量形式:
其中$\theta_{t+1,i}$表示t+1时刻的参数向量$\theta_{t+1}$的第i个参数,$g_{k,i}$表示k时刻的梯度向量$g_k$的第i个维度(方向)
向量形式:
其中$\odot$表示按元素相乘,$\eta$是学习率,$\epsilon$是为了维持数值稳定性而添加的常数,这里开方、除法、乘法的运算都是按元素运算的
RMSProp
: 学会放下,以后才能更好的拿起 (Adagrad + forgetting, Adagrad 一直在按元素累加过去梯度的平方,始终不肯放下,导致在迭代后期学习率过小,可能较难找到一个有用的解,RMSProp学会了放下,带来了改进)
因为RMSProp算法的状态变量是对平方项$g_t\odot g_t$的指数加权移动平均,所以可以看作最近$\frac{1}{1-\gamma}$个时间步的小批量随机梯度平方项的加权平均。这样就使得自变量每个元素的学习率在迭代过程中就不再一直降低(或不变)
注:RMSProp源自Coursera上Hinton的一门课
(AdaDelta
:参加D2L(没有学习率超参数,通过使用有关自变量更新量平方的指数加权移动平均的项来替代RMSProp算法中的学习率))
Adam
:历史、环境,我都要!(RMSProp + Momentum)
注:还有偏差修正:参见D2L
【参考】
Note:Vanilla 一般的