梯度下降训练策略
本文意在干脆地写明白梯度下降训练策略的优缺点
批次梯度下降 (Batch Gradient Descent )
利用全部训练数据集计算损失函数的梯度来执行一次参数更新
θ
⇐
θ
−
η
⋅
∇
J
(
θ
)
\theta \Leftarrow \theta - \eta {\rm{\cdot}}\nabla J(\theta )
θ⇐θ−η⋅∇J(θ)
缺点:
- 更新较慢
- 不能在线更新模型
优点
对凸的损失函数可保证收敛到全局最小值;对非凸的损失函数可收敛到局部最小值
随机梯度下降SGD (Stochastic Gradient Descent)
对每一个训练样本点和标签执行参数更新
θ
⇐
θ
−
η
⋅
∇
J
(
θ
;
x
(
i
)
;
y
(
i
)
)
\theta \Leftarrow \theta - \eta {\rm{\cdot}}\nabla J(\theta ;x^{(i)} ;y^{(i)} )
θ⇐θ−η⋅∇J(θ;x(i);y(i))
缺点:
梯度精度差,目标函数下降过程出现大幅波动
优点
速度快,可在线学习
小批次梯度下降(Mini-batch Gradient Descent)
每?个训练样本点,进行一次参数更新
θ
⇐
θ
−
η
⋅
∇
J
(
θ
;
x
(
i
:
i
+
n
)
;
y
(
i
:
i
+
n
)
)
\theta \Leftarrow \theta - \eta {\rm{\cdot}}\nabla J(\theta ;x^{(i:i+n)} ;y^{(i:i+n)} )
θ⇐θ−η⋅∇J(θ;x(i:i+n);y(i:i+n))
优点
- Batch-GD和单样本SGD方法的折衷
- 减小了参数更新的方差,可平稳收敛
- 速度快,可利用优化的矩阵运算库来高效的计算梯度
存在的问题
-
确定合适的学习率比较困难
– 小的学习率可保证收敛性,但收敛过程很慢
– 大的学习率会导致损失函数优化过程在最小值附近波动甚至发散 -
学习率规划适应性差
– 在训练过程中,可采用模拟退火等方法调整学习率
– 或根据损失函数值的下降幅度大小调整学习率
– 但需要需手工预先设置调制方式和阈值,对训练集的自适应性差 -
不同参数更新采用相同的学习率
– 对于稀疏数据、特征出现频率不一致时,不宜采用相同的学习率 -
SGD难以跳出局部极小值点和鞍点
– 神经网络对应的函数具有高度非线性
– 众多局部极小值点或鞍点
– 在极小值点或鞍点附近,目标函数值几乎不变,导致梯度近似为零
改进方法 : 梯度下降优化策略简介