梯度下降法又称最速下降法,是求解无约束最优化问题的一种最常用的方法,在对损失函数最小化时经常使用。梯度下降法是一种迭代算法。选取适当的初值x(0),不断迭代,更新x的值,进行目标函数的极小化,直到收敛。由于负梯度方向时使函数值下降最快的方向,在迭代的每一步,以负梯度方向更新x的值,从而达到减少函数值的目的。提到梯度下降法,就不得不提到方向导数与梯度了。

1.方向导数

设函数z=f(x,y)在点p(x,y)的某一邻域U(P)内有定义,自点P引射线l。设x轴正向到射线l的转角为φ,并设P'(x+Δx, y+Δy)为l上的另一个点且P'也在邻域U(P)内。

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_梯度下降法

考虑若

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_迭代_02

,若此极限存在,则称此极限为函数f(x,y)在点P沿方向l的方向导数,记作利用坐标下降法求解Lasso的python代码 坐标梯度下降法_迭代_03,即

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_迭代_04

2.方向导数与偏导数的关系

定理:如果函数z=f(x,y)在点p(x,y)是可微分的,那么函数在该点沿任一方向l的方向导数都存在,且有

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_梯度下降法_05

,其中φ为x轴到方向l的转角。

简要证明:

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_邻域_06

由此可将该定理推向更高维的函数,例如对于三元函数u=f(x,y,z),定义它在空间一点P(x,y,z)向某方向(设方向的方向角为α,β,γ)的方向导数如下

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_迭代_07

 ,

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_梯度下降法_08

故有

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_梯度下降法_09

 3.梯度

梯度是一个矢量,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

设函数z=f(x,y)在平面区域D内有一阶连续偏导数,则对于区域D内的任一点p(x,y)及任一方向l,有

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_迭代_10

 

其中向量

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_迭代_11

称为函数f(x,y)在点P的梯度,记作gradf(x,y)。

4.梯度与方向导数


利用坐标下降法求解Lasso的python代码 坐标梯度下降法_迭代_12

是与l方向相同的单位向量,则

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_邻域_13

 5.为什么梯度方向是使函数值增加最快的方向?(负梯度方向是使函数值下降最快的方向?)

方向导数何时取得最大值呢?即为

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_梯度下降法_14

等于1时,即单位向量

利用坐标下降法求解Lasso的python代码 坐标梯度下降法_迭代_15

与梯度向量同向时,方向导数最大,也就是单位步伐,函数值朝这个方向变化最快。同理可知与梯度方向反向时,函数值下降最快。

结论:函数在某点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值。所以可以说,沿着梯度方向,方向导数为正,函数沿着这个方向变化是增加最快的方向