编程语言
首页 > 编程语言> > 梯段下降算法

梯段下降算法

作者:互联网

1 线性回归

1.1 引子

引子-示例

比如上面这个图,可以感觉到是存在这样一条直线L:

因为上面的例子是二维的,我们可以去设这条直线:\(f(x)=kx\),简单起见,我们暂时先不考虑b
有了方程后,我们就可以表示(2)中的内容了:

\[CostFunction =\frac{1}{2n}\sum_{i=1}^{n}\left ( f(x_{i})-y_{i}\right )^{2}=\frac{1}{2n}\sum_{i=1}^{n}\left ( kx_{i}-y_{i}\right )^{2}① \]

须知:这里的\(\frac{1}{2n}\)不是必须的

由①式可以知晓,CostFunction是k的二次函数,通过给定不同的k,CostFunction会得到不同的取值,如下图:
CostFunctionValue-k

如果你要考虑b的话,可以得到下图,如同一张弯曲的纸,或者峡谷,存在最低点

image

1.2 梯度下降

易知,沿着梯度(导数)的方向,函数值增加最快,换个角度,沿着梯度(导数)的反方向,函数值降低最快。
我们可以令CostFunction对k求导,得:

\[{CostFunction}'_{k}=\frac{1}{2n}\sum_{i=1}^{n}2x_{i}(kx_{i}-y_{i})=\frac{1}{n}\sum_{i=1}^{n}x_{i}(kx_{i}-y_{i})② \]

在更新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的描述,使用的是“局部极小值”,而非“全局极小值”。
梯度下降法得到的是“局部最小值”而非“全局最小值”
对于某个山路十八弯的函数,在进行梯度下降时,很容易陷入局部最小值,而无法达到全局极小值
对于凸函数而言(比如上面的开口向上的抛物线),局部极小,即为全局极小

image

从上图可以看到

2 未完待续

标签:kx,frac,sum,下降,算法,lr,梯段,极小值,CostFunction
来源: https://www.cnblogs.com/silverbeats/p/15477927.html