导语

    在上一节中,我们求解了OLS的解析式,但是对于样本数量较多的情况下,矩阵的求解过程计算量非常大,本节讨论的是线性回归中的梯度下降法。

梯度下降法

x(0),通过不断迭代,来更新x,使目标函数(线性回归中就是我们的损失函数)取得极小值,直到收敛。下面是一张梯度下降的示意图,对此,我们可以这样理解,当你站在一座山上要下山,那么你环顾四周,寻找当前能下的最快的方向,一步踩下去……然后不断的这样,直到你站在了山下。

梯度提升回归树 回归 梯度下降_线性回归


    梯度下降的原理就是这样,那么问题来了,我站在山上下去的方向多了,我选哪一个呢?OK,回想另外一个问题,对于v−t(速度时间曲线)图像来说,它的某一点切线斜率大小代表着当前时间的瞬时加速度,如果按照当前切线斜率方向移动,变化应该是最快的。所以,这里引入梯度的概念,设函数z=f(x,y)在平面区域D内具有一阶连续偏导数,则对于每一个点P(x,y)∈D,向量

(∂f∂x,∂f∂y)


为函数

z=f(x,y)在点p的梯度,记做 gradf(x,y)。


    ok,梯度定义出来以后,我们就可以搜索了,定义式如下:



x(k+1)←x(k)+λkpk


其中

λk是学习率,即每次下降的幅度,而 pk是下降方向,通常情况下我们选择的是负梯度方向。

线性回归的梯度下降

    线性回归的损失函数为:


J(θ)=12∑i=1m(θT∗x(i)−y(i))2


我们最终要求的是参数

θ,而 x(i)和 y(i)已知(样本数据),因此对 θ求导求出梯度方向。



∂∂θjJ(θ)=2∗12∗∑i=1m(θT∗x(i)−y(i))∗∂∂θj(∑θkx(i)k−y(i))=∑i=1m(θT∗x(i)−y(i))∗x(i)j


上述的表达式就是线性回归的梯度方向,由于使用了

∑,因此每次更新参数 θ使用了全部样本,此种方式也被称为

批处理梯度下降算法,更新公式为

θj:=θj+λ∗∑i=0m(θT∗x(i)−y(i))∗x(i)j


    由于批处理梯度下降算法使用了所有算法,当迭代次数较多时,计算量依旧很大,因此在实践中多采用

随机梯度下降算法,即每次只用一个样本数据来更新参数

θ,这样可以大幅降低计算量,但是这种方式的效果可能不如批处理梯度下降算法,批处理梯度下降能够得到

全局最优解,但是随机梯度处理可能在某些样本点使参数

θ剧烈变化,因此对于学习率 λ,在实践中其值经常是动态的,此话题下次讨论。


    由于最近有些事情耽误,因此本节先讨论到这里,在逻辑回归之后,我将以具体代码示例来阐述我们做过的数学推导,曾几何时我只注重工程上的东西,但是后来发现不知道原理自己永远只能是一个coder,永远在迷雾中前行,加油吧……