梯度下降肯定是优化参数的最佳选择,但是它要求的计算量巨大,因此需要对梯度下降法进行优化,让他有更少的计算量实现差不多的效果,而优化梯度下降法,大概俩思路,一个是调整神经网络的结构,比如增加池化层,或者使用Dropout的方法等。另一个思路就是优化梯度下降算法本身,由此出现了随机梯度下降,动量法,等等
本次搞后面那个
随机梯度下降
思路:减少每次计算的计算量
做法:不训练整个数据集的所有数据,而是每轮训练时在数据集中随机挑选几条数据(mini-batch),用于优化参数,下一轮再挑另几条数据
效果:如下图所示,在凸问题时,经过k次训练后,最后随机下降法达到的误差是

牛顿法

如上图所示,在a0点优化参数时,最理想的梯度下降的方向是全局最优路径,即灰色的线,然后是不可能的。
梯度下降方法在该点仅利用梯度(一阶信息),在局部沿着切线的负方向更新参数,即图中的橙色路径。
需要注意的是,这个“极小值点”是局部二次近似模型的最优解,而不是原始目标函数的全局最优解
并且由图可知,他的收敛速度大于梯度下降法,能够跟快的收敛到全局最优
而上面是一维变量的情况,如果损失函数是二维甚至更高维那

如上图所示,在二维的情况下最理想的参数优化路径是灰色的线,梯度下降法是橙色的线,牛顿法是绿色的线,很明显牛顿法是会比梯度下降法更接近理想情况的
从上图可以看出,牛顿法的本质,其实还是微积分的思想,就是把所有的维度放到一起统一考虑,去找一个更好的路径,即更平滑的路径
也可以发现,牛顿法效果好是好,但是每次都要算一个黑塞矩阵,计算量太大了,还是不够好,因此他只是一个提供理论思路的方法
动量法


牛顿法是把所有的维度放到一起统一考虑,去找一个更好的路径,即更平滑的路径
那如果我把各个维度拆开,去考虑那
调整方式也非常简单,引入一个动量,对梯度进行历史上的累积平均,即当前更新方向不再仅依赖当前梯度,而是结合历史梯度的指数加权平均,上一次的权重较大,上好几次的权重逐渐减小,使更新方向具有惯性,从而抑制震荡并加速收敛。
Nesterov算法

Nesterov算法就是在动量法基础上的改进方法,其核心思想是“前瞻更新”。
这种机制使得梯度具有更强的前瞻性,从而减少震荡并加速收敛
AdaGrad
上面的方法都是考虑对收敛方向的优化,其实也可以考虑对学习率的优化
即学习率不能是一个确定的值,不然在接近极致点的时候会不断震荡,无法收敛,因此理想的方法是每迭代一次,学习率相应的变化,越接近极致点时,学习率越小,最终收敛

AdaGrad在稀疏数据集的效果特别好
RMSprop方法

但是AdaGrad有一个问题,因为它累积了所有历史梯度平方导致学习率不断衰减,训练后期更新变慢甚至停止,因此科学家在它的基础上继续优化,即不保留全部历史信息,而是通过指数加权平均保留近期梯度信息,从而解决学习率过早衰减的问题。就是RMSprop方法
Adam

动量法针对收敛方向进行优化,RMSprop针对学习率进行优化,把他俩结合起来同时优化就是Adam方法
Nadam
Nadam 是在 Adam 的基础上引入 Nesterov momentum 的改进方法。它在 Adam 同时具备动量法和自适应学习率机制的基础上,通过引入“前瞻梯度”(lookahead gradient),进一步优化参数更新方向,从而在部分任务中提升收敛速度与稳定性。