已知了代价函数:
我们需要一个算法来最小化 ,而梯度下降算法可以解决这个问题。
梯度下降算法不仅可以应用于多种函数的求解,不仅限于线性回归问题。
梯度下降算法可以解决更一般的问题,例如 求解该代价函数的最小值。
算法流程
回到线性回归上来,还是使用 来说明。
- 将
设置一个初始值,可以是任意值,但通常会设置成0;
- 不断的改变
的值,让
的值一直减小,直到找到
的最小值或局部最小值。
工作流程
这是一个随 变化而导致
变化的图表。我们希望最小化这个函数,根据流程,先初始化一个
的值。
把这个图像想像成一座上,初始化的试过就是把你放在山的某处,现在你要下到山的最下面,也就是山谷底。
现在把自己旋转360度,寻找一个最快下山的方向,然后迈出一步,接着重复上次的过程继续找一个最快下山的方向迈出一步,重复上面的步骤,迈出一步又一步,直到一个局部最低点的位置。
下降的轨迹
当初始位置向右偏移一点,下降的轨迹就不一样了。
这样我们得到了两个局部最低点,当初始位置不同时会得到不同的局部最优解,这是梯度下降算法的一个特点。
取得下降方向的方法就是取代价函数的导数(即一个函数的切线),切线的斜率就是那个点的导数。当斜率趋向于0时就说明代价函数的值在下降。而每一步的步长则是由学习率(learning rate) 来表示。
例如:上图中每个 “星” 之间的距离就是由参数 来确定,当
较大时,步长就较大,同样的,
较小时,步长就会变小;前进的方向则是由
出的偏导数来决定。根据不同的起点,可能会在不同的终点结束。
定义
梯度下降算法的定义是:
重复下面的步骤直到收敛
表示索引,此例中可取0, 1
注意:
当改变参数 时,需要注意的一点就是要同时改变这些参数,这对于获得正确的代价函数是非常重要的。
:
这样的一个步骤是正确的。
:
用一个例子来说明梯度下降算法:
有一个单变量线性回归的预测函数,同时将,这样预测函数就是:
这样梯度下降算法就是重复计算:
红线就代表的代价函数的导数,即在这一点的斜率,上图的点上我们可以知道 ,
代入式子中,我们可以得到在变小,向左靠拢。
当初始 在左边,它的斜率是负数,我们可以得到
在变大,向右靠拢。
当接近J函数的最底部时, 接近0。当到最理想的情况下,
,在这张情况下我们可以得到:
。即
不会再变化。
由上图可知,当学习率 过小时,我们需要经过很多步才能到达最低点,耗时会更长。而当
过大时,可能会越过最低点,导致无法收敛
总结一下:当越接近局部最小值的地方时,偏导数 就越小,在
不变的情况下,
下降的步子也就越来越小,当达到局部最优时,
就不变了,因此,我们不需要减小
的值。
应用到线性回归问题上
已知线性回归的预测函数:
将预测函数代入到代价函数中并应用数学求导,可得到:
当j=0时:
当j=1时:
在线性回归问题中,我们从一个假设的开始,重复应用这些梯度下降方程,之后我们的预测函数就会越来越精确。
转载自:
https://codeeper.com/2019/12/30/tech/machine_learning/linear_regression_gradient_descent.html