牛顿法(Newton‘s method)和拟牛顿法(quasi Newton method)

简述

在看伊恩·古德费洛的深度学习,4.3节基于梯度的优化方法时提到

仅使用梯度信息的优化算法称为 一阶优化算法 ,如梯度下降。

使用Hessian矩阵的优化算法称为 二阶最优化算法 ,如牛顿法。

 

牛顿法和拟牛顿法时求解无约束最优化问题的常用方法,收敛速度快。

牛顿法是迭代算法,每一步需要求解目标函数的海赛矩阵的逆矩阵,计算比较复杂;

拟牛顿法通过正定矩阵近似海赛矩阵的逆矩阵或海赛矩阵,简化这一计算过程。

 

 

下面记录一下对牛顿法的一点理解 

牛顿法(Newton‘s method)

 

储备知识:泰勒展开式

x_{0}=0时就是麦克劳伦展开式

 

以及常见函数的展开式

牛顿法(Newton‘s method)和拟牛顿法(quasi Newton method)_第1张图片

应用A:求解方程

将利用泰勒公式在x_{0}处展开到一阶f(x)=f(x_{0})+(x-x_{0})f^{'}(x_{0})

f(0)=0,求解得到x=x_{1}=x_{0}-\frac{f(x_{0})}{f^{'}(x_{0})}

f(x{_{1}})f(x{_{0}})更接近于f(x)=0

可以推出x(n+1)=x(n)-\frac{f(x(n))}{f^{'}(x(n))}

 

实例:用牛顿法求开根号

从上面的推到已知

x(n+1)=x(n)-\frac{f(x(n))}{f^{'}(x(n))}

如果求X^2 = 2

那么:f(x) = x^2-2

更一般的:f(x)=x^2−a

所以f(x)的一次导是: f′(x)=2x

牛顿迭代式: 

 

from math import sqrt
def newton(num):
    a = sqrt(num)
    b = num // 2
    count = 1
    while abs(a-b) > 0.000000000001:
        print(count, b)
        count += 1
        b = 0.5*(1.0*b + (1.0*num)/b)
    return b
print(newton(2))
print(sqrt(2))

牛顿法(Newton‘s method)和拟牛顿法(quasi Newton method)_第2张图片

 

应用B:最优化

将利用泰勒公式展开到二阶f(x+\bigtriangleup x)=f(x)+\bigtriangleup xf^{'}(x)+\frac{1}{2}\bigtriangleup x^{^{2}}f^{''}(x)

\bigtriangleup x趋向于0时,f^{'}(x)+\bigtriangleup xf^{''}(x)=0

求解 \bigtriangleup x=-\frac{f^{'}(x)}{f^{''}(x)}

得到迭代公式 x_{n+1}=x_{n}-\frac{f^{'}(x_{n})}{f^{''}(x_{n})},n=0,1,2……

可以看到牛顿法的迭代步长为\frac{1}{f^{''}(x_{n})}

常见的最优化方法有:梯度下降法、牛顿法、拟牛顿法、共轭梯度法等等

如下图红色曲线是利用牛顿法迭代求解;绿色曲线是利用梯度下降法迭代求解。

从本质上来讲,最优化求解问题的迭代形式都是x_{n+1}=x_{n}-nf^{'}(x_{n}),其中n是系数,f^{'}(x_{n})是函数的梯度,即函数上升的方向,-f^{'}(x_{n})是梯度下降的方向。

最优化问题的标准形式是:求目标函数最小值,只要每次迭代沿着下降的方向可以逐渐达到最优

 

参考博文:Newton法(牛顿法 Newton Method)

 


待补充

拟牛顿法(quasi Newton method)

你可能感兴趣的:(学习笔记,牛顿法,拟牛顿法)