在研究机器学习和深度学习时出现的主要问题之一是梯度下降的几种类型。在梯度下降的三种类型(Batch梯度下降、Mini-batch梯度下降和随机梯度下降)中,我应该使用哪一种呢?在这篇文章中,我们将了解这些概念之间的区别,并从梯度下降的代码实现来阐明这些方法。
梯度下降
梯度下降是帮助神经网络获得正确的权重值和偏差值的最常见算法之一。梯度下降法(GD)是在每一步中最小化成本函数J(W,b)的一种算法。它迭代地更新权重和偏差,以尝试在成本函数中达到全局最小值。
最小化成本函数,梯度下降图 在我们计算GD之前,首先获取输入并通过神经网络的所有节点,然后计算输入、权重和偏差的加权和。这是计算梯度下降的主要步骤之一,称为正向传播。一旦我们有了一个输出,我们将这个输出与预期的输出进行比较,并计算出它们之间的差异,即误差。有了这个误差,我们现在可以反向传播它,更新每个权重和偏差,并尝试最小化这个误差。正如你所预料的,这部分被称为反向传播。反向传播步骤是使用导数计算得出的,并返回“梯度”,这个值告诉我们应遵循哪个方向以最小化成本函数。
现在我们准备更新权重矩阵W和偏差向量b了。梯度下降规则如下:
换句话说,新的权重/偏差值将是最后一个权重/偏差值减去梯度的值,使其接近成本函数的全局最小值。我们还将这个梯度乘以一个学习率,它控制着步长。
这种经典的梯度下降法也称为Batch梯度下降法。在这种方法中,每个epoch遍历所有训练数据,然后计算损失并更新W和b值。该方法虽然具有稳定的收敛性和稳定的误差,但是该方法使用了整个机器学习训练集,因此,对于大型机器学习数据集会非常慢。
Mini-batch梯度下降
想象一下,将您的数据集分成几个batches。这样,它就不必等到算法遍历整个数据集后才更新权重和偏差,而是在每个所谓的Mini-batch结束时进行更新。这使得我们能够快速将成本函数移至全局最小值,并在每个epoch中多次更新权重和偏差。最常见的Mini-batch大小是16、32、64、128、256和512。大多数项目使用Mini-batch梯度下降,因为它在较大的机器学习数据集中速度更快。
Batch梯度下降
如前所述,在此梯度下降中,每个Batch等于整个数据集。那是:
其中{1}表示Mini-batch中的第一批次。缺点是每次迭代花费的时间太长。此方法可用于训练少于2000个样本的机器学习数据集。
随机梯度下降
在这种方法中,每个batch等于训练集中的一个实例。
其中(1)表示第一个训练实例。这里的缺点是它失去了向量化的优势,有更多的振荡但收敛得更快。
最后
理解这些优化算法之间的区别是很重要的,因为它们构成了神经网络的关键功能。综上所述,Batch梯度下降虽然比随机梯度下降具有更高的准确度,但是随机梯度下降的速度更快。Mini-batch梯度下降很好地结合了两者,从而提供了良好的准确性和性能。
可以仅使用Mini-batch梯度下降代码来实现所有版本的梯度下降,对于随机梯度下降可以将mini_batch_size设置为1,对于Batch梯度下降可以将mini_batch_size设置为数据集中的实例数。因此,Batch、Mini-batch和随机梯度下降之间的主要区别是每个epoch使用的实例数以及达到成本函数的全局最小值所需的时间。