Jacobian矩阵和Hessian矩阵,以及牛顿法
Jacobian矩阵
在向量分析中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅克比行列式。
雅可比矩阵
雅克比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近。因此,雅克比矩阵类似于多元函数的导数
假设
F
:
R
n
→
R
m
F:R_n \rightarrow R_m
F:Rn→Rm是一个从欧式
n
n
n维空间转换到
m
m
m维空间的函数。这个函数由m个实函数组成:
y
1
(
x
1
,
.
.
.
,
x
n
)
,
.
.
.
,
y
m
(
x
1
,
.
.
.
,
x
n
)
y_1(x_1,...,x_n),...,y_m(x_1,...,x_n)
y1(x1,...,xn),...,ym(x1,...,xn),这些函数的偏导数(如果存在)可以组成一个m行n列的矩阵,这就是所谓的雅克比矩阵:
[
∂
y
1
∂
x
1
⋯
∂
y
1
∂
x
n
⋮
⋱
⋮
∂
y
m
∂
x
1
⋯
∂
y
m
∂
x
n
]
\begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \cdots &\frac{\partial y_1}{\partial x_n} \\ \vdots &\ddots &\vdots \\ \frac{\partial y_m}{\partial x_1} &\cdots &\frac{\partial y_m}{\partial x_n} \end{bmatrix}
⎣⎢⎡∂x1∂y1⋮∂x1∂ym⋯⋱⋯∂xn∂y1⋮∂xn∂ym⎦⎥⎤
这个矩阵可以表示成:
J
F
(
x
1
,
.
.
.
,
x
n
)
J_F(x_1,...,x_n)
JF(x1,...,xn),
∂
(
y
1
,
.
.
.
,
y
m
)
∂
(
x
1
,
.
.
.
,
x
n
)
\frac{\partial (y_1,...,y_m)}{\partial (x_1,...,x_n)}
∂(x1,...,xn)∂(y1,...,ym)
这个矩阵的第i行是由梯度函数的转置
y
i
,
(
i
=
1
,
.
.
.
,
m
)
y_i,(i=1,...,m)
yi,(i=1,...,m)表示的。
如果
p
是
R
n
p是R_n
p是Rn中的一点,F在p点可微分,那么在这一点的导数由
J
F
(
p
)
J_F(p)
JF(p)给出(这是求该点导数的最简便的方法),在此情况下,由
F
(
p
)
F(p)
F(p)描述的线性算子即接近点p的F的最优线性逼近,x逼近于p:
F
(
x
)
≈
F
(
p
)
+
J
F
(
p
)
⋅
(
x
−
p
)
F(x) \approx F(p) + J_F(p)\cdot (x-p)
F(x)≈F(p)+JF(p)⋅(x−p)
雅克比行列式
如果m=n,那么F是从n维空间到n维空间的函数,且它的雅克比矩阵是一个方块矩阵,于是我们可以获取它的行列式,称为雅克比行列式。
在某个给定点的雅克比行列式,提供了在接近该点时的函数的具体走向的重要信息。例如,如果连续可微函数F在p点的雅克比行列式不是零,那么它在该点附近具有反函数,这称为反函数定理。更近一步,如果p点的雅克比行列式是正数,则F在p点的取向不变;如果是负数,则与F的方向相反。而从雅克比行列式的绝对值,就可以知道函数F在p点的缩放因子。
对于取向问题可以这么理解,例如一个物体在平面上做匀速运动,如果施加一个正方向的力F,即取向相同,则加速运动,类比于速度的导数加速度为正;如果施加一个反方向的力F,即取向相反,则减速运动,类比于速度的导数加速度为负。对应于函数来说,就是曲线的斜率是在一直增大(雅克比行列式为正),还是在减小(雅克比行列式为负)
Hessian矩阵
在数学中,Hessian(海森)矩阵是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵,此函数如下:
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_1,x_2,...,x_n)
f(x1,x2,...,xn)
如果f的所有二阶导数都存在,那么f的海森矩阵即H(f)为:
[
∂
2
f
∂
x
1
2
∂
2
f
∂
x
1
∂
x
2
⋯
∂
2
f
∂
x
1
∂
x
n
∂
2
f
∂
x
2
∂
x
1
∂
2
f
∂
x
2
2
⋯
∂
2
f
∂
x
2
x
n
⋮
⋮
⋱
⋮
∂
2
f
∂
x
n
∂
x
1
∂
2
f
∂
x
n
∂
x
2
⋯
∂
2
f
∂
x
n
2
]
\begin{bmatrix} \frac{\partial^2f}{\partial x_1^2} &\frac{\partial^2f}{\partial x_1 \partial x_2} &\cdots &\frac{\partial^2f}{\partial x_1\partial x_n} \\ \frac{\partial^2f}{\partial x_2 \partial x_1} &\frac{\partial^2f}{\partial x_2^2} &\cdots &\frac{\partial^2f}{\partial x_2x_n}\\ \vdots &\vdots &\ddots &\vdots \\ \frac{\partial^2f}{\partial x_n\partial x_1} &\frac{\partial^2f}{\partial x_n \partial x_2} &\cdots &\frac{\partial^2f}{\partial x_n^2} \\ \end{bmatrix}
⎣⎢⎢⎢⎢⎢⎡∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2xn∂2f⋮∂xn2∂2f⎦⎥⎥⎥⎥⎥⎤
海森矩阵被应用于牛顿法中来解决大规模的优化问题。
海森矩阵在牛顿法中的运用
一般来说,牛顿法主要应用于两个方面:1.求方程的根; 2. 最优化。
我们这里需要了解牛顿法用于最优化方面的知识,这需要我们首先了解牛顿法在求解方程上的运用。
求解方程
并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难,利用牛顿法,可以迭代求解,原理是利用泰勒公式,在
x
0
x_0
x0处展开,且展开到一阶,即
f
(
x
)
=
f
(
x
0
)
+
(
x
−
x
0
)
f
′
(
x
0
)
f(x) = f(x_0) + (x-x_0)f'(x_0)
f(x)=f(x0)+(x−x0)f′(x0)
求解方程
f
(
x
)
=
0
f(x)=0
f(x)=0,即
f
(
x
0
)
+
(
x
−
x
0
)
f
′
(
x
0
)
=
0
f(x_0)+(x-x_0)f'(x_0)=0
f(x0)+(x−x0)f′(x0)=0,对这个式子进行移项可得
x
=
x
0
−
f
(
x
0
)
/
f
′
(
x
0
)
x=x_0 - f(x_0)/f'(x_0)
x=x0−f(x0)/f′(x0),假设此时
x
=
x
1
x=x_1
x=x1。
因为这是泰勒的一阶展开,所以
f
(
x
)
与
f
(
x
0
)
+
(
x
−
x
0
)
f
′
(
x
0
)
f(x)与f(x_0)+(x-x_0)f'(x_0)
f(x)与f(x0)+(x−x0)f′(x0)并不是完全相等,而是近视相等,那么这里求得的
x
1
x_1
x1并不能让
f
(
x
)
=
0
f(x)=0
f(x)=0,只能说
f
(
x
1
)
f(x_1)
f(x1)的值比f(x_0)更接近f(x)=0.于是迭代的思想就很自然了,可以继续推导得到
x
n
+
1
=
x
n
−
f
(
x
n
)
/
f
′
(
x
n
)
x_{n+1}=x_n - f(x_n)/f'(x_n)
xn+1=xn−f(xn)/f′(xn),通过迭代,这个式子必然在f(x)=0的时候收敛。整个过程如下图:*
最优化
在最优化的问题中,线性最优化至少可以使用单纯形法(或称不动点算法)求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。
- 假设任务是优化一个目标函数f,求函数f的极大或极小问题,可以转化为求解函数f的导数f’=0的问题,这样就可以把优化问题看成方程求解问题f’=0,剩下的问题就和第一部分提到的牛顿法很相似了。【牛顿法是要求f=0,然后通过泰勒展开,不断迭代 x n + 1 = x n − f ( x n ) / f ′ ( x n ) x_{n+1}=x_n - f(x_n)/f'(x_n) xn+1=xn−f(xn)/f′(xn)来更接近f(x)=0点.而这里是求min f或者max f,对应的就是求f’=0,所以先对f求导,得到f’后,就可以对f’进行泰勒展开【这时会用到f’’,即f的二阶导数】,然后用 x n + 1 = x n − f ′ ( x n ) / f ′ ′ ( x n ) x_{n_+1}=x_n - f'(x_n)/f''(x_n) xn+1=xn−f′(xn)/f′′(xn)来不断迭代,来接近 f ′ ( x n + 1 ) = 0 f'(x_{n+1})=0 f′(xn+1)=0】
这次是为了求解
f
′
=
0
f'=0
f′=0的根,首先把f(x)在探索点
x
n
x^n
xn处泰勒展开,展开到2阶形式进行相似(这里用上标
X
n
X^n
Xn表示点,是因为我们相用下标
x
1
,
.
.
.
,
x
n
x_1,...,x_n
x1,...,xn表示f的维度):
f
(
x
)
=
f
(
x
n
)
+
f
′
(
x
n
)
(
x
−
x
n
)
+
f
′
′
(
x
n
)
2
(
x
−
x
n
)
2
f(x) = f(x^n) + f'(x^n)(x-x^n) + \frac{f''(x^n)}{2}(x-x^n)^2
f(x)=f(xn)+f′(xn)(x−xn)+2f′′(xn)(x−xn)2
然后用f(x)的最小点做为新的探索点
x
n
+
1
x^{n+1}
xn+1,据此,令:
f
′
(
x
)
=
f
′
(
x
n
)
+
f
′
′
(
x
n
)
(
x
−
x
n
)
=
0
f'(x) = f'(x^n) + f''(x^n)(x-x^n) = 0
f′(x)=f′(xn)+f′′(xn)(x−xn)=0
得出迭代公式:
x
n
+
1
=
x
n
−
f
′
(
x
n
)
f
′
′
(
x
n
)
,
n
=
0
,
1
,
.
.
.
x^{n+1} = x^n - \frac{f'(x^n)}{f''(x^n)}, n=0,1,...
xn+1=xn−f′′(xn)f′(xn),n=0,1,...
上面讨论的是二维情况,高维情况的牛顿迭代公式是:
x
n
+
1
=
x
n
−
[
H
f
(
x
n
)
]
−
1
∇
f
(
x
n
)
,
n
≥
0
x^{n+1} = x^n - [Hf(x^n)]^{-1} \nabla f(x^n), n \geq 0
xn+1=xn−[Hf(xn)]−1∇f(xn),n≥0
其中H是Hessian矩阵,其中的
H
f
(
x
n
)
Hf(x^n)
Hf(xn)是Hessian矩阵在点
x
n
x^n
xn处的取值,是
n
×
n
n\times n
n×n的矩阵,其中
∇
f
(
x
n
)
\nabla f(x^n)
∇f(xn)是在点
x
n
x^n
xn处的一阶导数,是
n
×
1
n\times 1
n×1的,定义见上。
高维情况下,依然可以用牛顿法来求解,但问题时引入Hessian矩阵时引入的复杂性,使得牛顿迭代求解的难度大大增加,但是已经有了一些算法,用别的一些矩阵来代替Hessian矩阵,这就是拟牛顿法的核心思想。
但是原始的牛顿法中由于迭代公式中没有步长因子,而是定长迭代,对于非二次型目标函数,有时会使函数值上升,即出现 f ( x k + 1 ) > f ( x k ) f(x_{k+1}) > f(x_k) f(xk+1)>f(xk)的情况,这就表明原始牛顿法不能保证函数值稳定的下降,在严重的情况下甚至可能造成迭代点列 { x k } \{x^k\} {xk}的发散而导致计算失败。
牛顿法和梯度下降法的区别
一般认为牛顿法可以利用曲线本身的信息,比梯度下降法更容易收敛(迭代次数少)
那么为什么认为通常牛顿法比梯度下降法能更快的收敛呢?
- 这是因为牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法更快。更通俗的来说,比如你想要找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选取一个坡度最大的方向走一步,而牛顿法不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变的更大。所以,可以说牛顿法比梯度下降法看的更远一点,能更快的走到最底部。
- 根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法使用一个平面去拟合当前的局部曲面。通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
- 牛顿法和梯度下降法的具体图像如下:
参考地址:https://blog.csdn.net/huangdunxian/article/details/74507906
参考网址:http://jacoxu.com/jacobian%E7%9F%A9%E9%98%B5%E5%92%8Chessian%E7%9F%A9%E9%98%B5/