牛顿法

牛顿法

目标:求解无约束最优化问题中的极小值点 x x ∗

minxRnf(x) m i n x ∈ R n f ( x )

假设f(x)具有二阶连续偏导数,且第k次迭代值为 xk x k ,则可将f(x)在 xk x k 附近进行二阶泰勒展开:

f(x)=f(xk)+fT(xk)(xxk)+12(xxk)TH(xk)(xxk) f ( x ) = f ( x k ) + ∇ f T ( x k ) ( x − x k ) + 1 2 ( x − x k ) T H ( x k ) ( x − x k )

H(xk) H ( x k ) 为f(x)的海塞矩阵在点 xk x k 的值。

函数f(x)有极值的必要条件是在极值点处的一阶导数为0。由二阶泰勒展开可以得到:

f(x)=f(x)f(xk)xxk=f(xk)+H(xk)(xxk) ∇ f ( x ) = f ( x ) − f ( x k ) x − x k = ∇ f ( x k ) + H ( x k ) ( x − x k )

若已知 xk x k ,求第k+1次迭代的极值点,则必要条件为:

f(xk+1)=f(xk)+H(xk)(xk+1xk)=0 ∇ f ( x k + 1 ) = ∇ f ( x k ) + H ( x k ) ( x k + 1 − x k ) = 0

xk+1=xkH1(xk)f(xk) x k + 1 = x k − H − 1 ( x k ) ∇ f ( x k )

得到x的更新公式。

(疑惑点)

到这里就有个疑问,既然 xk+1 x k + 1 使得 f(xk+1)=0 ∇ f ( x k + 1 ) = 0 ,那 xk+1 x k + 1 不就是极值点了吗?为何还需要迭代更新?

由于泰勒公式二阶展开只是一个估算,得出的值只是比初始值更接近的值,所以要经过迭代算法得出更接近的值。

举例说明

1、例子1

用牛顿法,求 f(x)=x2x=0x05 f ( x ) = x 2 极 值 点 ( x ∗ = 0 ) , x 0 初 始 化 为 5

x更新公式为: xk+1=xk2xk2 x k + 1 = x k − 2 x k 2

k=0时, x1=55=0 x 1 = 5 − 5 = 0

x更新一步到位,因为f(x)的二阶泰勒展开就只能展开到二阶梯度,三阶梯度已经为0了,所以此时的泰勒公式二阶展开就是f(x),而不是估计值。

2、例子2

用牛顿法,求 f(x)=x3xx=±13±0.578x05 f ( x ) = x 3 − x 极 值 点 ( x ∗ = ± 1 3 ≈ ± 0.578 ) , x 0 初 始 化 为 5

x更新公式为: xk+1=xk3(xk)216xk x k + 1 = x k − 3 ( x k ) 2 − 1 6 x k

k=0时, x1=574302.54 x 1 = 5 − 74 30 ≈ 2.54

k=1时, x22.5418.315.241.34 x 2 ≈ 2.54 − 18.3 15.24 ≈ 1.34

k=2时, x31.344.398.040.79 x 3 ≈ 1.34 − 4.39 8.04 ≈ 0.79

k=3时, x30.790.874.740.61 x 3 ≈ 0.79 − 0.87 4.74 ≈ 0.61

k=4时, x40.610.123.66 x 4 ≈ 0.61 − 0.12 3.66 ≈ 0.58

k=3时, x30.580.0093.480.578 x 3 ≈ 0.58 − 0.009 3.48 ≈ 0.578

可以看到,由于f(x)三阶梯度不为0,所以f(x)的二阶泰勒只是一个估计值,得出的值只是比初始值更接近的值,要经过迭代算法得出更接近的值。

3、例子3

这里对比牛顿法和梯度下降法的更新速度,用梯度下降法计算第一个例子。

用梯度下降法,求 f(x)=x2x=0x050.1 f ( x ) = x 2 极 值 点 ( x ∗ = 0 ) , x 0 初 始 化 为 5 , 学 习 率 为 0.1

x更新公式为: xk+1=xk0.12xk x k + 1 = x k − 0.1 ∗ 2 x k

k=0时, x1=51=4 x 1 = 5 − 1 = 4

k=1时, x2=40.8=3.2 x 2 = 4 − 0.8 = 3.2

k=2时, x3=3.20.64=2.56 x 3 = 3.2 − 0.64 = 2.56

k=3时, x4=2.560.22.56=2.048 x 4 = 2.56 − 0.2 ∗ 2.56 = 2.048

k=4时, x5=2.0480.22.048=1.6384 x 5 = 2.048 − 0.2 ∗ 2.048 = 1.6384

….

k=28时, x29=0.0064 x 29 = 0.0064

可见,梯度下降的速度远没有牛顿法快,因为牛顿法直接寻找极值点,而梯度下降是按着设定步长,朝着梯度方法下降,步长 α α 的设置很影响迭代的次数。

对比两者的公式:

梯度下降 xk+1=xkαf(xk) x k + 1 = x k − α ∇ f ( x k )

牛顿法 xk+1=xkH1(xk)f(xk) x k + 1 = x k − H − 1 ( x k ) ∇ f ( x k )

这可以理解梯度下降法和牛顿法的区别是:牛顿法根据f(x)的二阶导数信息,自动计算出了合适的学习率,因此有更快的迭代速度。而作为交换,牛顿法需要计算庞大的hessian矩阵,矩阵的大小为参数个数 * 参数个数,计算速度慢,消耗资源大。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值