各种优化方法的比较

GD:

每一个数据都要单独算一次梯度,每一个的梯度都会加进去下降,因此速度会很慢,而且容易陷入局部最优解。

BGD:

拿一批数据进来,算这一批的平均梯度,沿着平均梯度来下降。

SGD:

对于一批数据随机选一个数据的梯度来下降。

红色的是BGD,紫色的是SGD,虽然SGD震荡比较厉害,但是速度会比较快,虽然某一次不正确,但是最终还是会到达。

Momentum(使用动量的梯度下降):

在梯度下降的基础之上加了一个动量,模拟物体运动时的惯性,就是积累以前的梯度信息:

因此它的好处就是将少震荡,保持惯性,使得梯度往一个方向走,但缺点是由于累计历史梯度,因此即使到了最优点时也会继续往后走:

NAG(牛顿加速梯度算法):

为了防止由于动量造成的来回震荡,NAG的思想是先计算下一次的梯度,计算完之后再减去这个动量。在前面梯度大而动量小,所以减去之后收敛还是很快,但是后面梯度小而动量大,减去之后收敛就慢下来了。

Adagrad:

是一种自适应学习率算法,它也会累加以前的梯度信息,但作用不是用来更新参数而是用于更新学习率。

RMSProb:

Adagrad虽然能做到自适应学习率,但是它的问题是分母是梯度的平方和,会越来越大,最后导致分母趋向于正无穷,最终的结果就是学习率趋向0,从而无法更新参数。而RMSProb的最大改进就在于此:

AdaDelta:

Adam:

优点:对内存需求较小(适用于大数据集和高纬空间)
不同参数有独自适应学率(通过计算梯度的一阶矩估计和2阶矩估计)
解决梯度稀疏和噪声问题

猜你喜欢

转载自blog.csdn.net/weixin_38241876/article/details/89515036
今日推荐