Machine Learning 机器学习课堂笔记5(梯度下降)

Gradient Descent 梯度下降

介绍梯度下降算法,这种算法可以将代价函数J最小化。梯度下降时很常用的算法,它不仅被用在线性回归上,它实际上被广泛的应用于机器学习领域中的众多领域,解决其他线性回归问题。也可以使用梯度下降法最小化其他函数,而不仅仅是只用在代价函数J。

问题概述:

有一个函数J(θ0,θ1),也许这是一个线性回归的代价函数,也许是一些其他函数,要使其最小化,需要一个算法来最小化函数J(θ0,θ1),事实证明梯度下降算法可应用于多种多样的函数求解,如果有一个函数J(θ0,θ1,...,θn),希望可以通过最小化θ0到θn来最小化此代价函数J(θ0,θ1,...,θn),用n个θ是为了证明梯度下降算法可以解决更一般的问题,为了简洁,简化符号,接下来,只是用三个参数,接下来就是关于梯度下降的构想。

我们先开始对θ0和θ1进行一些初步猜测,它们到底是什么其实并不重要,通常的选择是将θ0设为0,也将θ1设为0,将它们都初始化为0,在梯度下降算法中就是不停地一点点地改变θ0和θ1,试图通过这种改变使得J(θ0,θ1)变小,直到我们找到J的最小值,或许是局部最小值。


试图让这个函数值最小,注意坐标轴θ0和θ1在水平轴上,而函数J在垂直坐标轴上,图形表面高度则是J的值,希望最小化这个函数,所以我们从θ0和θ1的某个值出发,当对θ0和θ1赋以某个初值,也就是对应于从这个函数表面上的某个起始点出发,所以不管θ0和θ1的取值是多少,将它们初始化为0,当然也可以初始化为其他值。可以将图像想象成山,想象自己站在山的一点上,在梯度算法中旋转360度,看看自己的周围,并问自己要在某一方向上,用小碎步尽快下山,这些小碎步需要朝什么方向,确定方向后,往那个方向走了一步,现在自己在山上的新起点上,再次看看周围,然后再一次想想该从什么发那个想下山,然后按照自己的判断又确定方向,往那个方向走了一步,然后重复上面的步骤,从这个新的点,并决定从什么方向将会最快下山,然后又迈出一步一步。并依此类推,直到接近山底,及局部最低点的位置。


这种下降有一个有趣的优点,我们再次选择一个点,刚才的点右边一些的位置,对梯度下降进行初始化后,开始使用梯度下降,如果重复上述步骤,停留在该点并环顾四周,往下降最快的方向迈出一小步,然后环顾四周,又迈出一步,然后如此往复。如果从右边不远点开始,梯度下降法将会带你来到右边的第二个局部最优处,如果从刚才的第一个点出发,会到达局部最优解,但是如果起始点偏移了一些,起始点的位置略有不同,你会得到非常不同的局部最优解,这就是梯度下降算法的一个特点。

梯度下降算法的定义,将反复做这些,直到收殓,我们要更新参数θj,方法是用参数θj减去ɑ乘以这一部分(如图),这个公式有很多细节问题,:=表示赋值,这是一个赋值运算符,如a:=b,是将b的值赋值给a,a:=a+1的意思就是给a加1,如果使用等号=并且写出a=b,那么这是一个判断为真的声明,就是在断言a的值是等于b的值的。不可以写a=a+1这个本身就是错误的,a与a+1永远不会是同一个值;这里的ɑ是一个数字,被称为学习速率,在梯度下降算法中,它控制了下山时会迈出多大的步子,因此如果ɑ值很大,那么相应的梯度下降过程中,会试图用大步子下山,如果ɑ值很小,会试图用很小的小碎步下山,公式的最后一部分(图中蓝色圈起来的部分),这是一个微分项,不做任何解释,不过后面将推导这个微分项,并会告诉到底要如何计算。

在梯度下降算法中,还有一个更微妙的问题,在梯度下降中,我们要更新θ0和θ1,当j=0和j=1时,会产生更新,所以将更新J、 θ0和θ1,实现梯度下降算法的微妙之处是在这个表达式中,如果更新这个等式需要同时更新θ0和θ1,意思就是在这个等式中,我们要这样更新θ0:=θ0-一些东西,并更新θ1:=θ1-一些东西。实现方法是。你应该计算公式右边的部分通过那一部分计算出θ0和θ1的值,然后同时更新θ0和θ1,进一步说就是在梯度下降算法中,这是正确实现同时更新的方法,设temp1等于这些(图中下方的部分),设temp2等于那些(图中下方的部分),所以首先计算出公式右边这一部分,然后将计算出的结果一起存入temp0和temp1中,然后同时更新θ0和θ1,这才是正确的实现方法,相反的,右边是不正确的实现方法,因为它没有做到同步更新,在右边的实现方法中,我们计算temp0然后更新θ0,然后计算temp1,然后将temp1赋给θ1,在第二步的时候已经更新了θ0,接着使用θ0的新的值来计算微分项,所以由于已经在公式中使用了新的θ0的值,就会产生一个有左边不同的temp1的值,所以右边并不是正确地实现梯度下降的做法。同步更新是梯度下降中的一种常用方法,实际上同步更新是更自然的实现方法,当人们谈到梯度下降时,他们的意思就是同步更新,如果用非同步更新去实现算法,代码可能也会正确工作,但是右边的方法并不是人们所指的那个所指的那种梯度下降算法,而是具有不同性质的其他算法,由于各种原因,着其中会表现出微小的差别,而我们应该做的是在梯度下降中真实实现同步更新。

选择第二个答案。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值