一、普通梯度下降训练优化
每次都在整个数据及上计算Loss和梯度
- 计算量大
- 可能内存承载不住
梯度方向确定的时候,仍然是每次都走一个单位步长
- 太慢那么应当怎么样优化呢? 这里提出了两种方法供使用。
- ####①. 随机梯度下降
每次只使用一个样本- ####②. Mini-Batch梯度下降
每次使用小部分数据进行训练,同时对数据进行shuffle加快模型收敛,并防止过拟合问题的出现。利用Mini-Batch梯度下降算法同样是存在问题的,如下图所示的震荡问题。
同样,由于普通的梯度下降算法中学习率*当前位置导数的算式,在当梯度下降过程中遇到局部极值点或者鞍点(saddle point)时,该点导数为0。则不论参数α为何值,梯度下降的参数恒为0。这样使得梯度下降无法继续进行下去而停留在当前点上。
二、动量梯度下降算法
普通梯度下降 SGD
1
2
3while True:
dx = compute_gradient(x)
x += learning_rate * dx动量梯度下降 SGD+Momentum
将每次的梯度乘上一个参数,进行每次梯度的积累。
1
2
3
4
5vx = 0
while True:
dx = compute_gradient(x)
vx = rho * vx + dx
x += learning_rate * vx####特点:
- 开始训练时,积累动量,加速训练
- 局部极值附近震荡时,梯度为0,由于动量,跳出陷阱
- 梯度改变方向的时候,动量缓解震荡
Author:TyranitarX
原文链接:http://tyranitarx.github.io/2019/07/05/SGD-Momentum/
发表日期:July 5th 2019, 11:27:11 am
更新日期:July 5th 2019, 11:42:55 am
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可
-
Next Post卷积神经网络
-
Previous Post神经网络实现-------多分类Logistic回归模型
- ####①. 随机梯度下降
- 太慢