P2-5~P2-7 梯度下降:学习率、导数项、线性回归算法

310 阅读4分钟

P2-5 梯度下降

梯度下降法是一种常用的用来寻找代价函数J最小值的算法,也常用于其他回归函数,也广泛应用于深度学习。

问题描述: 我们有一个代价函数J(q0,q1),想要得到使代价函数最小的q0、q1。

算法开始: 1、以一组q0,q1最为起点,它们到底是什么不重要。通常会选择(0,0) 2、算法会持续的修改(q0,q1)数值,计算J,直到得到J的最小值,或者局部最小值。

image.png

这个过程可以把3D图想象成一座山,有2个山峰,我们站在其中一个山峰上(起点)。我们想要尽快到达最低点。 第一步:我们环绕四周,找一个最佳的下山方向,走一步,到达一个新点。 重复第一步,每次前进一小步,直至收敛到局部最低点。 image.png

起点稍作偏移,按照同样的步骤和策略,可能到达另外一个局部最低点,这就是梯度下降算法的特点。 image.png

梯度下降公式

image.png α用来表示,梯度下降时,每一步迈出多大的步子。 α后面是一个导数项,之后会推导。(这个公式就是微积分中的导数和导数项)

对这个梯度下降公式,要同时更新q0和q1的值。也就是,要先分别计算出temp0和temp1,再更新q0和q1。

P2-6 梯度下降公式中,α和导数项在更新过程中的意义

导数项

导数项就是指曲线中,某一点切线的斜率,如下图的红线斜率 image.png 按上图第一个q1点,其斜率是一个正数(切线函数的y随x增大而增大),那么得到的导数项就是一个整数。梯度下降公式Qj迭代时,qj-α*正数,迭代所得的新q1比旧值小,往左边移动了,次数新q1更接近J(QJ)最小值。 按上图第二个q2点,其斜率是负数,迭代后的q1右移,也更接近J(QJ)最小值。 以上两次迭代符合预期。

学习率α

学习率α代表每次迈出的步长。 当α太小时,从起点到最优点要花费更多的步数。 当α太大时,可能会导致无法收敛甚至发散。如第二个图,第二个点斜率比第一个点大,迈出的实际不长比第一个点大,梯度下降逐渐发散。 image.png 如果q1起点已经处在一个局部最优点,那么下一步会怎么样? 局部最优点的切线斜率=0,是一条水平横线,即导数像=0,更新后的q1与旧q1值相同,位置没有变化。算法返回最优解。

随着q1越接近最优质,每次迭代后的q1点的斜率会越来越小,意味着导数项自动变得越来越小,每次迈出的步长也越来越小,直到最终到达最优值。 image.png 梯度下降将自动采取较小的幅度,进行计算。这就是梯度下降的运行方式。 所以实际上,当初始α不会导致发散以后,就没有必要再另外减小α。

可以用梯度下降法来优化任何代价函数J,而不只是线性回归中的代价函数J。

接下来,利用线性回归中的代价函数J,结合梯度下降法,以及平方代价函数,将得出我们的第一个机器学习算法,即线性回归算法。

P2-7 线性回归的梯度下降

将梯度下降算法应用到最小化平方差代价函数 image.png

要应用好算法,关键步骤是写好梯度下降算法中的导数项, 将线性假设、平方差代价函数代入导数项,可以推导出: image.png 即梯度下降算法可以表示为: image.png 注意:q0 q1要同时更新。

线性回归代价函数的3d图是一个凸函数,只有一个全局最优解。在这种情况下,梯度下降算法最终会收敛至全局最优解。 image.png 有些局部函数存在局部最优解,梯度下降算法就很容易陷入局部最优解。如下图: image.png

在房价案例中,一开始选取(900,-0.1)为起点,逐渐下降,最后收敛到最优解。 image.png 这种梯度下降算法也被称作batch梯度下降算法,每一步梯度下降时,都遍历了整个训练集的样本。 也有其他的梯度下降算法,在梯度下降时只关注局部的样本,而非全集样本,之后会学到。

代价函数J的最小值,在线性代数中也有其他更快的解法,而不用一步步梯度下降。例如矩阵。之后会继续学习。