【MindSpore:跟着小Mi一起机器学习】单变量线性回归(二)
小Mi学习,向上积极!在上一篇机器学习中,小Mi已经带大家认识了单变量线性回归的数学模型,以及对应代价函数的图形解释,小Mi也提及过,我们真正需要的是一种有效的算法,能够自动地找出这些使代价函数J取最小值的参数,来,因此它来了它来了!今天小Mi在此基础上,继续带大家一起学习梯度下降算法。
3梯度下降
梯度下降法是一个用来求函数最小值的算法,同理其他函数最小化问题也可以用此解决,因此适用于一般所有函数。梯度下降的原理就是:开始时我们随机选择一个参数的组合,计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合,我们持续这么做直到达到一个局部最小值,因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值,选择不同的初始参数组合,可能会找到不同的局部最小值;言简意赅点儿:梯度下降法就是给定,初始值,通常都为0或其他值;然后不停地一点点改变,来使得变小,直到我们找到J的最小值或局部最小值。
3.1 背后思想
假设的函数图形如上图所示,不管,取值为多少,假设一个情景,想象你正站立在某个公园的其中一座红色山上(起点为绿色爱心处),在梯度下降算法中,我们要做的就是旋转360度,看看周围,并决定从什么方向将会最快下山,然后迈进了一小步;接着到达另一点,你再看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,并依次类推,直到你接近局部最低点的位置。
而如果假设初始值在另一点,又会得到上图中另一个完全不同的局部最优解。
背后的数学原理,批量梯度下降算法的公式为:
在梯度下降算法中,还有一个更细节的问题,梯度下降中,我们要更新,当j=0,j=1时,会产生更新,所以你将更新和。实现梯度下降算法的微妙之处是,在这个表达式中,计算上述公式右边的部分,通过那一部分计算出的值,然后同时更新也就是:
并更新(赋值语句:a:=b,设定不管a的初始值是多少,都将b的值赋值给a;真假判断语句:a=b,表示做一个声明,断言a和b的值相同) 。
其中是学习率,它决定了我们沿着能让代价函数下降程度最大的方向上迈出的步子有多大。如果比较大,梯度下降就很迅速,就会大步子下山;如果比较小,就会迈着小碎步下山。在批量梯度下降过程中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。
3.2 梯度下降的直观理解
而对于求导这部分我们可以结合图形来看,取这个红色爱心点的切线,就是这样一条红色的直线,刚好与函数相切于这一点,这条直线的斜率正好是这个三角形的高度除以水平长度,现在,这条有一个正斜率,也就是说它有正导数,同时,梯度下降法的更新规则表示为:
如果太小了,即我的学习速率小,结果就是只能这样一点点地慢慢挪动,去努力接近最低点,这样就需要很多步才能到达全局最低点;如果太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远。所以,如果太大,它会导致无法收敛,甚至发散。
小Mi带大家再来看个例子,上图是代价函数。我想找到它的最小值,首先初始化我的梯度下降法,在图像右侧红色点开始初始化,如果我更新一步梯度下降,也许它会带我到绿色的点,可以发现这个点的切线是相当陡的;然后沿着这个绿色的点,如果我再更新一步,你会发现我的切线没有那么陡了。所以,每梯度下降一步后,新的导数会变小一点点,最终导数项是越来越小,接近于零的,更新的幅度也会更小。因此,随着梯度下降法的运行,移动的幅度会自动变得越来越小,直到最终移动幅度非常小,这时我们就可以发现,已经收敛到局部极小值。
小Mi还有一个问题,如果我们预先把放在一个局部的最低点,你认为下一步梯度下降会怎么样工作?假设将初始化在局部最低点,那么该点的导数为零。这就意味着你已经在局部最优点,它能使得不再改变,也就是新的等于原来的。因此,如果你的参数已经处于局部最低点,那么梯度下降法更新其实什么都没做,它不会改变参数的值。这也解释了为什么即使学习速率保持不变时,梯度下降也可以收敛到局部最低点。这就是梯度下降算法,你可以用它来最小化任何代价函数J,不只是线性回归中的代价函数J。
3.3 梯度下降法的线性回归算法
接着,我们要将梯度下降和代价函数结合,将其应用于具体的拟合直线的线性回归算法里。梯度下降算法和线性回归算法比较如图:
对之前的线性回归问题运用梯度下降法,关键在于求出代价函数的导数项,即:
则算法可以改成:
不断更新,直至收敛。
通过图像我们可以发现线性回归的代价函数总是一个凸函数。这个函数没有局部最优解,只有一个全局最优解,不断改变,直至到了全局最小值,全局最小对应的假设曲线能很好地拟合数据,这就是梯度下降。
这样的算法,有时也称为批量梯度下降。梯度下降法,指的是在梯度下降的每一步中,我们都用到了所有的训练样本,在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都要计算这样一个东西,这个项需要对所有m个训练样本求和。因此,批量梯度下降法这个名字说明了我们需要考虑所有这一“批”训练样本,而事实上,有时也有其他类型的梯度下降法,不是这种“批量”型的,不考虑整个的训练集,而是每次只关注训练集中年的一些小子集。在后面的学习中,小Mi也会陆续给大家介绍~
当然啦,可能你会知道还有一种计算代价函数J最小值的数值解法,不需要梯度下降这种迭代算法。它可以在不需要多步梯度下降的情况下,也能解出代价函数J的最小值,这是另一种称为正规方程的方法,同样,在后面的课程中,小Mi也会带领大家一起学习啦。不过实际上在数据量较大的情况下,梯度下降法比正规方程更适用一些。
今天小Mi带着大家一起学习了梯度下降法,以及线性回归算法,而代价函数J最小化的梯度下降法不仅仅用在线性回归上,还被用在机器学习的众多领域来最小化其他函数。所以,在这里小Mi先祝贺大家成功地学会第一个机器学习算法(撒花撒花~),我们下期再见~
【跟着小Mi一起机器学习吧!】单变量线性回归(一):https://bbs.huaweicloud.com/forum/thread-131009-1-1.html