牛顿法
目标:求解无约束最优化问题中的极小值点
x∗
x
∗
假设f(x)具有二阶连续偏导数,且第k次迭代值为
xk
x
k
,则可将f(x)在
xk
x
k
附近进行二阶泰勒展开:
H(xk) H ( x k ) 为f(x)的海塞矩阵在点 xk x k 的值。
函数f(x)有极值的必要条件是在极值点处的一阶导数为0。由二阶泰勒展开可以得到:
若已知 xk x k ,求第k+1次迭代的极值点,则必要条件为:
得到x的更新公式。
(疑惑点)
到这里就有个疑问,既然 xk+1 x k + 1 使得 ∇f(xk+1)=0 ∇ f ( x k + 1 ) = 0 ,那 xk+1 x k + 1 不就是极值点了吗?为何还需要迭代更新?
由于泰勒公式二阶展开只是一个估算,得出的值只是比初始值更接近的值,所以要经过迭代算法得出更接近的值。
举例说明
1、例子1
用牛顿法,求 f(x)=x2极值点(x∗=0),x0初始化为5 f ( x ) = x 2 极 值 点 ( x ∗ = 0 ) , x 0 初 始 化 为 5 。
x更新一步到位,因为f(x)的二阶泰勒展开就只能展开到二阶梯度,三阶梯度已经为0了,所以此时的泰勒公式二阶展开就是f(x),而不是估计值。
2、例子2
用牛顿法,求
f(x)=x3−x极值点(x∗=±13√≈±0.578),x0初始化为5
f
(
x
)
=
x
3
−
x
极
值
点
(
x
∗
=
±
1
3
≈
±
0.578
)
,
x
0
初
始
化
为
5
。
可以看到,由于f(x)三阶梯度不为0,所以f(x)的二阶泰勒只是一个估计值,得出的值只是比初始值更接近的值,要经过迭代算法得出更接近的值。
3、例子3
这里对比牛顿法和梯度下降法的更新速度,用梯度下降法计算第一个例子。
用梯度下降法,求 f(x)=x2极值点(x∗=0),x0初始化为5,学习率为0.1 f ( x ) = x 2 极 值 点 ( x ∗ = 0 ) , x 0 初 始 化 为 5 , 学 习 率 为 0.1 。
可见,梯度下降的速度远没有牛顿法快,因为牛顿法直接寻找极值点,而梯度下降是按着设定步长,朝着梯度方法下降,步长 α α 的设置很影响迭代的次数。
对比两者的公式:
这可以理解梯度下降法和牛顿法的区别是:牛顿法根据f(x)的二阶导数信息,自动计算出了合适的学习率,因此有更快的迭代速度。而作为交换,牛顿法需要计算庞大的hessian矩阵,矩阵的大小为参数个数 * 参数个数,计算速度慢,消耗资源大。