比如上面这个图,可以感觉到是存在这样一条直线L:
因为上面的例子是二维的,我们可以去设这条直线:\(f(x)=kx\),简单起见,我们暂时先不考虑b
有了方程后,我们就可以表示(2)中的内容了:
须知:这里的\(\frac{1}{2n}\)不是必须的
由①式可以知晓,CostFunction
是k的二次函数,通过给定不同的k,CostFunction
会得到不同的取值,如下图:
如果你要考虑b的话,可以得到下图,如同一张弯曲的纸,或者峡谷,存在最低点
易知,沿着梯度(导数)的方向,函数值增加最快,换个角度,沿着梯度(导数)的反方向,函数值降低最快。
我们可以令CostFunction
对k求导,得:
在更新k时,我们可以:
\[k=k-②=k-\frac{1}{n}\sum_{i=1}^{n}x_{i}(kx_{i}-y_{i})③ \]通过③可知,每次k的变化的步长是②,但实际操作而言,可能会存在一定的问题,假设当k=k0时函数值取得局部极小值。若k每次变化的步长很大,可能会导致k无法达到k0的位置,可能就是在k0这个点左右来回震荡,无法收敛;或者经过数次更新后会离k0越来越远。
所以,为了避免这种情况,我们会增加一个参数\(\alpha\)对③进行修改:\(k=k-\alpha\frac{1}{n}\sum_{i=1}^{n}x_{i}(kx_{i}-y_{i})\)
这个\(\alpha\),我们称之为学习率Learning Rate
须知,上述对k0的描述,使用的是“局部极小值”,而非“全局极小值”。
梯度下降法得到的是“局部最小值”而非“全局最小值”
对于某个山路十八弯的函数,在进行梯度下降时,很容易陷入局部最小值,而无法达到全局极小值
对于凸函数而言(比如上面的开口向上的抛物线),局部极小,即为全局极小
从上图可以看到