小批量随机梯度下降

请先食用 梯度下降

一、随机梯度下降

当训练样本有N个时,我们的在训练时的优化目标为在该数据集上的平均损失函数:

L(ω)=1Ni=1NL(ω,xi,yi)L(\mathbf{\omega}) = \frac{1}{N} \sum_{i=1}^N L(\mathbf{\omega}, \mathbf{x_i}, y_i)

其梯度为

L(ω)=1Ni=1NL(ω,xi,yi)\nabla L(\mathbf{\omega}) = \frac{1}{N} \sum_{i=1}^N \nabla L(\mathbf{\omega}, \mathbf{x_i}, y_i)

从上式可以看出,计算目标函数的梯度时,要计算每个样本损失函数的梯度,再求均值。然而

深度学习模型训练复杂度最大的祸源就在于求梯度 ------ 李沐

我们观察一下 xxαL(ω)\mathbf{x} \leftarrow \mathbf{x} - \alpha \nabla L(\mathbf{\omega})

确实如此,每次迭代x\mathbf{x}一次都要对NN个损失函数求梯度再求平均,这样的复杂度是O(N)O(N)

那什么是随机梯度下降呢?

与梯度下降相比,多了随机二字,其实就是在每次迭代中,对数据样本随机均匀采样一个索引ii,并计算第ii个样本的损失的梯度来更新x\mathbf x

xxαLi(ω)\mathbf{x} \leftarrow \mathbf{x} - \alpha \nabla L_i(\mathbf{\omega})


二、小批量随机梯度下降

进一步,在每次迭代时,我们可以选取一批样本,将损失函数定义在这些样本上,作为整个样本集的损失函数近似值

目标函数为:L(ω)=1Bi=1BL(ω,xi,yi)L(\mathbf{\omega}) = \frac{1}{\mathcal{B}} \sum_{i=1}^{\mathcal{B}} L(\mathbf{\omega}, \mathbf{x_i}, y_i)

其中B\mathcal{B}为批量大小

简单理解为:每次先对所有训练样本进行随机洗牌,打乱顺序;然后将其均匀分成多份,每份B\mathcal{B}个样本;然后依次用每一份执行梯度下降算法进行迭代

合理性:随机梯度下降在数学期望的意义下是收敛的,随机采样产生的梯度的期望值是真实的梯度

想理解这句话,需要先理解如下数理统计知识:

  1. 无偏估计(Unbiased Estimator):
    • 无偏估计是指估计量的期望值等于被估计参数的真实值。在SGD中,每个小批量样本的梯度是对真实梯度的无偏估计
  2. 大数定律(Law of Large Numbers):
    • 大数定律描述了随着样本容量的增加,样本均值趋近于期望值。在SGD中,随着对不同小批量样本的抽样次数增加,期望梯度趋近于真实梯度。
  3. 收敛定理(Convergence Theorems):
    • 收敛定理用于说明在什么条件下,一个随机过程或算法会在某个意义下趋近于一个特定值。在SGD中,收敛定理用于说明在学习率等条件下,算法在数学期望的意义下趋于收敛。

三、总结

引用一个结论:

随机梯度下降法并不能保证每次迭代后目标函数值下降,事实上,每次迭代时使用的是不同的目标函数。但是通常情况下目标函数的整体趋势是下降的,能够收敛到局部极值点处

这个好理解,但是在网上看到一个问题:想象我们现在处于一个马鞍面的山头上,我们要采用随机梯度下降算法去下山,比如初始位置是马鞍的一峰,很容易找到马鞍的中心位置,但是到了中心位置,四周接近平地了(梯度为零),又该如何去判断方向呢?

至于为什么深度学习中常用的小批量随机梯度下降,除了减少计算开销,我觉得肯定还有其他方面的原因,怎么就蹦出来一个小批量呢(已经说明其合理性)?

希望在后续的学习中带着这些问题,慢慢理解吧~


持续更新中


本篇参考自雷明的《机器学习的数学》

ubject/35317174/)