资讯专栏INFORMATION COLUMN

吴恩达机器学习笔记-梯度下降

付伦 / 2971人阅读

摘要:采用非同步更新时代码也许可以正常运作,但并不是人们所指的梯度下降算法。因此,在梯度下降中真正实现同时更新,就是梯度下降算法的梗概。这里我们要注意,我们需要调整学习速率为一个合适的值,使得梯度下降算法能在合理的时间内收敛。

通过前面的文章我们现在已经有了假设函数$h_ heta(x)$并知道如何度量这个函数与数据的符合程度,即代价函数$J( heta_0, heta_1)$取得最小值。那么现在要做的,就是如何去预估这个假设函数的参数来使得我们的函数更加符合实际数据。
如下图是代价函数$J( heta_0, heta_1)$的图像,x轴为$ heta_0$,y轴为$ heta_1$,z轴为$J$。

我们知道,要取得代价函数最小值那就是这个函数图像的最底部的值。如图我们需要一步步的移动直到找到最底部的那个点。

要求的这个最小值,我们需要对代价函数求导,由于切线的斜率即是这个函数在该点的导数,可以提供每一步移动的方向。我们根据这个方向一步步的进行梯度下降,而每一步移动的大小这里用参数$alpha$表示,被称作学习速率(learning rate)。图中的星星之间的距离就是由参数$alpha$决定,方向则是$J( heta_0, heta_1)$的偏导数来决定。从不同的点起始,最终得到的重点可能也不一样,途中展示的就是两个不同的起点而导致不同的终点。

综上,梯度下降的算法就是不断的迭代直到收敛:

其中$j=0,1$,表示我们当前的特征索引号。(":="这个符号表示赋值,若写作"="表示一个判断为真的声明。)注意,在每一次迭代中,我们是同步更新参数$ heta_0, heta_1$,意思是,实现方法时,我们应该先计算公式右边的部分,通过计算得出$ heta_0, heta_1$的值,然后同步更新$ heta_0, heta_1$。举个例子,我假设:

$$ temp0 := heta_0-alphafrac{partial}{partial heta_0}J( heta_0, heta_1) $$

$$ temp1 := heta_1-alphafrac{partial}{partial heta_1}J( heta_0, heta_1) $$

然后计算出公式右边的部分,计算出$ heta_0, heta_1$的值,然后同时更新$ heta_0, heta_1$:

$$ heta_0 := temp0 $$

$$ heta_1 := temp1 $$

与此相反,下面就是错误的范例,这个错误的方法中我们计算temp0,然后更新θ0,再计算temp1,最后将temp1赋给θ1。这个将会造成在计算第三步,也就是temp1的时候,我们会将已经计算好的temp0带入到右边的公式里,这样计算的结果自然和上面的方法不同。

$$ temp0 := heta_0-alphafrac{partial}{partial heta_0}J( heta_0, heta_1) $$

$$ heta_0 := temp0 $$

$$ temp1 := heta_1-alphafrac{partial}{partial heta_1}J( heta_0, heta_1) $$

$$ heta_1 := temp1 $$

同步更新是梯度下降常用的一种算法,实际上也是更自然的实现方法,当人们谈到梯度下降的时候指的就是同步更新。采用非同步更新时代码也许可以正常运作,但并不是人们所指的梯度下降算法。因此,在梯度下降中真正实现同时更新,就是梯度下降算法的梗概。

同前面学习代价函数一样,我们先分析当只有一个参数时候的情况:
repeat until convergence{

$$ heta_1 := heta_1 - alphafrac{d}{d heta_1}J( heta_1) $$

}

先画一个粗略的$J( heta_1)$的图像:

很显然,当斜率为负时,$ heta_1$的值在不断减小;当斜率为正时,$ heta_1$的值在不断增加。这里我们要注意,我们需要调整学习速率$alpha$为一个合适的值,使得梯度下降算法能在合理的时间内收敛。如果太小,那梯度下降的速度会非常慢,如果太大,梯度下降的时候可能直接越过了最小值导致无法收敛或者偏离出去了。

