AI 基础

什么是梯度下降?

mm
将 Unite.AI 添加到您在 Google 上的首选来源

什么是梯度下降?

如果你曾经读过关于如何训练神经网络的内容,你几乎肯定已经遇到过“梯度下降”这个术语。 梯度下降 是优化神经网络性能的主要方法,减少网络的损失/错误率。然而,梯度下降对于新手机器学习者来说可能有点难以理解,本文将尝试为你提供一个对梯度下降工作原理的良好理解。

梯度下降是一种优化算法。它用于通过调整网络的参数来提高神经网络的性能,使得网络的预测和实际/预期值之间的差异(即损失)尽可能小。梯度下降从参数的初始值开始,使用基于微积分的操作来调整它们的值,以使网络尽可能准确。你不需要知道很多微积分来理解梯度下降的工作原理,但你需要了解梯度的概念。

什么是梯度?

假设有一张图代表神经网络的错误量。图的底部代表错误最小的点,而顶部代表错误最大的点。我们想从图的顶部移动到底部。梯度只是量化错误和神经网络权重之间关系的一种方式。这种关系可以用 斜率 来表示,错误的权重会产生更多的错误。斜率/梯度的陡度代表模型学习的速度。

更陡的斜率意味着错误的大幅减少,模型学习速度快,而如果斜率为零,模型处于平原上,不会学习。我们可以通过计算梯度来移动下坡,朝着错误更小的方向移动。

让我们稍微改变一下比喻,想象一系列山丘和山谷。我们想找到山谷中代表最低损失的部分。当我们从山顶开始时,我们可以向下走大步,相信我们正在朝着山谷中最低点走去。

然而,当我们接近山谷中最低点时,我们的步伐需要变得更小,否则我们可能会超过真正的最低点。同样,当调整网络的权重时,调整可能会使其远离最低损失点,因此调整需要随着时间的推移而变得更小。在下坡朝着最低损失点的背景下,梯度是一条向量/指令,详细说明我们应该走的路径和步伐的大小。

现在我们知道梯度是指示我们移动的方向(哪些系数应该更新)和步伐的大小(系数应该更新多少),我们可以探索梯度的计算方法。

计算梯度和梯度下降

梯度下降从高损失点开始,通过多次迭代,朝着最低损失方向移动,旨在找到最佳的权重配置。图片来源:Роман Сузи via Wikimedia Commons,CC BY SA 3.0(https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

为了执行梯度下降,首先需要计算梯度。为了 计算梯度,我们需要知道损失/成本函数。我们将使用成本函数来确定导数。在微积分中,导数只是指函数在给定点的斜率,因此我们基本上只是计算基于损失函数的斜率。我们通过将系数传递给损失函数来确定损失。如果我们将损失函数表示为“f”,那么我们可以将计算损失的方程表示为:

损失 = f(系数)

然后我们计算导数,或确定斜率。获取损失的导数将告诉我们上下坡的方向,通过给我们调整系数的适当符号。我们将适当的方向表示为“delta”。

delta = derivative_function(损失)

我们现在已经确定了下坡的方向,这意味着我们可以更新神经网络参数中的系数,并希望减少损失。我们将根据之前的系数减去适当的变化值(由方向(delta)和控制变化大小的参数(步长)确定)来更新系数。控制更新大小的参数称为“学习率”,我们将其表示为“alpha”。

系数 = 系数 – (alpha * delta)

然后我们只需重复这个过程,直到网络收敛到损失最小的点附近,这应该接近零。

选择合适的学习率(alpha)非常重要。选择的学习率不能太小或太大。记住,当我们接近最低损失点时,我们的步伐需要变得更小,否则我们可能会超过真正的最低损失点,最后落在另一侧。损失最小的点很小,如果我们的变化率太大,错误可能会再次增加。如果步长太大,网络的性能将继续在最低损失点周围波动,先后超过它的一侧然后另一侧。如果发生这种情况,网络将永远不会收敛到真正的最佳权重配置。

相比之下,如果学习率太小,网络可能需要非常长的时间才能收敛到最佳权重。

梯度下降类型

现在我们已经理解了梯度下降的总体工作原理,让我们来看看一些不同类型的 梯度下降

批量梯度下降:这种梯度下降形式在更新系数之前会处理所有训练样本。这种梯度下降类型可能是最计算效率高的梯度下降形式,因为权重只在整个批次处理完成后更新,这意味着总更新次数更少。然而,如果数据集包含大量训练示例,则批量梯度下降可能会使训练时间变长。

随机梯度下降:在随机梯度下降中,每次迭代和参数更新只处理一个训练示例。这对每个训练示例都发生。由于在更新参数之前只处理一个训练示例,因此它往往比批量梯度下降收敛得更快,因为更新更快。但是,由于该过程必须对训练集中的每个项执行,因此如果数据集很大,则可能需要很长时间才能完成,因此如果数据集很大,则更喜欢使用其他类型的梯度下降。

小批量梯度下降:小批量梯度下降通过将整个训练数据集分成子集来工作。它创建较小的迷你批次,这些批次被传递给网络,当迷你批次被用于计算错误时,系数会被更新。小批量梯度下降在随机梯度下降和批量梯度下降之间找到平衡。模型比批量梯度下降更频繁地更新,这意味着对模型的最佳参数的收敛略快且更强健。它也比随机梯度下降更计算效率高

博客作者和程序员,专攻 Machine Learning Deep Learning 领域。Daniel 希望帮助他人利用 AI 的力量为社会做好事。