今天面试被虐了,回来补一下知识。

1.(随机)梯度下降 /( random )gradient descent

梯度下降其实就是我们常见的”求导然后反向传播“的过程。

模型参数的更新调整,与代价函数关于模型参数的梯度有关,即沿着梯度的方向不断减小模型参数,从而最小化代价函数。

基本策略可以理解为”在有限视距内寻找最快路径下山“,因此每走一步,参考当前位置最陡的方向(即梯度)进而迈出下一步。

可以形象的表示为:

缺点为容易陷入局部最优解。

而随机梯度下降远离类似,只不过不再是每一步都要精确计算梯度,因此收敛速度更快,但是依然容易陷入局部最优解中。

2.动量 / Momentum

使用动量后的SGD,主要思想是引入一个积攒历史梯度信息动量来加速SGD。

优化表达式为:

其中:vt代表t时刻的加速度,阿尔法代表动力的大小,一般为0.9(表示最大速度10倍于SGD),ηt为学习率,Wt表示t时刻模型参数。

基本策略可以理解为:使当前权重收上一次权重改变的影响,类似于小球向下滚动的时候具备了惯性(梯度下降),加快小球的速度(收敛速度)。

由于这个小球可以继承前几次梯度的方向,因此可以更快收敛,同时阿尔法又相当于“摩擦力”使得小球不会无限制的加速下去。

3.牛顿加速梯度 / NAG, Nesterov accelerated gradient

Monentum的变种。

牛顿梯度相比动量添加了一个校正因子,由于该式在一定程度上类似于二阶导,因此可以让梯度下降具备一定的前瞻性。

理解策略:相比动量法更快,同时由于具有前瞻性,可以提前知道梯度方向以及会不会走到坡底之后继续上坡。

4.AdaGrad

这个优化器主要能够解决标签分布极为不均匀的情况。

该方法能够自适应学习率,使得具有大代价函数的参数快速下降(高学习率),而低代价的参数具有较小的下降速度。

其中,gt,i代表t时刻分类i的梯度。

AdaGrad的主要优势为不需要认为干预学习率,可以自动调节,并且适用于标签分布不均的数据集。

缺点为随着迭代次数的增加,学习率会越来越小,最终趋近于0.

5.RMSProp

RMSProp相比AdaGrad做了一些改进:

cache = decay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)

可以看出,RMSProp借鉴了AdaGrad的思想,同时将分母部分变成了加权平均,避免了学习率越来越低的问题,并且依然具备自适应学习率调整的能力。

RMSProp从经验上已经被证明是一种有效的深度学习网络优化算法。

6.Adam

Adam借鉴了AdaGrad和RMSprop的思路,将动量引入RMSProp。

    m = beta1*m + (1-beta1)*dx
    v = beta2*v + (1-beta2)*(dx**2)
    x += - learning_rate * m / (np.sqrt(v) + eps)

adam有两个超参,beta1与beta2,默认值分别为0.9和0.999。

相比RMSProp,Adam没有使用梯度dx,而是将dx通过beta1进行平滑。

完整的Adam更新算法也包含了一个偏置(bias)矫正机制,因为m,v两个矩阵初始为0,在没有完全热身之前存在偏差,需要采取一些补偿措施。


其实我们可以发现,Adam,AdaGrad,RMSprop这几个优化器都有一个learning_rate/np.sqrt() 项,该项其实可以理解成信噪比,当在训练初期,网络前进的方向较为明显,而两侧的梯度(噪音)相对前进方向较小,信噪比较高,可以进行较大的梯度传播,而当接近谷底是,由于前进的方向不再明显,信噪比十分接近于0,因此前进的也就特别慢,相当于天然具有退火的能力。


0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注