优化算法介绍2

优化算法介绍2

牛顿法、拟牛顿法介绍及其实现

上篇博客介绍了利用梯度方法进行优化的几个算法,简单来说就是通过计算损失函数的在当前点的梯度,衡量向哪个方向移动会获得最快的降速,本篇所讲的几个算法是它们的延伸。他们不仅计算出当前点的下降速度,而且还计算出当前下降速度的加速度,即这个下降速度会变大还是变小。

牛顿法主要用在两个地方

1、求解线性方程的解。

2、作为一种优化方法。

牛顿法求解线性方程的原理是将函数的泰勒展开式近似为所求函数,然后通过求泰勒展开式的前面几项来方程的根。具体步骤如下:

首先、选择一个接近函数f(x)零点的x0,计算相应的f(x0)和切线斜率g(x0)(即函数在该点的一阶导数)。然后我们计算经过该点的切线与x轴的交点x1,即求如下方程的解:

通常情况下x1会比x0更接近方程的解。因为我们可以利用x1开始下一轮迭代。迭代公式简化如下:

已经证明,如果f(x)的导数是连续的,并且待求的方程的解是孤立的,那么解周围存在一个区域,只要初始值x0在这个区域内,那么牛顿法必定收敛。由于牛顿法是给予当前位置 的切线来确定下一次的位置,所以牛顿法称为切线法。牛顿法的搜索路径如下图所示

优化算法介绍2_第1张图片

牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当期所处位置选一个坡度最大的方向走一个,牛顿法选择方法是,不仅会考虑坡度是否下降,还会考虑你走了一步之后,坡度是否会变得更大。所以可以说牛顿法比梯度下降法看的更远一步,能更快地走到最底部。

在作为一种优化方法时,需要设计到一点数学知识。

黑森矩阵

 

优化算法介绍2_第2张图片

 

 

 

 

 

 

 

 

 

当变量不是一个,问题扩展到多元函数的时候,迭代公式变成如下形式:

 

 

 

 

 

此时牛顿法求解需要求出黑森矩阵的逆矩阵,计算量变得很大。

由于对于多阶问题,黑森矩阵的计算难度较大,所以人们想出一种黑森矩阵的近似方法,使用另一个矩阵来代替原理很难求的黑森矩阵。代表算法是DFP算法。

我们先给出原始牛顿饭的步骤和算法描述。

1、给定住址x0和精度阈值,并令k=0

2、计算gk 和Hk,其中gk为变量的即梯度向量,Hk为变量的黑森矩阵。

3、若gk小于阈值,则停止迭代。否则,确定搜索方向

4、计算新的迭代点

5、令k := k+1 转到步骤2

其中第三步后人又进行了优化,第三步我们只确定了变量变化的方向,但是没有确定变量的变化幅度,此时可以利用一维搜索方法寻找最佳的步长。常用的方法有进退法、二分法、黄金分割法等等。

从以上可以看出,对于多元函数来说,黑森矩阵的计算确实比较麻烦。对于多元函数来说,比较容易计算的是一阶导数,我们可以用一阶导数来模拟黑森矩阵。

DFP算法是拟牛顿法的代表,它使用的模拟矩阵如下所示

其中

如此看了,我们已经用简单的一阶导数通过矩阵运算模拟出本来比较难计算的黑森矩阵。

总结下,DFP算法步骤如下

1、给定住址x0和精度阈值,并令D0 = I, k=0

2、 确定搜索方向

3、利用一维搜索确定不长,令

4、若gk小于阈值,则停止迭代。

5、计算yk = g(k+1)- g(k)

4、计算

5、令k := k+1 转到步骤2

参考代码地址 https://github.com/delltower/machine_learn

你可能感兴趣的:(lr)