梯度下降法的基本原理

梯度下降法的基本原理求解线性回归模型的过程本质上是一个函数求极值的过程。解析解通过严格的公式推导和计算,给出了解的具体形式,能够在任意精度下满足方程,但是,在很多情况下,无法直接通过严格的公式推导得到方程或者方程组的解析解,这个时候只能采用数值分析的方法,得到近似解,这样的解也称为数值解。数值解是在一定条件下,通过某种近似计算得到的解,能够在给定的精度条件下满足方程。这里就来介绍一种求数值解的常用方法—梯度下降法1、一元凸函数求极值这种形状的曲线函数称为凸函数。它一定存在唯一的一个极小值点。这个点在一个斜率正好为

大家好,欢迎来到IT知识分享网。

求解线性回归模型的过程本质上是一个函数求极值的过程。

解析解通过严格的公式推导和计算,给出了解的具体形式,能够在任意精度下满足方程,但是,在很多情况下,无法直接通过严格的公式推导得到方程或者方程组的解析解,这个时候只能采用数值分析的方法,得到近似解,这样的解也称为数值解。

数值解是在一定条件下,通过某种近似计算得到的解,能够在给定的精度条件下满足方程。

这里就来介绍一种求数值解的常用方法 — 梯度下降法

1、一元凸函数求极值
在这里插入图片描述
这种形状的曲线函数称为凸函数。它一定存在唯一的一个极小值点。这个点在一个斜率正好为0的位置。

在求解一个问题的时候,如果我们能够把它转换为在凸函数上求极小值的问题,那么这个问题就算已经解决了。

下面,来看一下如何使用数值计算的方法得到它的数值解,这类问题可以采用迭代的方法来求解。

首先,在函数曲线上,取任意一点x0作为初值,当然这个初值不会恰好在极值点上,下面,我们再来按照某个步长移动 x ,找到 x1 。使得函数在x1上的值小于在x0上的值,不断重复这个步骤,直到无法找到更小的函数值。最后找到的这个x就是使得函数达到极小值时的位置。
在这里插入图片描述
例如,取初始值x0为3,那么这一点的函数值就是11,假设取步长为0.2,那么x可能分别向两个方向移动,到达3.2和2.8的位置。
在这里插入图片描述
究竟应该向哪个方向进行移动呢?我们可以对比它们的函数值,显然,9.84小于12.24,所以应该向下移动,即取 x1 = 2.8 ,下面再以2.8为起点,步长仍然是0.2,对比函数在x等于2.6和x = 3 处的取值,显然,在x等于2.6时的值更小,所以这次取x2等于2.6,下面再以2.6为起点,继续这个过程,直到函数达到最小值。
在这里插入图片描述
这个图只是示意图,这个步长比例也是夸张的,其实每一步0.2要比这个小很多。

为了更加严谨,下面用表格的形式来展示这个迭代的过程。
在这里插入图片描述
这个初值 x0 等于3,步长为0.2,在第15次迭代的时候,到达 x 等于0,且f(0) = 2,且现在无论往哪个方向移动,函数值都是2.04,比 x = 0时更大,也就是说到这里之后,函数值不能再继续减小了。因此,当 x = 0时, f(x) 就达到了最小值,迭代结束。

采用这种方法需要通过多次迭代,不断地接近极值点。因此,要花费比较长的时间。如果想要速度更快的话,可以把步长的值加大,例如把步长修改为0.5,那么只要经过六次迭代就可以达到极小值点。
在这里插入图片描述
可见,步长取值越大,找到极值点的速度就越快。那么是不是步长的取值越大越好呢?我们把步长设置为0.7再来试验一下。
在这里插入图片描述
从上图中,可以看到,在第四次迭代时,x = 0.2,这时候可以取到两个点分别是 -0.5 和 0.9,取 -0.5 时,函数值更小,因此下一步取 -0.5 作为起点,这时候比较x等于 -1.2 和 x 等于0.2时函数的取值,取 0.2 时函数值更小,因此又回到了 0.2 ,继续进行这个过程,会一直在 0.2 和 -0.5 之间来回震荡。无法达到极小值点。产生震荡的原因,是因为更新 x 的时候步长太大。一下子跨过了最小值。

在英文资料中,把这种情况称为 overshoot the minimum,即为震荡现象。

震荡现象也分为两种情况,一种是虽然来回振荡,但是震荡的幅度越来越小,最后能够收敛。另一种就是来回振荡,无法收敛。

