wickedvalley 2018-03-09
梯度下降是目前最流行的优化策略,目前用于机器学习和深度学习。它在训练模型时使用,可以与每种算法结合使用,易于理解和实施。因此,每个使用机器学习的人都应该理解它的概念。阅读完这篇文章后,你将了解梯度下降是如何工作的,它今天使用了哪些类型,以及它们的优点和权衡。
介绍
在训练机器学习模型时使用梯度下降。它是一种基于凸函数的优化算法,它迭代地调整参数以使给定函数最小化。
它只是用来尽可能地找到使成本函数最小化的函数参数(系数)的值。
首先定义初始参数值,然后在渐变下降中使用微积分迭代调整值,以使它们最小化给定的成本函数。但要充分理解它的概念,首先需要知道梯度是什么。
什么是梯度?
“一个梯度可以衡量一个函数的输出如果你稍微改变输入就会改变多少。” ——Lex Fridman(麻省理工学院)
它简单的衡量了所有权重的变化,并考虑到误差的变化。你也可以将梯度看作函数的斜率,坡度越高,坡度越陡,模型可以学习得越快。但如果斜率为零,模型就停止学习了。更精确地说,梯度是关于其输入的偏导数。
想象一下,一个蒙着眼睛的男人想要爬上一座小山,尽可能的少走几步。他只是从最陡峭的方向开始爬山,只要他不靠近山顶,他就可以做到。随着他越来越高,他会做越来越少的步骤,因为他不想超越它。这个过程可以使用梯度、数学方法来描述。
请看下面的图片。想象一下,它从自上而下的角度展示了我们的山、红色箭头显示了我们的登山者的步伐。在这种情况下,想象一个梯度,把它作为一个矢量,包含被蒙住眼睛的人可以走的最陡峭的方向,以及步骤的长度。
请注意,从X0到X1的梯度远远长于从X3到X4的梯度。这是因为山的陡坡/坡度较小,这决定了矢量的长度。这完全代表了小山的例子,因为小山变得不那么陡峭。因此,伴随着爬坡者坡度和步长的减小坡度减小。
怎么运行的?
梯度下降可以被认为是攀登到山谷的底部,而不是爬上山丘。这是因为它是使给定函数最小化的最小化算法。
下面的等式描述了梯度下降的作用:“b”描述了我们登山者的下一个位置,而“a”代表了他的当前位置。减号表示梯度下降的最小化部分。中间的“gamma”是一个等待因素,梯度项(Δf(a))仅仅是最陡下降的方向。
所以这个公式基本上告诉你下一个你需要去的位置,这是最陡下降的方向。
但要确保你完全理解这个概念,需要通过另一个例子。
想象一下,你正在处理机器学习问题,并希望通过梯度下降训练你的算法,以最小化成本函数J(w,b),并通过调整其参数(w和b)来达到其局部最小值。
让我们来看看下面的图片,这是梯度下降的例证。水平轴表示参数(w和b),成本函数J(w,b)表示在垂直轴上。你也可以在图像中看到渐变下降是一个凸函数。
就像你已经知道的那样,我们想要查找与成本函数的最小值相对应的W和B的值(用红色箭头标记)。首先找到正确的值,我们用一些随机数初始化W和B的值,然后梯度下降从那一点开始(在我们的插图的顶部附近)。然后以最陡的下行方向(例如从图的顶部到底部)一步接一步,直到它达到成本函数尽可能小的点。
学习率的重要性
梯度下降到占据局部最小值的方向有多大,取决于所谓的学习率。它决定了我们如何快速或慢速朝着最优权重。
为了使梯度下降达到当地最低限度,我们必须将学习率设置为适当的值,该值既不低也不太高。
这是因为如果步骤太大,它可能不会达到局部最小值,因为它只是在梯度下降的凸函数之间来回跳动,就像你可以在下面的图像左侧看到的那样。如果你将学习速率设置为非常小的值,渐变下降最终将达到局部最小值,但它可能会花费太多时间,就像你可以在图像的右侧看到的那样。
这就是为什么学习率不应该太高也不能太低。你可以通过在图表上绘制学习率来检查你的学习速度是否正常,我们将在下面部分讨论。
如何确保它正常工作
确保梯度下降正常运行的一种好方法是将梯度下降运行时的成本函数绘制成图。x轴上的迭代次数和y轴上的成本函数值使你可以在每次迭代梯度下降后查看成本函数的值。这可以让你轻松找出适合的学习率。而你只需尝试不同的值并将它们一起绘制。
你可以在左侧看到这样的情节,右侧的图像显示了好的和不好的学习率之间的差异:
如果梯度下降是正常工作,则每次迭代后成本函数应该降低。
当梯度下降不再降低成本函数并且保持或多或少处于同一水平时,我们说它已经收敛。请注意,梯度下降需要收敛的迭代次数有时会有很大差异。它可能需要50次迭代,6万次甚至300万次。因此,迭代次数很难预先估计。
另外还有一些算法可以自动告诉你,如果梯度下降已经收敛,但你需要事先定义一个阀值的收敛,这也很难估计。这就是为什么这些简单的情节是首选的收敛性测试。
通过绘图监视渐变下降的另一个优点是,你可以很容易地发现它是否无法正常工作,例如,如果成本函数正在增加。大多数情况下,使用渐变下降的成本函数越来越多,原因是学习速度过高。
如果你在情节中看到你的学习曲线正在上升和下降,而没有真正达到低点,你也应该尝试降低学习速度。顺便说一下,当你在一个给定的问题上开始使用梯度下降法时,只需简单地尝试0.001,0.003,0.01,0.03,0.1,0.3,1等等,看看它的学习速度哪一个表现最好。
梯度下降的类型
外面有三种流行的梯度下降类型,主要是它们使用的数据量不同,我们一一浏览它们。
批次梯度下降
批次梯度下降也称为香草梯度下降,计算训练数据集内每个示例的误差,但只有在所有训练样例已经评估后,模型才会更新。整个过程就像一个循环,称为训练时代。
它的优点是它的计算效率高,它产生一个稳定的误差梯度和稳定的收敛。批梯度下降具有的缺点是,稳定的误差梯度有时可能导致收敛状态不是模型能达到的最佳状态。它还要求整个训练数据集存储在内存中并可供算法使用。
随机梯度下降
相反,随机梯度下降(SGD)对于数据集内的每个训练样例都是这样。这意味着它会逐个更示例个训练示例的参数。这可能会使SGD比批量渐变下降更快,具体取决于问题。一个好处是频繁的更新使我们有一个相当详细的改进速度。
问题在于频繁更新的批处理梯度下降方法在计算上更加昂贵。这些更新的频率也会导致噪音梯度,这可能会导致错误率跳跃,而不是缓慢下降。
迷你批次梯度下降
小批量梯度下降法是一种先进的方法,因为它是SGD和批次梯度下降概念的组合。它只是将训练数据集分成小批量,并为这些批次中的每个批次执行更新。因此它可以在随机梯度下降的稳健性和批梯度下降的效率之间建立平衡。
常见的小批量大小范围在50到256之间,但是对于任何其他机器学习技术而言,没有明确的规则,因为它们可以针对不同的应用而变化。请注意,它是在训练神经网络时的go-to算法,它是深度学习中最常见的梯度下降类型。
总结
在这篇文章中,你学到了很多关于梯度下降的知识。你现在知道它的基本术语,并且了解该算法如何在幕后工作。此外,你了解了为什么学习率是最重要的超参数,以及如何检查算法是否能够使你正确训练你的模型。
最后,你了解了三种最常见的梯度下降类型及其优缺点。这些知识使你能够正确地训练模型。