梯度下降算法(Gradient descent algorithm)

1.梯度下降是什么:

梯度下降是一种可以尝试最小化任何函数的算法,它不光光可以对我们的成本函数进行最小化的操作。

a.梯度下降具体怎么样实现:

我们想找到J函数的最小值,我们要先选取两个初始值,假如我们把初始值定为w=0,b=0,然后我们每次操作去微调w,b去让J减小,从而找到我们的最小值,在这里我们要注意如果J不是一个弓形或者碗状的函数我们可能能得到不止一个的最小值。

在这个J函数模型中,它十分像我们右上角这个山谷的图片,让我们来讲解一下梯度下降算法。

从图中我们看到了两条路线,暂且我们把左边的路线设为1号线,我们的小明要通过寻找最陡的方向从而找到最快下山的路,小明先旋转360度找到在其中最陡峭的方向向下,从而走一小步,到下一个位置时,我们在旋转360度寻找到我们的最陡峭的方向,从沿着这一条路直接走到了谷底。

当我们的位置在了右侧这个位置,从这个点是我们的2号线,我们也会和上面1号线一样的方法走到另外一个谷底,这两个最小值被我们称为是局部最小值(local minima) 。我们当然是从这两个路线中我们找到了更小的最小值。

让我们看一下什么是梯度下降算法:

 我们先介绍两个不同的概念:断言(truth assertion)和赋值(assignment),断言值得是两个值相同,比如a=c,说明的是a的值和c的值相同,但如果是a=a+1,它明显不对,因为不可能成立。在程序中,我们用的是==来表示。而赋值,值的是把等号右边的值赋值给左边的值,比如a=c指的是把c值赋值给a,而如果是a=a+1就是指的是a+1,在这里很明显就和断言完全不一样。

在梯度下降算法中我们主要用到了两个式子。

w=w-\alpha\frac{\partial }{\partial w}J(w,b) , b=b-\alpha \frac{\partial }{\partial b}J(w,b)

在这两个式子中\alpha指的是我们的学习率,学习率(learning rate)是一个控制每次迭代步长的超参数。它决定了在每次迭代中更新模型参数的幅度。如果学习率过小,每次更新的步长较小,收敛速度会很慢,可能需要更多的迭代次数才能达到最优解。而如果学习率过大,每次更新的步长较大,可能会导致错过最优解,甚至无法收敛。

(注:何为收敛,在机器学习和优化算法中,收敛(convergence)指的是算法迭代过程中逐渐接近最优解或稳定状态的过程。)

\frac{\partial }{\partial w}J(w,b)\frac{\partial }{\partial b}J(w,b)这两个则是他们的导数,这个我们在之后再讲。

我们在梯度下降算法中是同时(simultaneous)发生的。我们可以把它们简化为两步:

tmp_w=w-\alpha\frac{\partial }{\partial w}J(w,b), tmp_b= b-\alpha\frac{\partial }{\partial b}J(w,b), w=tmp_w, b=tmp_b

在这里我们要注意tmp中的w和b不是后面赋值的w,b,以上这个是正确的写法。(从左往右)

我们下面这个写法是错误的。 也是从左往右。

tmp_w=w-\alpha\frac{\partial }{\partial w}J(w,b), w=tmp_w, tmp_b= b-\alpha\frac{\partial }{\partial b}J(w,b), b=tmp_b

这样子写是错误的,因为w,b都是同时变化的,而不是一个一个变化的。 

这一节我们要注意梯度下降的算法,与其中的一些概念。

让我们看一下导数项:

在成本函数中,我们先把我们的函数简化为b=0只有w一个未知量。那么 \frac{\partial }{\partial w}J(w,b)在严格意义上叫做偏导数,但我们在这里统称为导数,我们举两个例子,观察一下他们是如何变化的。

在第一幅图中我们利用了 w=w-\alpha\frac{\partial }{\partial w}J(w,b)这个式子,我们发现导数对于这个函数在右边时是正数而乘上一个\alpha就相当于在w轴上乘上了一个值,所以在右侧w是在减小的,它在越靠近我们的最小值(也就是在收敛)。

第二个图中我们的初始位置是在函数的对称轴的左侧,首先在左侧我们的斜率是在负数,所以在\alpha\frac{\partial }{\partial w}J(w,b)是在减小的,所以在这里我们的w是在增大,很明显在这个作用下我们在无限的向我们的对称轴靠近,得到我们的最小值(收敛)。

让我们考虑一下学习率的大小对梯度下降的影响:

在这里有两个情况,一就是我们的学习率太小,当我们的学习率(\alpha)太小时,我们的下降速度就非常慢。二就是我们的学习率太大,当我们的学习率太大时,我们的下降速度就会非常的快,当我们快要遇到我们的最小值时,我们就可能会每次都错过最小值,所以学习率的大小也非常的重要。 

当我们到达了局部的最小值,我们在这个点的导数是等于0,所以对于 w=w-\alpha\frac{\partial }{\partial w}J(w,b)来说w=w-0,所以它的值并没有发生变化,它就会被一直固定在这个最低值上。这就是为什么梯度下降可以达到局部最小值,即学习率\alpha固定。

我们举的这个例子,当我们对学习率进行固定,我们的成本函数实际上是在不断的减小,步数是会自动变的越来越小,从而走到我们的最小值。 所以我们的\alpha的大小确定是非常的重要。

接下来,我们来考虑整一个过程,从线性回归模型,到我们的成本函数,再到我们的梯度下降算法。如一下图所示: 

导数根据我们的偏导可以直接带入。如果对这个有疑问我可以给出简单的过程比如我们第一个对于w的偏导:

\frac{\partial }{\partial w}J(w,b)=\frac{\partial }{\partial w}\frac{1}{2m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})^{2} \frac{\partial }{\partial w}\frac{1}{2m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})^{2} =\frac{\partial }{\partial w}\frac{1}{2m}\sum_{i=1}^{m}(wx+b-y^{(i)})^{2}

在这里我们的变量应该是我们的w,这里的x就是x^{(i)}

(wx+b-y^{(i)})^{2}=w^{2}x^{2}+2((b-y^{(i)})wx)+(b-y^{(i)})^{2}

我们把他们一一偏导就会得到

2x^{2}w+2((b-y^{(i)})x)

带入进去就变成了

\frac{1}{m}\sum_{i=1}^{m}(wx+b-y^{(i)})x也就是\frac{1}{m}\sum_{i=1}^{m}(f_{w,b}(x^{(i)})-y^{(i)})x^{}(i)

同样的道理我们可以得到第二个式子的导数。 

然后我们的梯度下降算法就可以把这两个导数简化式代入,再通过重复以上的操作,我们就可以不断的减小我们的成本函数,从而得到我们的最小值。注意我们通过算我们的 梯度下降得到的最小值只能被称为是局部最小值,而不是全局最小值,但在线性回归模型的函数中,不会也永远不会出现有多个局部最小值的情况。因为我们在线性回归函数中是凸函数,是一个碗装,所以一般只有一个最小值。 所以在这个函数中我们只要有合适的学习率我们就可以得到我们想要得到的最小值。

正如图所示,我们的函数在不断的在梯度下降的过程中,我们就有可能得到了我们的成本函数最小值,也就是我们所要得到的线性回归函数。 

在这里我们的梯度函数准确的来说批量梯度下降,也就是(batch gradient descent),它需要对所有的从1到m的值进行一个相加,而事实上很多其他的模型在用到我们的梯度下降,可能用到的是小范围的子集,但在我们的线性回归中,我们用到的是批量梯度下降的。 

完结:线性回归模型 

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值