学习笔记:机器学习--1.2梯度下降法

本文详细介绍了机器学习中的梯度下降法,包括其基本原理、数学表达式和学习速率的影响。通过理解导数和偏导数,解释了如何使用梯度下降法优化成本函数,找到最佳参数。此外,还探讨了单变量和多变量情况下梯度下降的实现,以及学习速率的选择对收敛速度和结果稳定性的影响。
摘要由CSDN通过智能技术生成

这是机器学习的第一章第二节:Gradient descent(梯度下降法)

在学习本节过程中,将会涉及到高等数学中导数与偏导数的相关知识

通过这一节的学习将会了解到以下一个公式的含义:

公式1.2.1:\(\displaystyle \theta_j := \theta_j - \alpha\frac{\partial }{\partial \theta_j}J(\theta_0,\theta_1)\)    \((for\:j = 1\:and\:j = 0)\)

通过第一节(Cost function)的学习,我们知道了函数1.1.1(Hypothesis)并且知道了可以通过函数1.1.2(Cost function)计算函数1.1.1适应training set的性能(函数1.1.2计算结果越接近\(0\)性能越好)。那么接下来这一节中我们就来学习如何计算函数1.1.1中的参数\(\theta_0\)和\(\theta_1\),这就引出了本节的标题,Gradient descent,也就是公式1.2.1的内容。

下面给出一个立体图,我们用它来理解梯度下降法(Gradient descent)的原理:(实际计算图像与它不同)

在这个三维坐标系统中,其\(x\)轴和\(y\)轴变成了\(\theta_0\)和\(\theta_1\),即Hypothesis中的两个参数(parameter);\(z\)轴则表示\(J(\theta_0,\theta_1)\),即Cost function的值。我们的目标是不断调整\(\theta_0\)和\(\theta_1\)的值,使得\(J(\theta_0,\theta_1)\)的值达到最小值(或极小值),即如图红色箭头所指位置是我们想要得到的最终结果。

为了到达红色箭头位置,我们采用Gradient descent方法:

1、即对于图像上的一点\((\theta_0,\theta_1,J(\theta_0,\theta_1))\),我们对函数\(J(\theta_0,\theta_1)\)进行求导操作(derivative)(此时就能理解函数1.1.2中的\(\frac{1}{2}\)能够简化计算),将得到在这一点处对图像的切线,切线的斜率是导数值,并且切线的方向将能够告诉我们\(\theta_0\)和\(\theta_1\)前进的方向;

2、根据这一数据,我们可以将\(\theta_0\)和\(\theta_1\)按照指定方向变化一小段距离,这一小段距离由\(\alpha \times J'(\theta_0,\theta_1)\)求得,其中\(\alpha\)成为学习速率(learning rate),后一部分即函数\(J(\theta_0,\theta_1)\)的导数。将产生新的点坐标作为下一次进行变换的来源;

3、重复步骤1、2,如上图黑色线段所示,直至到达最低点。

为了进一步的便于大家理解,我们仍将这一过程简化至\(\theta_0=0\)的情况,此时Cost function只有一个自变量\(\theta_1\),变回二维图像,如下所示:

此时我们计算该点的导数,则可将其带入公式1.2.1进行计算。进一步如下图所示:

首先我们看到,导函数部分,由原来的\(\frac{\partial }{\partial \theta_j}J(\theta_0,\theta_1)\)变为\(\frac{d}{d \theta_j}J(\theta_1)\),容易知道这是因为自变量少了一个\(\theta_0\)的关系,同时符号偏导数\(\partial\)变为导数\(d\)也是因为同一个道理(高等数学相关知识)。我们还会发现,如果将点选在函数最低点右侧,导数结果将为正,此时希望\(\theta_1\)左移即变小,若将点选在函数最低点左侧,导数结果将为负,此时希望\(\theta_1\)右移即变大。因此\(\alpha \times J'(\theta_0,\theta_1)\)前的负号刚好能够满足要求。

接下来讨论Learning rate值\(\alpha\),如下图所示:

我们知道,如果\(\alpha\)的值较小,那么每一次的变化也会很小,就会造成变化很慢,需要大量循环才能得到最优解;如果\(\alpha\)的值较大,那么就有可能存在经过一次变化后越过最小值,且比原函数值还大的情况,此时若循环下去,最终结果将会发散,函数值将无限变大,从而出错。

考虑到每一次求导的结果都是对当前新点的计算,即结果是变化的,因此我们按下图进行分析:

可以发现,在正确选取\(\alpha\)的情况下,新点的斜率将会逐渐趋向于\(0\),也就是\(\theta_1\)的变化将会越来越小,因此我们不难推断,在经过有限次循环后,\(\theta_1\)将能够收敛,并得到函数最小值。

接下来我们回到两个自变量的情况,在理解了其原理后,我们再看公式1.2.1:\(\theta_j := \theta_j - \alpha\frac{\partial }{\partial \theta_j}J(\theta_0,\theta_1)\),首先解释一下"\(:=\)"符号,该符号表示"定义",如果公式1.2.1用"\(=\)",那么这在数学上显然是一个错误的式子(或者\(\alpha\frac{\partial }{\partial \theta_j}J(\theta_0,\theta_1) = 0\),但此时公式将不再有意义),因此,它只是一个表示定义的符号。然后我们看到偏导数部分,符号为"\(\partial\)",由于在有两个自变量的情况下,我们将其分为\(\theta_0\)方向和\(\theta_1\)方向,偏导的作用则是将原函数分为两个方向分别求导数。

现在我们对公式1.2.1的偏导数部分进行计算,此时带入函数1.1.2即Cost function,得到如下结果:

\(\displaystyle \frac{\partial }{\partial \theta_j}J(\theta_0,\theta_1) = \frac{\partial }{\partial \theta_j} \cdot \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x_i)-y_i)^2 = \frac{\partial }{\partial \theta_j} \cdot \frac{1}{2m}\sum_{i=1}^{m}(\theta_0+\theta_1\cdot x_i-y_i)^2\)

分别讨论\(j = 0\)即对\(\theta_0\)求偏导和\(j = 1\)即对\(\theta_1\)求偏导的情况,得到如下结果:

\(j = 0 : \frac{\partial }{\partial \theta_0}J(\theta_0,\theta_1) = \frac{1}{m}\sum_{i=1}^{m}(h_\theta(x_i)-y_i)\)

\(j = 1 : \frac{\partial }{\partial \theta_1}J(\theta_0,\theta_1) = \frac{1}{m}\sum_{i=1}^{m}(h_\theta(x_i)-y_i)\cdot x_i\)

得到这个结果的作用,是便于我们进行之后的计算。值得注意的是,我们在简化示例(\(\theta_0 = 0\))的情况下,每次变换的只有\(\theta_1\),而在上述讨论中,每次需要变化两个parameter,即\(\theta_0\)和\(\theta_1\)。这时我们需要在每一步操作中同时更新两个parameter然后进行一次循环,如下图所示:

即我们在一次变化parameter \(\theta_0,\theta_1\)的时候,定义式右半部分的\(\theta_0,\theta_1\)均为上一次的值,而不能用这一次生成的\(\theta_0\)来计算新的\(\theta_1\),也不能用这一次生成的\(\theta_1\)来计算新的\(\theta_0\)。

end~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值