优化器
梯度下降
https://zhuanlan.zhihu.com/p/32626442
SGD
原始的梯度下降算法:对参数减去当前参数的负梯度
动量算法
梯度=上一次的梯度 和 当前梯度的加权和
优点:减少收敛过程中的震荡,使得收敛过程更加平滑,能加速收敛过程。
Nesterov
比Momentum更快:揭开Nesterov Accelerated Gradient的真面目:https://zhuanlan.zhihu.com/p/22810533
做法:提前感知下次的移动方向,针对已知的移动,计算新梯度,在新的梯度上做参数迭代。
Lookahead
参考Nesterov的做法,提前感知移动方向,不同的是,Lookahead可以提前感知k次移动方向,从而进行一次参数更新。较小参数更新过程中的震荡。
自适应学习率
与之前相比,均考虑了二阶导。利用二阶导信息来自适应调整学习率。
Delta-bar-delta
AdaGrad
对梯度值进行压缩,压缩后再更新梯度。
压缩系数 r = r + dw *dw
压缩过程dealta = dw * learning_rate / (小常数 + sqrt(r))
对更大的梯度,进行更大的压缩,小梯度进行小压缩。使得梯度下降更加平滑。
RMSProp
AdaGrad存在的问题:在凸空间中变现良好。但梯度下降过程旺旺处于全局非凸空间中,容易导致参数未进入局部凸空间时,参数已经变得极小。
改进:更多考虑最近的dw,少考虑远处的dw,r更新方式 r = rate * r + dw * dw
Nesterov
与动量梯度下降-> Nesterov动量的应用类似。提前感知一部分移动方向,在新的参数值处计算梯度。重点在于提前感知。
Adam
利用了二阶导信息。
融合了rmsprop算法和动量算法的优点:一阶导是利用了动量,二阶导利用了rmsprop。
但是一阶和二阶的修正偏差是在干嘛?