什么是小批量梯度下降、批量梯度下降和随机梯度下降,它们之间有什么区别呢?

如何使用实现一个标准的小批量梯度下降?

这篇文章将帮您理清上面这两个问题。

随机梯度下降算法_梯度下降算法梯度消失原因_梯度下降算法改进

梯度下降算法,有三种常见形式,分别是批量梯度下降、随机梯度下降和小批量梯度下降。

1.三种梯度下降的关联和区别

首先是批量梯度下降。

在每次迭代中,批量梯度下降都会基于所有的训练样本,计算损失函数的梯度。因此,我们可以得到一条平滑的收敛曲线。

梯度下降算法改进_随机梯度下降算法_梯度下降算法梯度消失原因

例如,在训练集中有100个样本,迭代50轮。

那么在每一轮迭代中,都会一起使用这100个样本,计算整个训练集的梯度,并对模型更新。所以总共会更新50次梯度。

因为每次迭代都会使用整个训练集计算梯度,所以这种方法可以得到准确的梯度方向,但如果数据集非常大,那么就导致每次迭代都很慢,计算成本就会很高。

随机梯度下降,会在一轮完整的迭代过程中,遍历整个训练集。

但是每次更新,都只基于一个样本,计算梯度。这样会得到一条震荡的收敛曲线。

梯度下降算法梯度消失原因_梯度下降算法改进_随机梯度下降算法

例如,如果训练集有100个样本随机梯度下降算法,迭代50轮,那么每一轮迭代,会遍历这100个样本,每次会计算某一个样本的梯度,然后更新模型参数。

换句话说,100个样本,迭代50轮,那么就会更新100*50=5000次梯度。

因为每次只用一个样本训练随机梯度下降算法,所以迭代速度会非常快。但更新的方向会不稳定,这也导致随机梯度下降,可能永远都不会收敛。

不过也因为这种震荡属性,使得随机梯度下降,可以跳出局部最优解。这在某些情况下,是非常有用的。

小批量梯度下降结合了批量梯度下降和随机梯度下降的优点。

在每次迭代时,都会从训练集中,随机的选择一组小批量的样本,来计算梯度,更新模型。

梯度下降算法改进_随机梯度下降算法_梯度下降算法梯度消失原因

例如,如果训练集中有100个样本,迭代50轮。如果设置小批量的数量是20,那么在每一轮迭代中,会有5次小批量迭代。

换句话说,就是将100个样本分成5个小批量,每个小批量20个数据,每次迭代用一个小批量。

因此,按照这样的方式,会对梯度,进行50轮*5个小批量=250次更新。

小批量梯度下降结合了随机梯度下降的高效性和批量梯度下降的稳定性,它比随机梯度下降有更稳定的收敛,同时又比批量梯度下降计算的更快。

梯度下降算法改进_梯度下降算法梯度消失原因_随机梯度下降算法

另外,由于小批量的随机性,还能使迭代跳出局部最优解。因此,小批量梯度下降是最为常见的模型训练方式。

接下来,我们基于一元线性回归问题,来说明如何实现一个标准的,小批量梯度下降算法。

2.实现小批量梯度下降

首先来看训练数据的生成。

梯度下降算法改进_随机梯度下降算法_梯度下降算法梯度消失原因

使用.seed,设置一个固定的随机种子,可以确保每次运行,都得到相同的数据,方便调试。

然后随机生成100个横坐标x,它的范围在0到2之间。生成带有噪音的纵坐标y。

数据基本分布在y=4+3x的附近。

随机梯度下降算法_梯度下降算法梯度消失原因_梯度下降算法改进

这样就生成了如图所示的训练数据。

接着,来看小批量迭代数据的构造:

梯度下降算法梯度消失原因_梯度下降算法改进_随机梯度下降算法

将训练数据x和y转为张量。

使用,将x和y组成训练集,并使用,构造随机的小批量数据。

这里设置参数=True,代表随机打乱数据的顺序。

参数=16,代表每一个小批量的数据规模是16,也就是每16个数据,作为一组训练数据。

打印的长度,结果是7,它对应了100/16=6.25。

也就是总共100个样本,每16个数据会作为1个batch,100个样本被分为了7个batch。

这里要注意,最后一个batch只包括4个数据。

例如,运行结果如下:

梯度下降算法梯度消失原因_随机梯度下降算法_梯度下降算法改进

遍历,会得到编号为0到6的7个batch。

到,每个batch有16个样本,,有4个样本。

最后是模型迭代循环的实现:

梯度下降算法梯度消失原因_梯度下降算法改进_随机梯度下降算法

设置待迭代的直线参数为w和b。

然后进入模型的迭代循环。外层循环,代表了整个训练数据集的迭代轮数。这里一共迭代50轮。

内层循环代表了,在一个迭代轮次中,以小批量的方式,使用对数据进行遍历。

其中表示当前遍历的批次。data和label表示这个批次的训练数据和标记。

对于每次迭代,首先计算当前直线的预测值,保存到h。

然后计算预测值h和真实值y之间的均方误差,保存到loss中。

使用loss.()进行反向传播,计算代价loss关于参数w和b的偏导数。

接着进行梯度下降,沿着梯度的反方向,更新w和b的值。

最后清空张量w和b中的梯度信息,为下一次迭代做准备。

随机梯度下降算法_梯度下降算法改进_梯度下降算法梯度消失原因

另外,每次迭代,都会打印当前迭代的轮数epoch、数据的批次和损失值loss。

梯度下降算法改进_梯度下降算法梯度消失原因_随机梯度下降算法

完成迭代后,打印w和b的值,并绘制直线。

随机梯度下降算法_梯度下降算法改进_梯度下降算法梯度消失原因

运行程序,就得到了蓝色的线性回归直线。

那么到这里,小批量梯度下降就讲完了,感谢大家的观看,我们下节课再会。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注