随机梯度下降(Stochastic Gradient Descent, SGD)是梯度下降算法的一个扩展。
机器学习中反复出现的一个问题是好的泛化需要大的训练集,但大的训练集的计算代价也更大。机器学习算法中的代价函数通常可以分解成每个样本的代价函数的总和。随着训练集规模增长为数十亿的样本,计算一步梯度也会消耗相当成的时间。
随机梯度下降的核心是:梯度是期望。期望可使用小规模的样本近似估计。具体而言,在算法的每一步,我们从训练集中均匀抽出一小批量(minibatch)样本B={x(1), …, x(m’)}。小批量的数目m’通常是一个相对较小的数,从一到几百。重要的是,当训练集大小m增长时,m’通常是固定的。我们可能在拟合几十亿的样本时,每次更新计算只用到几百个样本。
梯度下降往往被认为很慢或不可靠。优化算法不一定能保证在合理的时间内达到一个局部最小值,但它通常能及时地找到代价函数一个很小的值,并且是有用的。
有时提到SGD的时候,其实指的是Mini-Batch梯度下降。
在伪代码中,随机梯度下降可以表示如下:
批量梯度下降法(Batch Gradient Descent, BGD):是梯度下降法的最原始形式,每迭代一步或更新每一参数时,都要用到训练集中的所有样本数据,当样本数目很多时,训练过程会很慢。
随机梯度下降法(Stochastic Gradient Descent, SGD):由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢。随机梯度下降法正是为了解决批量梯度下降法这一弊端而提出的。随机梯度下降是通过每个样本来迭代更新一次。SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着最优化方向进行。
小批量梯度下降法(Mini-BatchGradient Descent, MBGD):在每次更新参数时使用m’个样本, m’可能远小于m。