接下来我们再继续讨论在具体应用于线性回归时候的形式,我们可以将实际成本函数和实际假设函数替换为:

repeat until convergence{

$$ heta_0 := heta_0 -alphafrac{1}{m}sum_{i=1}^{m}(h_ heta(x_i)-y_i) $$

$$ heta_1 := heta_1 -alphafrac{1}{m}sum_{i=1}^{m}((h_ heta(x_i)-y_i)x_i) $$

}

其中,m是训练集的大小,$ heta_0$和$ heta_1$是同步更新的两常量,$x_i,y_i$是训练集中的数据。这里也顺便贴一下第二个等式是怎么计算来的:

因此,这是原始的代价函数的梯度下降算法,在每一步的梯度下降中都遍历了训练集的每一个样本,这个被称作批量梯度下降。注意,虽然梯度下降通常容易受到局部最小值的影响,但是我们在这里提出的线性回归的优化问题只有一个全局最优值,没有其他局部最优值,因此梯度下降在全局最小值时总是收敛(假定学习速率α不是太大)。

以上,为梯度下降的基础知识,后续还会有相关的问题讨论,本文笔记主要关联吴恩达机器学习第一周课程中的Parameter Learning部分。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18439.html

相关文章

  • 恩达机器学习笔记-Logistic回归模型

    摘要:回归函数在逻辑回归模型中我们不能再像之前的线性回归一样使用相同的代价函数,否则会使得输出的结果图像呈现波浪状,也就是说不再是个凸函数。 回归函数 在逻辑回归模型中我们不能再像之前的线性回归一样使用相同的代价函数,否则会使得输出的结果图像呈现波浪状,也就是说不再是个凸函数。代价函数的表达式之前有表示过,这里我们把1/2放到求和里面来。 $$ J( heta) = frac{1}{m}su...

    doodlewind 评论0 收藏0
  • 恩达机器学习笔记-正规方程

    摘要:以上,就是关于正规方程的一些简单介绍,针对吴恩达机器学习的正规方程那一章节。 在前面的学习中,我们一直使用的线性回归算法是梯度下降法,即为了最小化代价函数$J( heta)$,我们需要通过迭代很多步来收敛到全局最小值。那么现在我们来学习一种新的解法来求解。即正规方程。正规方程提供了一种求$ heta$的解析解法,相比较迭代算法,我们可以直接一次性的求解出$ heta$的最优值。 我们首...

    fasss 评论0 收藏0
  • 恩达机器学习笔记-多元线性回归

    摘要:之前的文章中已经讲述了简单的一元线性回归的基础知识,现在我们来继续讨论多元线性回归。本文针对吴恩达机器学习第二周课程多元线性回归部分。与选择特征相关的一个概念,被称作多项式回归。 之前的文章中已经讲述了简单的一元线性回归的基础知识,现在我们来继续讨论多元线性回归。本文针对吴恩达机器学习第二周课程多元线性回归部分。 假设函数 所谓多元线性回归正如其名字一样,就是说这里的变量是多个的,下面...

    songze 评论0 收藏0
  • 《DeepLearning.ai 深度学习笔记》发布,黄海广博士整理

    摘要:在这堂课中,学生将可以学习到深度学习的基础,学会构建神经网络,包括和等。课程中也会有很多实操项目,帮助学生更好地应用自己学到的深度学习技术,解决真实世界问题。 深度学习入门首推课程就是吴恩达的深度学习专项课程系列的 5 门课。该专项课程最大的特色就是内容全面、通俗易懂并配备了丰富的实战项目。今天,给大家推荐一份关于该专项课程的核心笔记!这份笔记只能用两个字形容:全面! showImg(...

    wenhai.he 评论0 收藏0
  • 恩达机器学习笔记-过拟合

    摘要:线性回归的正则化对于线性回归,我们在之前的内容中有说过两种算法,一种是基于梯度下降,一种是基于正规方程。以上,就是吴恩达机器学习第三周部分的课程笔记。 概念 假设我们有一组数据集如下图所示: showImg(https://segmentfault.com/img/remote/1460000016306911); 左边的图中,我们假设$y = heta_0 + heta_1x$,...

    nicercode 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<