通过这个例子,我们发现,步长太小,迭代次数多,收敛慢。步长太大,引起震荡,可能无法收敛。

那么,这个步长能不能自动的调节呢?即在距离极值点比较远的地方,步长的取值可以大一些,使得算法尽快收敛,而在距离极值点比较近的地方,步长的取值可以小一些,使得算法避免震荡。

那怎么样才能够实现这种步长的自动调节呢?

观察这个曲线,可以发现,距离极值点比较远的地方,曲线比较陡峭,随着不断靠近极值点,曲线逐渐变得平缓。曲线的陡峭程度可以用斜率表示。曲线越陡,斜率就越大,这时候就希望步长也越大。曲线越平缓,斜率就越小,这时候就希望步长也越小。因此,只要用斜率来调节步长就可以了。而曲线在这个点的斜率,就是函数在这个点的导数。
在这里插入图片描述
让步长和斜率之间保持正比例的关系,步长等于 η 乘以斜率,η 是一个常数,称为学习率。就可以得到更新 x 的迭代公式。
在这里插入图片描述
这里采用加括号的上标来表示迭代的次数,这是为了和之前的采用下标表示样本序号、采用上标表示属性区分开来。

在第 K+1 次迭代中,x 的取值是由第 k 次 x 的值减去步长得到。采用这种方法进行迭代,可以根据函数曲线的斜率实现对步长的自适应调整。
在这里插入图片描述
在这种迭代算法中,
当 x 大于 0 时,导数为正数,这时候,x(k+1)等于x(k)减去一个正数,变得更小。x向原点的方向进行移动。

当 x 小于 0 时,导数为负数,这时候,x(k+1)等于x(k)减去一个负数,变得更小。x向原点的方向进行移动。

( x(k+1) 和 x(k) 都只是x坐标轴的位置。)

可见,无论 x 是大于 0 ,还是小于0,最终都会收敛与原点。采用这种方法,导数的符号就直接决定了迭代更新的方向,而不需要像前面的例子那样,每次都去比较两个方向的函数值来确定 x 移动的方向。

总结:采用这种迭代算法,能够自动调整步长,自动确定下一次更新 x 的方向,并且能够保证收敛性。

这种一元凸函数求极值的方法可以推广到二元凸函数中,二元函数中有两个自变量 x 和 y,需要分别进行迭代计算。

二元函数的迭代算法

在这里插入图片描述
x 的更新通过函数对 x 的偏导数来调节。y 的更新通过函数对 y 的偏导数来调节。函数 f 对 x 的偏导数和对 y 的偏导数所组成的向量是二元函数的梯度。

梯度下降法

在这里插入图片描述
函数在某一点 p 的导数其实就是函数在 p 点的变化率。

二元函数对 x 的偏导数其实就是函数在 x 方向上的变化率,对 y 的偏导数其实就是函数在 y 方向上的变化率。

除了 x 和 y 偏导数之外,还有方向导数,就是沿着某一个方向 L 的变化率。这个 L 可以是任意一个方向。x 和 y 偏导数都是方向导数的特例。那么,函数在 P点沿着哪一个方向的变化最快呢?也就是说哪一个方向导数最大,这个最大的值又是多少呢?这个问题的答案就是梯度,梯度是一个矢量,既有大小又有方向。
在这里插入图片描述
也可以采用这样的向量形式来表示。
在这里插入图片描述
它的大小(模)就是所有方向导数中那个最大的值,它的方向为取到最大方向导数的方向。或者说函数在某个点的梯度就是指在这个点沿着这个方向的变化率最大。

这种二元函数求极值的迭代算法其实就是每一步都沿着梯度的方向进行移动,也就是沿着最陡的方向进行移动这样做计算的速度是最快的,这种方法也被称为梯度下降法。
在这里插入图片描述
这就好像下山,我们在山腰上的某个位置,环顾一圈之后,沿着当前最陡的方向向下走一步,然后再环顾一周,再沿着最陡的方向向下走一步,不断重复这个过程,保证每一步都是沿着当时最陡的方向向下走,那么一定可以以最小的步数到达山脚下。当然,这要假设这个山的每一个方向上都有路,都可以向下走。

对于机器学习算法,只要能够把损失函数描述成凸函数,那么就一定可以采用梯度下降法,以最快的速度更新权值向量,从而找到使损失函数达到最小值点的位置。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21526.html

(0)

相关推荐

发表回复

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

关注微信