专题-优化算法
Reference
- 【必读】An overview of gradient descent optimization algorithms - Sebastian Ruder
Index
梯度下降
../数学/梯度下降法
- 梯度下降是一种优化算法,通过迭代的方式寻找模型的最优参数;
- 所谓最优参数指的是使目标函数达到最小值时的参数;
- 当目标函数是凸函数时,梯度下降的解是全局最优解;但在一般情况下,梯度下降无法保证全局最优。
- 微积分中使用梯度表示函数增长最快的方向;因此,神经网络中使用负梯度来指示目标函数下降最快的方向。
- 梯度实际上是损失函数对网络中每个参数的偏导所组成的向量;
- 梯度仅仅指示了对于每个参数各自增长最快的方向;因此,梯度无法保证全局方向就是函数为了达到最小值应该前进的方向。
- 梯度的具体计算方法即反向传播。
- 负梯度中的每一项可以认为传达了两个信息:
- 正负号在告诉输入向量应该调大还是调小(正调大,负调小)
- 每一项的相对大小表明每个参数对函数值达到最值的影响程度;
随机梯度下降
- 基本的梯度下降法每次使用所有训练样本的平均损失来更新参数;
- 因此,经典的梯度下降在每次对模型参数进行更新时,需要遍历所有数据;
- 当训练样本的数量很大时,这需要消耗相当大的计算资源,在实际应用中基本不可行。
- 随机梯度下降(SGD)每次使用单个样本的损失来近似平均损失
小批量随机梯度下降
- 为了降低随机梯度的方差,使模型迭代更加稳定,实践中会使用一批随机数据的损失来近似平均损失。
../机器学习基础/偏差与方差
- 使用批训练的另一个主要目的,是为了利用高度优化的矩阵运算以及并行计算框架。
小批量 SGD 的更新过程
- 在训练集上抽取指定大小(batch_size)的一批数据
{(x,y)}
- 【前向传播】将这批数据送入网络,得到这批数据的预测值
y_pred
- 计算网络在这批数据上的损失,用于衡量
y_pred
和y
之间的距离 - 【反向传播】计算损失相对于所有网络中可训练参数的梯度
g
- 将参数沿着负梯度的方向移动,即
W -= lr * g
lr
表示学习率 learning rate
“批”的大小对优化效果的影响
《深度学习》 8.1.3 批量算法和小批量算法
- 较大的批能得到更精确的梯度估计,但回报是小于线性的。
- 较小的批能带来更好的泛化误差,泛化误差通常在批大小为 1 时最好。
- 原因可能是由于小批量在学习过程中带来了噪声,使产生了一些正则化效果 (Wilson and Martinez, 2003)
- 但是,因为梯度估计的高方差,小批量训练需要较小的学习率以保持稳定性,这意味着更长的训练时间。
- 当批的大小为 2 的幂时能充分利用矩阵运算操作,所以批的大小一般取 32、64、128、256 等。