以前咱们已经讲了代价函数了,这节咱们讲代价函数J最小化的梯度降低法。web
梯度降低是很经常使用的算法。它不只被用在线性回归上,还被普遍应用于机器学习的众多领域。算法
下面是问题概述。咱们有一个函数J(θ0,θ1),这也许是个线性回归的代价函数,也许是个须要最小化的其余函数。咱们须要用一个算法,来最小化函数J(θ0,θ1)。机器学习
实际上,梯度降低算法能够应用于更通常的函数,如J(θ0,θ1,θ2,......θn),你但愿能够在θ0到θn之上最小化此函数。可是为了简化,咱们这里只用θ0,θ1两个参数。函数
梯度降低算法的基本思想是:首先给定θ0和θ1初始值(其实给定多少都不重要),但一般都设θ0=0,θ1=0。而后,咱们不停地一点点地改变θ0和θ1,来使J(θ0,θ1)变小。直到咱们找到J的最小值或者局部最小值。学习
下面咱们经过图片来直观地看一下它是怎么工做的。spa
首先咱们先从θ0和θ1的某个值出发。想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度降低算法中,咱们要作的就是旋转360度,看看咱们的周围,并问本身要在某个方向上,用小碎步尽快下山。这些小碎步须要朝什么方向?若是咱们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,而后再一次想一想,我应该从什么方向迈着小碎步下山?而后你按照本身的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,而后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。咱们在刚刚出发点右边再出发一次,这时咱们获得另一个局部最低点的位置。orm
咱们就会发现,若是你的起始点偏移了一些,你会获得一个彻底不一样的局部最优解。这就是梯度降低算法的一个特色。blog
这是梯度降低算法的定义。图片
咱们要更新参数θj为θj减去α乘之后面的那一部分。咱们将会反复作这一步,直至收敛。ci
注意:1.咱们使用符号:=表示赋值。
2.α是一个被称为学习率的数字。α决定了当梯度降低时,咱们迈出的步子有多大。若是α很大的话,那么梯度降低就很迅速。若是α很小的话,那么梯度降低就很缓慢。
3.公式的最后一项是一个导数项。如今暂时先不讲这个。
在梯度降低算法中,还有一个更微妙的问题,梯度降低中,咱们要更新θ0和θ1 ,当j=0 和j=1时,会产生更新,因此你将更新J(θ0)和J(θ1)。实现梯度降低算法的微妙之处是,在这个表达式中,若是你要更新这个等式,你须要同时更新θ0和θ1,个人意思是在这个等式中,咱们要这样更新:
θ0更新为θ0减去某项,并将θ1更新为θ1减去某项 。
实现方法是:你应该计算公式右边的部分,经过那一部分计算出θ0和θ1的值,而后同时更新θ0和θ1。
进一步地说,咱们让temp0和temp1分别等于这两个式子。首先先计算公式右边的这一个部分,而后将值存入temp0和temp1中。这样,咱们就能够同时更新θ0和θ1了。以下图左侧。
而右侧的计算是错的,由于它并无作到同步更新。左右两边的区别就是,当咱们计算temp1的值的时候,左边是用的更新以前θ0的值,右边用的是更新以后θ0的值,从而致使最后的temp1的值是不同的。