从SGD(SGD指mini-batch gradient descent)和Adam两个方面提及。html
更详细的能够看:深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)(醍醐灌顶!)算法
SGD就是每一次迭代计算mini-batch的梯度,而后对参数进行更新,是最多见的优化方法了。即:session
其中,是学习率,
是梯度 SGD彻底依赖于当前batch的梯度,因此
可理解为容许当前batch的梯度多大程度影响参数更新。框架
缺点:(正由于有这些缺点才让这么多大神发展出了后续的各类算法)学习
- 选择合适的learning rate比较困难 - 对全部的参数更新使用一样的learning rate。对于稀疏数据或者特征,有时咱们可能想更新快一些对于不常常出现的特征,对于常出现的特征更新慢一些,这时候SGD就不太能知足要求了
- SGD容易收敛到局部最优,而且在某些状况下可能被困在鞍点【原来写的是“容易困于鞍点”,经查阅论文发现,其实在合适的初始化和step size的状况下,鞍点的影响并没这么大。感谢@冰橙的指正】
- 参数取值震荡严重。(我本身添加的)
Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每一个参数的学习率。Adam的优势主要在于通过偏置校订后,每一次迭代学习率都有个肯定范围,使得参数比较平稳。公式以下:大数据
特色:优化
- 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优势
- 对内存需求较小
- 为不一样的参数计算不一样的自适应学习率
- 也适用于大多非凸优化 - 适用于大数据集和高维空间
优化算法的通常框架:spa
后续复习的时候,存在了一个疑问,上述方法说对解决稀疏数据十分有效,那么哪里体现出了对稀疏数据有效呢?.net
参数更新越频繁,二阶动量越大,学习率就越小。htm
这篇也不错,以后复习看: