机器学习优化器总结

 

算法流程参考:https://blog.csdn.net/nickkissbaby_/article/details/81066643

解释及可视化参考:https://blog.csdn.net/weixin_40170902/article/details/80092628

 

下面简要总结一下:

梯度算法:包括全局梯度下降、批量梯度下降、随机梯度下降。

训练速度逐渐上升,而效果逐渐下降,权衡考虑,一般是批量梯度下降法较好。

 

动量算法:包括Momentum算法和Nesterov算法。这类算法一般探索的参数空间范围大,且收敛速度快。

Momentum:使用速度v累积之前的梯度,然后再应用梯度更新。当梯度陡峭时,它可以更快地趋向极值点。当梯度改变正负时,它考虑了之前的梯度,不会摆动到极值点另一边太厉害。它只能在梯度正负变化时悬崖勒马。

Nesterov:在Momentum计算梯度前,增加一步(先用速度更新参数),然后再计算损失函数对参数的梯度。先让参数在之前的速度上前进一步(探路),这样计算的梯度不仅考虑了前因,还考虑了“后因”(以当前速度考虑)。简单说,它可以提前刹车

 

自适应算法:AdaGrad、RMSprop、AdaDelta、Adam。

AdaGrad:它累积梯度的平方,计算梯度的时候,再除以这个累积的平方。所以梯度陡峭时,更新较慢,梯度平缓时,更新较快。

RMSprop_1:应用滑动平均后的AdaGrad算法,即在累积梯度平方时使用了一个滑动平均。这样使得该累积量变化较为平滑,从而参数更新也可以平滑。

RMSprop_2:应用Nesterov动量的RMSprop_1算法,即在计算梯度前更新参数,计算梯度后更新速度,再以这个速度更新参数。

AdaDelta:这个参考资料一没有给出算法流程。从参考资料2看,它应用RMSprop_1算法,但在参数更新时不使用本次计算的梯度作为分子,而是使用之前梯度的和的开方作为分子。参考资料2中作者对iris数据集的测试表明,这个优化器在10轮训练中准确率表现最好。

Adam:在上面的3个自适应算法中,都是以二阶矩(梯度平方)累积。Adam算法添加了一阶矩累积(梯度本身),2个矩的累积的方式还是滑动平均,并应用了一种修正(使得原点附近的曲线更接近真实值,因为滑动平均有一定滞后,原点处更是)处理这2个矩,最后梯度的更新正比于一阶矩而反比与二阶矩的开方。

 

posted @ 2019-11-26 11:17  我的锅  阅读(334)  评论(0编辑  收藏  举报