雅克比矩阵理解
Reference:
- 高翔,张涛 《视觉SLAM十四讲》
- 雅可比矩阵和雅可比行列式
- Jacobian prerequisite knowledge
相关文章跳转:
1.概述
设
f
:
R
n
→
R
m
f:\mathbb{R}^{n} \rightarrow \mathbb{R}^{m}
f:Rn→Rm 是一个函数,它的输入是向量
x
∈
R
n
x\in \mathbb{R}^{n}
x∈Rn,输出是向量
y
=
f
(
x
)
∈
R
m
y=f(x)\in \mathbb{R}^{m}
y=f(x)∈Rm:
{
y
1
=
f
1
(
x
1
,
…
,
x
n
)
y
2
=
f
2
(
x
1
,
…
,
x
n
)
⋯
y
m
=
f
m
(
x
1
,
…
,
x
n
)
\left\{\begin{array}{l}y_{1}=f_{1}\left(x_{1}, \ldots, x_{n}\right) \\ y_{2}=f_{2}\left(x_{1}, \ldots, x_{n}\right) \\ \cdots \\ y_{m}=f_{m}\left(x_{1}, \ldots, x_{n}\right)\end{array}\right.
⎩
⎨
⎧y1=f1(x1,…,xn)y2=f2(x1,…,xn)⋯ym=fm(x1,…,xn)
那么雅可比矩阵是一个
m
×
n
m×n
m×n 矩阵,通常被定义为:
J
=
[
∂
f
∂
x
1
⋯
∂
f
∂
x
n
]
=
[
∂
f
1
∂
x
1
⋯
∂
f
1
∂
x
n
⋮
⋱
⋮
∂
f
m
∂
x
1
⋯
∂
f
m
∂
x
n
]
\mathbf{J}=\left[\begin{array}{lll}\frac{\partial \mathbf{f}}{\partial x_{1}} & \cdots & \frac{\partial \mathbf{f}}{\partial x_{n}}\end{array}\right]=\left[\begin{array}{ccc}\frac{\partial f_{1}}{\partial x_{1}} & \cdots & \frac{\partial f_{1}}{\partial x_{n}} \\ \vdots & \ddots & \vdots \\ \frac{\partial f_{m}}{\partial x_{1}} & \cdots & \frac{\partial f_{m}}{\partial x_{n}}\end{array}\right]
J=[∂x1∂f⋯∂xn∂f]=⎣
⎡∂x1∂f1⋮∂x1∂fm⋯⋱⋯∂xn∂f1⋮∂xn∂fm⎦
⎤
由于矩阵描述了向量空间中的运动----变换,而雅克比矩阵看作是将点 ( x 1 , . . . , x n ) (x_1,...,x_n) (x1,...,xn) 转换到点 ( y 1 , . . . , y n ) (y_1,...,y_n) (y1,...,yn),或者说是从一个 n n n 维的欧氏空间转换到 m m m 维的欧氏空间。
1.1 示例
已知函数
F
:
R
3
→
R
m
F:\mathbb{R}^{3} \rightarrow \mathbb{R}^{m}
F:R3→Rm 分量为:
y
1
=
x
1
y_1=x_1
y1=x1
y
2
=
5
x
3
y_2=5x_3
y2=5x3
y
3
=
4
x
2
2
−
2
x
3
y_3=4x_2^2-2x_3
y3=4x22−2x3
y
4
=
x
3
sin
x
1
y_4=x_3\sin x_1
y4=x3sinx1
则函数
F
F
F 的雅克比矩阵为:
J
F
(
x
1
,
x
2
,
x
3
)
=
[
∂
y
1
∂
x
1
∂
y
1
∂
x
2
∂
y
1
∂
x
3
∂
y
2
∂
x
1
∂
y
2
∂
x
2
∂
y
2
∂
x
3
∂
y
3
∂
x
1
∂
y
3
∂
x
2
∂
y
3
∂
x
3
∂
y
4
∂
x
1
∂
y
4
∂
x
2
∂
y
4
∂
x
3
]
=
[
1
0
0
0
0
5
0
8
x
2
−
2
x
3
cos
x
1
0
sin
x
1
]
\mathbf{J}_{\mathbf{F}}\left(x_{1}, x_{2}, x_{3}\right)=\left[\begin{array}{lll} \frac{\partial y_{1}}{\partial x_{1}} & \frac{\partial y_{1}}{\partial x_{2}} & \frac{\partial y_{1}}{\partial x_{3}} \\ \frac{\partial y_{2}}{\partial x_{1}} & \frac{\partial y_{2}}{\partial x_{2}} & \frac{\partial y_{2}}{\partial x_{3}} \\ \frac{\partial y_{3}}{\partial x_{1}} & \frac{\partial y_{3}}{\partial x_{2}} & \frac{\partial y_{3}}{\partial x_{3}} \\ \frac{\partial y_{4}}{\partial x_{1}} & \frac{\partial y_{4}}{\partial x_{2}} & \frac{\partial y_{4}}{\partial x_{3}} \end{array}\right]=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & 0 & 5 \\ 0 & 8 x_{2} & -2 \\ x_{3} \cos x_{1} & 0 & \sin x_{1} \end{array}\right]
JF(x1,x2,x3)=⎣
⎡∂x1∂y1∂x1∂y2∂x1∂y3∂x1∂y4∂x2∂y1∂x2∂y2∂x2∂y3∂x2∂y4∂x3∂y1∂x3∂y2∂x3∂y3∂x3∂y4⎦
⎤=⎣
⎡100x3cosx1008x2005−2sinx1⎦
⎤
1.2 意义
如果
p
p
p 是
R
n
\mathbb{R}^{n}
Rn 中的一点,
F
F
F 在
p
p
p 处可微,
J
F
(
p
)
J_F(p)
JF(p) 是这点的导数。在此情况下,
J
F
(
p
)
J_F(p)
JF(p) 这个线性映射即
F
F
F 在点
p
p
p 附近的最优线性逼近(局部线性),也就是说,当
x
x
x 足够靠近
p
p
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)
用几何方式表述:
以二维情况为例,给定一函数:
f
(
[
x
y
]
)
=
[
f
1
(
x
,
y
)
f
2
(
x
,
y
)
]
=
[
x
+
sin
(
y
)
y
+
sin
(
x
)
]
f\left(\left[\begin{array}{l}x \\ y\end{array}\right]\right)=\left[\begin{array}{l}f_1(x,y) \\ f_2(x,y)\end{array}\right]=\left[\begin{array}{l}x+\sin (y) \\ y+\sin (x)\end{array}\right]
f([xy])=[f1(x,y)f2(x,y)]=[x+sin(y)y+sin(x)]
现在把所有 ( x , y ) (x,y) (x,y) 点,移动到 ( x + sin y , y + sin x ) (x+\sin y,y+\sin x) (x+siny,y+sinx),它会变成如下样子:
这不是一个线性变换,所有的输出线已不是平行且平均分布的网格线。
要弄清楚发生了什么,聚焦于一个点比较好,已知点 p = ( − 2 , 1 ) p=(-2,1) p=(−2,1),则 f ( [ − 2 1 ] ) = [ − 2 + sin 1 1 + sin − 2 ] f\left(\left[\begin{array}{l}-2 \\ 1\end{array}\right]\right)=\left[\begin{array}{l}-2+ \sin 1 \\ 1 + \sin -2\end{array}\right] f([−21])=[−2+sin11+sin−2]
这种变化较为棘手,每个点的变换不能只用相同四个数字的二维矩阵。但是这种函数变换也有一些比较简单的性质-----局部线性:这意味着如果我们回到初始的位置,然后放大某一个点,可以从图中放大视角看到,这个变换虽然不是线性的,但它比刚刚更像是一个线性函数,这些线更像网格线,保持平行且等距(图左),当放大更大倍数时,看起来更像某个线性函数变换(图右):


