深度学习——sgd等优化方法比较

SGD

SGD(stochastic gradient descent)随机梯度下降,对于训练数据集,我们首先将其分成n个batch,每个batch包含m个样本。我们每次更新都利用一个batch的数据,而非整个训练集。

优点是:当训练数据太多时,利用整个数据集更新往往时间上不显示。batch的方法可以减少机器的压力,并且可以更快地收敛;当训练集有很多冗余时(类似的样本出现多次),batch方法收敛更快。

Momentum

momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力。

Nesterov Momentum

这是对传统momentum方法的一项改进。

首先,按照原来的更新方向更新一步,然后在该位置计算梯度值,用这个梯度值修正最终的更新方向。

Adagrad

Adagrad自适应地为各个参数分配不同学习率的算法。对于每个参数,随着其更新的总距离增多,其学习速率也随之变慢。

Adadelta

Adadelta是基于Adagrad算法,为了完美解决Adagrad算法学习率是单调递减、手工设置一个全局初始学习率等问题产生。

几种方法比较

Karpathy做了一个这几个方法在MNIST上性能的比较,其结论是: 

1、adagrad相比于sgd和momentum更加稳定,即不需要怎么调参。

2、精调的sgd和momentum系列方法无论是收敛速度还是precision都比adagrad要好一些

3、在精调参数下,一般Nesterov优于momentum优于sgd。

4、adagrad一方面不用怎么调参,另一方面其性能稳定优于其他方法。

你可能感兴趣的:(深度学习)