梯度下降-初学者指南
简介:
任何机器学习算法中最关键的部分就是优化。如何让你的学习算法学得更快?梯度下降是机器学习中最强大的优化算法之一。我们中许多人对梯度下降是很熟悉的,但当它理解它时,我们所有人都经历了一种看到可怕的数学方程式的过程,并绘制了一些类似的过程
现在,把上面的图看成是这样的。
现在,为了理解梯度下降,让我们想象一下从山顶出发的河流的路径。梯度下降的工作正是河流的目标;到达山顶的最底层。现在,正如我们所知道的,地球上有一种引力,因此河流会一直向下流动,直到它到达山麓。在这里,我们会做出一些假设,说这座山的形状将会在任何地方都不会停下来,而且会直接到达山麓。在机器学习中,这是我们所期望的理想情况,你可以说我们已经达到了我们的“全局最小值”(在这个类比中,这意味着我们已经到达了“foothill”)。然而,在现实生活中,情况并非如此。下山的路可能会有很多坑,可能会有水被困在坑里,不能向下移动。在机器学习术语中,这被称为“局部最小值”,它对我们的任何学习算法都是有害的。梯度下降倾向于到达这样的局部极小值,且不收敛。然而,当山地地形以一种特殊的方式设计时,即一个碗形(在机器学习中,我们称之为凸函数),那么我们就保证到达全局最小值(foothill)。关于梯度下降,有两个重要的点;初始值和学习速率。要对它们有一个大致的认识,我们知道,取决于河流最初的发源地,它会沿着一条不同的路径到达山麓。另外,根据河流的速度(学习速度),你可能会以不同的方式到达山麓。这些值对于决定是否到达foothill(全局最小值)或被困在凹坑(局部最小值)非常重要。
如上所述,帮助河流向下流动的主要原因之一是地球的引力。可悲的是,在编码/数学中,我们没有使用地球引力的杠杆!!因此,为了克服这一点,我们需要转向数学,需要知道两种方法来帮助我们走向山麓。我们通过计算坡度来计算我们的坡度,计算我们的步长(也就是说,河流需要向特定方向移动多少单位)
现在,让我们考虑一下梯度下降的公式:
根据上述公式,我们可以自行设定两件事情。α和current的当前位置。我们唯一需要学习的是如何计算梯度?要计算点Ɵ的函数梯度,我们必须对function函数进行一次微分。让我们通过一个例子来了解如何做到这一点:
考虑一个函数:
f(x,y)= x + y
- 我们设置x = 2和y = 6的初始值
- 函数的输出是8
- 这里的问题是,如何调整输入值以减少输出?让我们从区分上述功能入手来开始吧。x和y:
这些导数可以被认为是每个输入的力就像我们想让输出变得尽可能小;告诉我们x和y如何改变以减少输出的力。
让我们看看更新规则是如何在上面的计算中工作的(让α=0.001)
为了减少我们函数的输出,我们需要用1级的正向力来调整输入x和y。例如,将x的值从2改变到1.999将得到7.99的输出,其小于8,并且同样,通过将y的值从6更改为5.999,将会得到7.998的输出,它小于8!梯度下降算法的下一个重要特征是它是一种迭代算法!意思是,我们重复上述步骤直到收敛。
所以,如果我们重复上述过程4000次,我们将得到x = -2和y = 2.0的值,从而导致我们给出函数f(x,y)= 0的输出。所以我们得到了期望值x和y的函数使得我们的函数给出最小值0.
这是梯度下降算法背后的直觉 - “最大命中”优化技术之一,它是大多数机器学习算法的核心。