考虑在原始坐标系中,向右一小步,微小的沿着 x x x 方向的一小步,这一小步会在变换之后变成在输出空间中的一小步:它不再是单纯沿着 x x x 方向了,它除了有向右的分量,还有向下的分量。
继续看上图,输出量移动的
x
x
x 分量为
∂
f
1
/
∂
x
\partial f_1/\partial x
∂f1/∂x;移动的
y
y
y 分量为
∂
f
2
/
∂
x
\partial f_2/\partial x
∂f2/∂x,这两个量均是由
x
x
x 方向的微小改变
∂
x
\partial x
∂x 引起的。随着图像放大视角,这个量一般是一个常数。
同理沿着 y y y 方向一小步,可以得到下图在输出空间中的一小步:
此时完整的 Jacobian Matrix 可得:
[
∂
f
1
/
∂
x
∂
f
1
/
∂
y
∂
f
2
/
∂
x
∂
f
2
/
∂
y
]
=
[
1
cos
y
cos
x
1
]
\left[\begin{array}{ll} \partial f_1/\partial x & \partial f_1/\partial y \\ \partial f_2/\partial x & \partial f_2/\partial y \\ \end{array}\right]= \left[\begin{array}{ll} 1 & \cos y \\ \cos x & 1 \\ \end{array}\right]
[∂f1/∂x∂f2/∂x∂f1/∂y∂f2/∂y]=[1cosxcosy1]
矩阵内,第一个列向量表明了第一个基向量的去处,第二个列向量表明了第二个基向量的去处。
当在点 ( − 2 , 1 ) (-2,1) (−2,1) 评估每一个偏导时,将会得到确切的数字来组成一个 2 ∗ 2 2*2 2∗2 矩阵,这个矩阵表示这个点放大之后的线性变换的样子。
1.3 雅克比矩阵应用
- 高斯牛顿法
考虑一条满足以下方程的曲线: y = e x p ( a x 2 + b x + c ) + w y=exp(ax^2+bx+c)+w y=exp(ax2+bx+c)+w
其中, a , b , c a,b,c a,b,c 为曲线的参数, w w w 为高斯噪声,满足 w ∼ ( 0 , σ 2 ) w \sim(0,\sigma^2) w∼(0,σ2)。
假设有 N N N 个关于 x , y x,y x,y 的观测数据点,需要根据这些数据点求出曲线的参数。可以求解下面的最小二乘问题以估计曲线参数:
min a , b , c 1 2 ∑ i = 1 N ∥ y i − exp ( a x i 2 + b x i + c ) ∥ 2 \min _{a, b, c} \frac{1}{2} \sum_{i=1}^{N}\left\|y_{i}-\exp \left(a x_{i}^{2}+b x_{i}+c\right)\right\|^{2} mina,b,c21∑i=1N∥ ∥yi−exp(axi2+bxi+c)∥ ∥2
在这个问题中,待估计的变量是 a , b , c a,b,c a,b,c,而不是 x x x。我们的程序里先根据模型生成 x , y x,y x,y 的真值,然后在真值中添加高斯分布的噪声(生成带噪声数据)。随后,使用高斯牛顿法从带噪声的数据拟合参数模型。
定义误差为:
e i = y i − exp ( a x i 2 + b x i + c ) e_{i}=y_{i}-\exp \left(a x_{i}^{2}+b x_{i}+c\right) ei=yi−exp(axi2+bxi+c)
那么,可以求出每个误差项对于状态变量的导数:
∂ e i ∂ a = − x i 2 exp ( a x i 2 + b x i + c ) \frac{\partial e_{i}}{\partial a}=-x_{i}^{2} \exp \left(a x_{i}^{2}+b x_{i}+c\right) ∂a∂ei=−xi2exp(axi2+bxi+c)
∂ e i ∂ b = − x i exp ( a x i 2 + b x i + c ) \frac{\partial e_{i}}{\partial b}=-x_{i} \exp \left(a x_{i}^{2}+b x_{i}+c\right) ∂b∂ei=−xiexp(axi2+bxi+c)
∂ e i ∂ c = − exp ( a x i 2 + b x i + c ) \frac{\partial e_{i}}{\partial c}=-\exp \left(a x_{i}^{2}+b x_{i}+c\right) ∂c∂ei=−exp(axi2+bxi+c)
于是雅克比矩阵 J i = [ ∂ e i ∂ a , ∂ e i ∂ b , ∂ e i ∂ c ] T J_i=[\frac{\partial e_{i}}{\partial a},\frac{\partial e_{i}}{\partial b},\frac{\partial e_{i}}{\partial c}]^T Ji=[∂a∂ei,∂b∂ei,∂c∂ei]T,
假设有100个观测数据点,高斯牛顿法的增量方程为:
( ∑ i = 1 100 J i ( σ 2 ) − 1 J i T ) Δ x k = ∑ i = 1 100 − J i ( σ 2 ) − 1 e i \left(\sum_{i=1}^{100} \boldsymbol{J}_{i}\left(\sigma^{2}\right)^{-1} \boldsymbol{J}_{i}^{\mathrm{T}}\right) \Delta \boldsymbol{x}_{k}=\sum_{i=1}^{100}-J_{i}\left(\sigma^{2}\right)^{-1} e_i (∑i=1100Ji(σ2)−1JiT)Δxk=∑i=1100−Ji(σ2)−1ei
其中 Δ x k \Delta x_k Δxk 为增量。
求解上述线性方程: H x = b Hx=b Hx=b,
其中 J J T JJ^T JJT 作为牛顿法中二阶海塞(Hessian)矩阵的近似,从而省略了计算 H H H 的过程。
2. 雅克比行列式
如果 m = n m=n m=n,可以定义雅克比矩阵 J J J 的行列式,也就是雅克比行列式(Jacobian determinant)。