目录
第5章 初学牛顿法
本文是对牛顿法和拟牛顿法的公式进行简单的推导以及介绍,主要解决如何使用牛顿法(即不管怎么来,为什么,只管怎么用),我会在后续博文中继续学习总结它是怎么来的。
本文将分为两个部分,第一部分是牛顿法介绍;第二部分为拟牛顿法的简单介绍。
5.1 牛顿法
本文是对牛顿法的公式进行简单的推导以及介绍,主要解决如何使用牛顿法(即不管怎么来,为什么,只管怎么用),我会在后续博文中继续学习总结它是怎么来的。
牛顿法是在梯度下降算法的基础上引入二阶导数,从而加快优化算法的收敛速度。具体算法思路如下:
-
有无约束最优化问题:
(4.1) m i n x ∈ R n f ( x ) min_{x\in R^n}f(x)\tag{4.1} minx∈Rnf(x)(4.1) -
假设 f ( x ) f(x) f(x) 有二阶连续偏导数, x k x_k xk是第k次迭代值,可得 f ( x ) f(x) f(x)的二阶泰勒展开式如下:
(4.2) f ( x ) = f ( x k ) + g k ( x − x k ) + 1 2 ( x − x k ) T H k ( x − x k ) f(x)=f(x_k)+g_k(x-x_k)+\frac{1}{2}(x-x_k)^T H_k(x-x_k)\tag{4.2} f(x)=f(xk)+gk(x−xk)+21(x−xk)THk(x−xk)(4.2)
其中 g k = g ( x k ) = f ′ ( x k ) g_k=g(x_k)=f'(x_k) gk=g(xk)=f′(xk), H k H_k Hk是 f ( x ) f(x) f(x)的海森矩阵(Hesse matrix)。 -
令上式对 x x x 求导得:
(4.3) ∇ f ( x ) = g k + H k ( x − x k ) \nabla f(x)=g_k+H_k(x-x_k)\tag{4.3} ∇f(x)=gk+Hk(x−xk)(4.3) -
假设在 x k + 1 x_{k+1} xk+1 点满足:
(4.4) ∇ f ( x k + 1 ) = 0 \nabla f(x_{k+1})=0\tag{4.4} ∇f(xk+1)=0(4.4)
将式子(3)中的 x x x 替换为 x k + 1 x_{k+1} xk+1得:
(4.5) g k + H k ( x k + 1 − x k ) = 0 g_k+H_k(x_{k+1}-x_k)=0\tag{4.5} gk+Hk(xk+1−xk)=0(4.5) -
求解式子(4.5)得:
(4.6) x k + 1 = x k − g k H k x_{k+1}=x_k-\frac{g_k}{H_k}\tag{4.6} xk+1=xk−Hkgk(4.6)
令 H k p k = − g k H_kp_k=-g_k Hkpk=−gk,可得:
(4.7) x k + 1 = x k + p k x_{k+1}=x_k+p_k\tag{4.7} xk+1=xk+pk(4.7)
用式子(4.6)作为迭代公式的算法就是牛顿算法。
牛顿算法
输入:目标函数 f ( x ) f(x) f(x),梯度 g ( x ) = ∇ f ( x ) g(x)=\nabla f(x) g(x)=∇f(x),海森矩阵 H ( x ) H(x) H(x),精度要求 ϵ \epsilon ϵ;
输出: f ( x ) f(x) f(x)的极小值点 x ∗ x^* x∗.
(1) 取初始点 x k x_k xk,置 k = 0 k=0 k=0;
(2) 计算 g k = g ( x k ) g_k=g(x_k) gk=g(xk);
(3) 若 ∣ ∣ g k ∣ ∣ < ϵ ||g_k||<\epsilon ∣∣gk∣∣<ϵ,停止计算,返回近似解 x ∗ = x k x^*=x_k x∗=xk;
(4) 计算 H k = H ( x k ) H_k=H(x_k) Hk=H(xk),并求 p k p_k pk:
H k p k = − g k H_k p_k=-g_k Hkpk=−gk
(5) 置 X k + 1 = x k + p k X_{k+1}=x_k+p_k Xk+1=xk+pk;
(6) 置 k = k + 1 k=k+1 k=k+1,返回(2).
在步骤(4)中,要求 H k − 1 H_k^{-1} Hk−1,计算比较复杂,所以有其它改进的方法。
优点: 1. 牛顿法为二阶收敛,收敛速度快;
缺点: 1.牛顿法每一步都要求目标函数海森矩阵的逆矩阵,计算复杂度较大;
2. 可能发生被零除错误,因为在零点附近,导数非常小,运算易出现被零除错误;
我跳过的坑
1. 为什么求导后的式子(4.3)没有 f ( x k ) f(x_k) f(xk) ?
这个问题很简单,我们是对 x x x 进行求导,而 f ( x k ) f(x_k) f(xk) 中并没有 x k x_k xk,因此求导后 f ( x k ) f(x_k) f(xk) 为零。2. 我一直陷入一个误区,认为优化就是沿着梯度的反方向移动,以凸函数为例:
当初始点为 A A A时,沿梯度反方向(即梯度下降的方向)移动,可以到达最优解,但初始点为 B B B时,沿梯度下降方向移动岂不是越移越远了吗?
其实我理解是错误的,更加规范的说法是沿负梯度方向移动,当位于 A A A点时,梯度为正,负梯度即向梯度减小的方向移动,而 B B B点梯度为负,负梯度是向梯度增大的方向移动。所以不管梯度正还是负,沿梯度负方向移动都是向极小值点移动。
5.2 拟牛顿法
由于牛顿法中求海森矩阵及其逆矩阵较为复杂,所以考虑用一个n阶矩阵
G
G
G来代替海森矩阵
H
H
H或其逆矩阵
H
−
1
H^{-1}
H−1,如下所示:
x
k
+
1
=
x
k
−
G
k
+
1
g
k
或
−
g
k
=
G
k
+
1
(
x
k
+
1
−
x
k
)
替
代
x
k
+
1
=
x
k
−
H
k
−
1
g
k
\begin{aligned} x_{k+1}&=x_k-G_{k+1}g_k \\ &或 \\ -g_k&=G_{k+1}(x_{k+1}-x_k) \\ &替代\\ x_{k+1}&=x_k-H_k^{-1}g_k \end{aligned}
xk+1−gkxk+1=xk−Gk+1gk或=Gk+1(xk+1−xk)替代=xk−Hk−1gk
为什么矩阵G是n阶矩阵?
我的个人理解是,矩阵可视为一种映射,而这里是将n维向量 ( x k + 1 − x k ) (x_{k+1}-x_k) (xk+1−xk)映射到n维向量 ( g k + 1 − g k ) (g_{k+1}-g_k) (gk+1−gk),所以矩阵G必须为n阶矩阵,否则等式无法成立。
为了实现替代,矩阵G要满足 H − 1 H^{-1} H−1所满足的条件:
- 满足公式 x k + 1 = x k − G k + 1 g k x_{k+1}=x_k-G_{k+1}g_k xk+1=xk−Gk+1gk;
- G必须为正定矩阵;
要满足条件一可以使用假设法,假设
G
k
+
1
G_{k+1}
Gk+1满足等式,并设计
G
k
+
1
G_{k+1}
Gk+1的迭代表达方式,然后进行逆推,求出
G
k
+
1
G_{k+1}
Gk+1的真正表达式。而不同的假设方式对应于拟牛顿法的两种不同算法DFP和BFGS,详情见博客第7章 拟牛顿法详解
要满足条件二,可设置G的初始值为正定矩阵并在迭代过程中保证其正定性不变。
优点: 1. 拟牛顿法为二阶收敛,收敛速度快;
2. 拟牛顿法利用迭代方式求
G
k
+
1
G_{k+1}
Gk+1,计算复杂度比牛顿法小;
缺点: 暂时还没学习了解到。
5.3 残留问题
-
G
k
+
1
G_{k+1}
Gk+1是如何假设的?
我的解答:第6章 拟牛顿法详解 - 为什么要那样假设?
我的解答:第6章 拟牛顿法详解 - 为什么牛顿法收敛速度更快?
我的解答:第7章 牛顿法收敛性 - 拟牛顿法如何保证
G
k
+
1
G_{k+1}
Gk+1的正定性?
我的解答:第8章 拟牛顿法中的正定性
5.4 参考
[1] 维基百科.黑塞矩阵
[2] (Youtube)CCU MOOCs.3.4 Newton Method 牛頓法
[3] zhiyong_will.优化算法——牛顿法(Newton Method)
[4] (Youtube)有道學堂公開課.Taylor展式與擬牛頓
牛顿法优缺点:
[5] -柚子皮-.最优化方法:牛顿迭代法和拟牛顿迭代法
DFP算法中如何求出
P
k
P_k
Pk和
Q
k
Q_k
Qk:
[6] 皮果提.牛顿法与拟牛顿法学习笔记(三)DFP 算法
[7] ihoujie.拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno