回归优化方法——梯度下降法、牛顿法、拟牛顿法

      在解决优化问题时,最常见的方法是梯度下降法、牛顿法、拟牛顿法

一、梯度下降法

      首先,回顾几个概念:
      导数:函数曲线上的某一点的导数大于零,表明函数在该点沿着 x 轴的正方向趋于增加;反之,表明函数在该点沿着 x 轴的正方向趋于减小;

      方向导数:上述导数的定义指的是沿着 x 轴的正方向,而方向导数指的是某一点沿着任意趋近方向上的导数值;

      梯度:首先提督是一个向量,梯度的方向与最大方向导数的方向一致,梯度的模为方向导数的最大值;梯度是一个向量组合,反映了多维图形中变化速率最快的方向。

      梯度下降法就是沿着负梯度方向依次迭代、优化

      以下山为例,从山顶到山脚有无数条下山路径,怎样选择一条合适的路径呢?

梯度下降法的思想如下:以当前的位置(山顶)为起点,寻找坡度最大的一步为接下来要走的第一步;这一步走完后,继续以当前位置为起点,寻找坡度最大的一步为接下来要走的第二步;…;以此类推,直到从山顶走到山脚为止。

image

那么,这么选择走法路径的数学依据是什么呢?

      既然在空间变量的某一点处,函数沿梯度方向具有最大的变化率,那么在优化目标的时候,自然是沿着负梯度的方向去减小函数值。梯度下降法基于以下的观察:如果 F ( x ) 函数在某一点 x 0 处可微且有定义,那么函数 F ( x ) 在该点沿着梯度反方向 F ( x 0 ) 下降最快。考虑到这一点,可以从函数极小值的初始估计值 x 0 出发,并考虑 x 0 x 1 x 2 ,使得 x n + 1 = x n γ n F ( x n ) , n 0 ,因此可以得到 F ( x 0 ) F ( x 1 ) F ( x 2 ) . . . ,其中 γ 为步长,每次迭代时可以改变,但请注意,步长太小的话收敛速度会很慢,步长太大的话可能会发散。

百度百科上有一个实例

      函数 F ( x ) = x 2

采用梯度下降法的步骤如下:

1、求梯度: = 2 x

2、向梯度相反的方向移动 x ,如下:

x x γ ,如果步长足够小,则可以保证每一次迭代都在减小,但可能导致收敛速度太慢;如果步长太大,则不能保证每一次迭代都会减小,也不会保证收敛。

3、循环迭代步骤2,直到 x 的值的变化使得 F ( x ) 在两次迭代之间的差值满足一个阈值条件,比如0.000001,也就是说,两次迭代的结果基本没有发生变化则说明此时函数已经达到了最小值。

4、输出 x ,这个 x 即是函数取得最小值时的 x

       如果函数为凸函数,则可以保证得到的解为全局最优解,否则可能为局部最优解。其优化思想是用当前位置的负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为“最速下降法”。最速下降法月接近目标值,步长越小,前进越慢。

image

二、牛顿法

(1)、牛顿迭代法近似求解方程的根

牛顿法是牛顿于17世纪提出的一种在实数域和复数域近似求解方程的方法。

该方法使用函数的泰勒级数的前几项寻找函数为零时的根,其基本思想如下图所示:
image

      用牛顿法解非线性方程,是把非线性方程 f ( x ) = 0 线性化的一种近似方法,把 f ( x ) x 的某领域内展开成泰勒级数:

f ( x ) = f ( x 0 ) + f ( x 0 ) ( x x 0 ) + f ( x 0 ) ( x x 0 ) ) 2 2 ! + . . . + f ( n ) ( x 0 ) ( x x 0 ) n n ! + R n ( x )

取其线性部分,即泰勒展开的前两项,并令其等于0,即 f ( x 0 ) + f ( x 0 ) ( x x 0 ) = 0 ,以此作为非线性方程的 f ( x ) = 0 的近似方程,如果 f ( x 0 ) 0 ,则其解为 x 1 = x 0 f ( x 0 ) f ( x 0 ) ,这样牛顿法就得到了一个迭代关系式: x n + 1 = x n f ( x n ) f ( x n )

我们知道: f ( x n ) = f ( x n ) x n x n + 1 ,并且 Δ x = x n x n + 1 ,所以 Δ x = f ( x n ) f ( x n ) ,也就是说,从 x 0 x 1 x 2 、…、 x n x n + 1 是越来越靠近函数的零点,这就是牛顿法的原理思想。

image

牛顿法总的来说就是利用 f ( x ) 的泰勒展开并保留其线性部分来求解 f ( x ) = 0 的近似解。

(2)、牛顿法最值优化

我们知道,在求解函数 f ( x ) 最值时,就是相当于求解 f ( x ) = 0 时的根,由此可以联想到,利用(1)中所述的牛顿迭代法近似求解方程的根来求解函数 f ( x ) = 0 时的根,这是一个道理。

      即对函数 f ( x ) 进行泰勒展开并保留其线性部分,相似的原理我们可以得到:
f ( x 0 ) + f ( x 0 ) ( x x 0 ) = 0 ,进而得到 x 1 = x 0 f ( x 0 ) f ( x 0 ) ,从而得到一个迭代关系式: x n + 1 = x n f ( x n ) f ( x n ) ,以下迭代求解方程 f ( x ) = 0 的近似解与(1)类似,不再赘述。

       但是有一点不同的是,当函数具有较多变量时, f f 皆为矩阵,即是海森矩阵(Hessian Matrix),在相关迭代的过程中就需要求解海森矩阵的逆矩阵,这一点的计算量是相当大的,尤其是变量为高维时。

三、拟牛顿法

       牛顿法是典型的二阶方法,其迭代次数远远小于最值下降法,但是牛顿优化法使用了二阶导数 2 f ( x ) ,在每轮迭代中涉及海森矩阵的求逆,计算复杂度相当高,尤其在高维问题中几乎不可行。若能以较低的计算代价寻求海森矩阵的近似逆矩阵,则可以显著降低计算的时间,这就是拟牛顿法。

常用的拟牛顿法有DFP、BFGS、SR1方法等,这里暂不介绍。

猜你喜欢

转载自blog.csdn.net/haiyang_duan/article/details/79206904
今日推荐