在求解机器学习算法的模型参数时,梯度下降是最常采用的方法之一。本文主要介绍下几种梯度下降的变种:Mini-batch gradient descent和stochastic gradient descent(SGD)以及对比下Batch gradient descent、mini-batch gradient descent和stochastic gradient descent。

一、Batch gradient descent

批量梯度下降法(Batch gradient descent), 是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新。

公式如下:

DOA lasso 梯度下降_迭代


如果有m个样本,求梯度的时候就用所有m个样本的梯度数据。

Batch gradient descent的优点是理想状态下经过足够多的迭代后可以达到全局最优,具有稳定的误差梯度和聚合性。但是缺点也很明显,就是如果数据集非常的大(现在很常见),没有办法全部加载到内存里,所以BGD对于小样本适用,大数据集就没办法了。而且因为每次迭代都要遍历所有的样本,所以对于大数据量会非常的慢。

二、stochastic gradient descent

为了加快收敛速度,并且解决大数据量无法一次性塞入内存(显存)的问题,随机梯度下降法stochastic gradient descent,SGD)就被提出来了,SGD的思想是每次只训练一个样本去更新参数。

对应的更新公式如下:

DOA lasso 梯度下降_DOA lasso 梯度下降_02


SGD也有缺点,因为每次只用一个样本来更新参数,会导致不稳定性大些(可以看下图(图片来自ng deep learning 课),每次更新的方向,不像batch gradient descent那样每次都朝着最优点的方向逼近,会在最优点附近震荡)。

注意:代码中的注意把数据打乱(permute/shuffle),因为这个随机性相当于引入了“噪音”,正是因为这个噪音,使得SGD可能会避免陷入局部最优解中。

DOA lasso 梯度下降_最小二乘法_03

损失函数(Loss Function )是定义在单个样本上的,算的是一个样本的误差。代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。SGD的代价函数随着迭代次数是震荡式的下降的(因为每次用一个样本,有可能方向是背离最优点的)。

三、Mini-batch gradient descent
小批量梯度下降(mini-batch gradient descent )是batch gradient descent和stochastic gradient descent的折中方案,就是mini-batch gradient descent每次用一部分样本来更新参数,即 batch_sizebatch_size。因此,若batch_size=1 则变成了SGD,若batch_size=m则变成了batch gradient descent。 batch_sizebatch_size通常设置为2的幂次方,通常设置2,4,8,16,32,64,128,256,512(很少设置大于512)。因为设置成2的幂次方,更有利于GPU加速。

现在深度学习中,基本上都是用 mini-batch gradient descent,因为它结合了前两种方法。它只是将训练数据集拆分成小批量,并为每个批量执行更新。因此,它平衡了随机梯度下降的稳健性和批量梯度下降的效率。(在深度学习中,很多直接把mini-batch gradient descent(a.k.a stochastic mini-batch gradient descent)简称为SGD,所以当你看到深度学习中的SGD,一般指的就是mini-batch gradient descent)。下面用几张图来展示下mini-batch gradient descent的原理(图片来自ng deep learning 课):

DOA lasso 梯度下降_最小二乘法_04

下面来看mini-batch gradient descent 和 stochastic gradient descent 在下降时的对比图:

DOA lasso 梯度下降_梯度下降_05

mini-batch gradient descent的代价函数相对SGD在下降的时候,相对平滑些(相对稳定),不像SGD那样震荡的比较厉害。mini-batch gradient descent的一个缺点是增加了一个超参数 batch_sizebatch_size ,需要去调这个超参数。

四、与其他无约束优化算法比较
在机器学习中的无约束优化算法,除了梯度下降以外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。

对比最小二乘法,a)梯度下降需要选择步长,最小二乘法不要。b)梯度下降是迭代求解,最小二乘法是求得解析解。可以理解为,样本多就梯度下降,较小时最小二乘法解。最小二乘法的局限性,a):需要计算逆矩阵,但有时候逆矩阵不一定存在。b):当特征数特别大,计算逆矩阵耗时。c):如果拟合函数非线性,无法使用。

对比牛顿法/拟牛顿法,a):都是迭代求解b):梯度下降是梯度求解,而牛顿法用二阶海森伪矩阵求解c):牛顿法收敛更快,但迭代时间 题梯度下降要长。

参考链接:

https://leon.bottou.org/projects/sgd

https://baijiahao.baidu.com/s?id=1613121229156499765&wfr=spider&for=pc