敏捷在软件开发过程当中是一个很是著名的术语,它背后的基本思想很简单:快速构建一些东西,而后获得一些反馈,根据反馈作出改变,重复此过程。目标是让产品更贴合用,让用户作出反馈,以得到设计开发出的产品与优秀的产品两者之间偏差最小,梯度降低算法背后的原理和这基本同样。算法
梯度降低算法是一个迭代过程,它将得到函数的最小值。下面的公式将整个梯度降低算法汇总在一行中。网络
可是这个公式是如何得出的呢?实际上很简单,只须要具有一些高中的数学知识便可理解。本文将尝试讲解这个公式,并以线性回归模型为例,构建此类公式。机器学习
Y=mX+b
,其中m
是斜率,b
是其在Y轴的截距。预测函数
给定一组已知的输入及其相应的输出,机器学习模型试图对一组新的输入作出一些预测。性能
两个预测之间的差别即为错误。学习
这涉及成本函数或损失函数的概念(cost function or loss function)。优化
成本函数/损失函数用来评估机器学习算法的性能。两者的区别在于,损失函数计算单个训练示例的错误,而成本函数是整个训练集上错误的平均值。spa
成本函数基本上能告诉咱们模型在给定m和b的值时,其预测能“有多好”。设计
比方说,数据集中总共有N
个点,咱们想要最小化全部N
个数据点的偏差。所以,成本函数将是总平方偏差,即3d
为何采起平方差而不是绝对差?由于平方差使得导出回归线更容易。实际上,为了找到这条直线,咱们须要计算成本函数的一阶导数,而计算绝对值的导数比平方值更难。
任何机器学习算法的目标都是最小化成本函数。
这是由于实际值和预测值之间的偏差对应着表示算法在学习方面的性能。因为但愿偏差值最小,所以尽可能使得那些m
和b
值可以产生尽量小的偏差。
仔细观察上述的成本函数,其形式为Y=X²
。在笛卡尔坐标系中,这是一个抛物线方程,用图形表示以下:
为了最小化上面的函数,须要找到一个x
,函数在该点能产生小值Y
,即图中的红点。因为这是一个二维图像,所以很容易找到其最小值,可是在维度比较大的状况下,状况会更加复杂。对于种状况,须要设计一种算法来定位最小值,该算法称为梯度降低算法(Gradient Descent)。
梯度降低是优化模型的方法中最流行的算法之一,也是迄今为止优化神经网络的最经常使用方法。它本质上是一种迭代优化算法,用于查找函数的最小值。
假设你是沿着下面的图表走,目前位于曲线'绿'点处,而目标是到达最小值,即红
点位置,但你是没法看到该最低点。
可能采起的行动:
从本质上讲,你应该知道两件事来达到最小值,即走哪条和走多远。
梯度降低算法经过使用导数帮助咱们有效地作出这些决策。导数是来源于积分,用于计算曲线特定点处的斜率。经过在该点处绘制图形的切线来描述斜率。所以,若是可以计算出这条切线,可能就可以计算达到最小值的所需方向。
在下图中,在绿点处绘制切线,若是向上移动,就将远离最小值,反之亦然。此外,切线也能让咱们感受到斜坡的陡峭程度。
蓝点处的斜率比绿点处的斜率低,这意味着从蓝点到绿点所需的步长要小得多。
如今将上述内容归入数学公式中。在等式y=mX+b
中,m
和b
是其参数。在训练过程当中,其值也会发生微小变化,用δ
表示这个小的变化。参数值将分别更新为m = m-δm
和b = b-δb
。最终目标是找到m
和b
的值,以使得y=mx+b
的偏差最小,即最小化成本函数。
重写成本函数:
想法是,经过计算函数的导数/斜率,就能够找到函数的最小值。
达到最小值或最低值所采起的步长大小称为学习率。学习率能够设置的比较大,但有可能会错过最小值。而另外一方面,小的学习率将花费大量时间训练以达到最低点。
下面的可视化给出了学习率的基本概念。在第三个图中,以最小步数达到最小点,这代表该学习率是此问题的最佳学习率。
从上图能够看到,当学习率过低时,须要花费很长训练时间才能收敛。而另外一方面,当学习率过高时,梯度降低未达到最小值,以下面所示:
机器学习在优化问题中使用导数。梯度降低等优化算法使用导数来决定是增长仍是减小权重,进而增长或减小目标函数。
若是可以计算出函数的导数,就能够知道在哪一个方向上能到达最小化。
主要处理方法源自于微积分中的两个基本概念:
举个例子增强理解:
使用指数法则和链式发规,计算成本函数相对于m和c的变化方式。这涉及偏导数的概念,即若是存在两个变量的函数,那么为了找到该函数对其中一个变量的偏导数,需将另外一个变量视为常数。举个例子增强理解:
如今将这些微积分法则的知识应用到原始方程中,并找到成本函数的导数,即m
和b
。修改为本函数方程:
为简单起见,忽略求和符号。求和部分其实很重要,尤为是随机梯度降低(SGD)与批量梯度降低的概念。在批量梯度降低期间,咱们一次查看全部训练样例的错误,而在SGD中一次只查看其中的一个错误。这里为了简单起见,假设一次只查看其中的一个错误:
如今计算偏差对m和b的梯度:
将值对等到成本函数中并将其乘以学习率:
其中这个等式中的系数项2是一个常数,求导时并不重要,这里将其忽略。所以,最终,整篇文章归结为两个简单的方程式,它们表明了梯度降低的方程。
其中m¹
,b¹
是下一个位置的参数;m⁰
,b⁰
是当前位置的参数。
所以,为了求解梯度,使用新的
m
和b
值迭代数据点并计算偏导数。这个新的梯度会告诉咱们当前位置的成本函数的斜率以及咱们应该更新参数的方向。另外更新参数的步长由学习率控制。
本文的重点是展现梯度降低的基本概念,并以线性回归为例讲解梯度降低算法。经过绘制最佳拟合线来衡量学生身高和体重之间的关系。可是,这里为了简单起见,举的例子是机器学习算法中较简单的线性回归模型,读者也能够将其应用到其它机器学习方法中。
原文连接 本文为云栖社区原创内容,未经容许不得转载。