线性代数之 矩阵求导(4)迹与矩阵求导
前言
本次将记录如何进行矩阵求导(标量对矩阵)。由于矩阵求导涉及行列式、迹,因此比标量对向量、向量对向量都要复杂一些。
矩阵微分定义
定义矩阵
X
X
X、实值函数
f
(
X
)
f(X)
f(X)的微分和偏导矩阵:
X
=
[
x
11
x
12
…
x
1
n
x
21
x
22
…
x
2
n
…
…
…
…
x
n
1
x
n
2
…
x
n
n
]
d
X
=
[
d
x
11
d
x
12
…
d
x
1
n
d
x
21
d
x
22
…
d
x
2
n
…
…
…
…
d
x
n
1
d
x
n
2
…
d
x
n
n
]
∂
f
(
X
)
∂
X
=
[
∂
f
∂
x
11
∂
f
∂
x
12
…
∂
f
∂
x
1
n
∂
f
∂
x
21
∂
f
∂
x
22
…
∂
f
∂
x
2
n
…
…
…
…
∂
f
∂
x
n
1
∂
f
∂
x
n
2
…
∂
f
∂
x
n
n
]
将
f
(
X
)
看
做
关
于
矩
阵
元
素
的
多
元
函
数
,
则
d
f
(
X
)
=
∑
i
=
1
n
∑
j
=
1
n
∂
f
∂
x
i
j
d
x
i
j
上
式
是
矩
阵
乘
积
的
内
积
,
即
矩
阵
A
B
T
的
迹
d
f
(
X
)
=
t
r
(
∂
f
(
X
)
∂
X
(
d
X
)
T
)
=
t
r
(
(
∂
f
(
X
)
∂
X
)
T
d
X
)
=
t
r
(
(
∂
f
(
X
)
∂
X
T
)
d
X
)
就
将
矩
阵
求
导
,
微
分
和
矩
阵
的
迹
关
联
了
起
来
。
X=\begin{bmatrix} x_{11} & x_{12} & \dots & x_{1n} \\ x_{21} & x_{22} & \dots & x_{2n} \\ \dots & \dots & \dots & \dots \\ x_{n1} & x_{n2} & \dots & x_{nn} \\ \end{bmatrix} \\ \quad \\ dX=\begin{bmatrix} dx_{11} & dx_{12} & \dots & dx_{1n} \\ dx_{21} & dx_{22} & \dots & dx_{2n} \\ \dots & \dots & \dots & \dots \\ dx_{n1} & dx_{n2} & \dots & dx_{nn} \\ \end{bmatrix} \\ \quad \\ \frac {\partial f(X)}{\partial X} = \begin{bmatrix} \frac {\partial f}{\partial x_{11}} & \frac {\partial f}{\partial x_{12}} & \dots & \frac {\partial f}{\partial x_{1n}} \\ \frac {\partial f}{\partial x_{21}} & \frac {\partial f}{\partial x_{22}} & \dots & \frac {\partial f}{\partial x_{2n}} \\ \dots & \dots & \dots & \dots \\ \frac {\partial f}{\partial x_{n1}} & \frac {\partial f}{\partial x_{n2}} & \dots & \frac {\partial f}{\partial x_{nn}} \\ \end{bmatrix} \\ \quad \\ 将f(X)看做关于矩阵元素的多元函数,则 \\ \quad \\ df(X)=\sum_{i=1}^n\sum_{j=1}^n \frac {\partial f}{\partial x_{ij}}dx_{ij} \\ \quad \\ 上式是矩阵乘积的内积,即矩阵AB^T的迹\\ \quad \\ df(X)=tr(\frac {\partial f(X)}{\partial X} (dX)^T) \\ = tr((\frac {\partial f(X)}{\partial X})^TdX) \\ = tr((\frac {\partial f(X)}{\partial X^T})dX) \\ \quad \\ 就将矩阵求导,微分和矩阵的迹关联了起来。
X=⎣⎢⎢⎡x11x21…xn1x12x22…xn2…………x1nx2n…xnn⎦⎥⎥⎤dX=⎣⎢⎢⎡dx11dx21…dxn1dx12dx22…dxn2…………dx1ndx2n…dxnn⎦⎥⎥⎤∂X∂f(X)=⎣⎢⎢⎢⎡∂x11∂f∂x21∂f…∂xn1∂f∂x12∂f∂x22∂f…∂xn2∂f…………∂x1n∂f∂x2n∂f…∂xnn∂f⎦⎥⎥⎥⎤将f(X)看做关于矩阵元素的多元函数,则df(X)=i=1∑nj=1∑n∂xij∂fdxij上式是矩阵乘积的内积,即矩阵ABT的迹df(X)=tr(∂X∂f(X)(dX)T)=tr((∂X∂f(X))TdX)=tr((∂XT∂f(X))dX)就将矩阵求导,微分和矩阵的迹关联了起来。
因此,对实值函数进行矩阵求导,相当于求函数的全微分,并展开为
d
f
(
X
)
=
t
r
(
(
∂
f
(
X
)
∂
X
T
)
d
X
)
df(X)=tr((\frac {\partial f(X)}{\partial X^T})dX)
df(X)=tr((∂XT∂f(X))dX)的形式,就能得到分子布局的求导结果
∂
f
(
X
)
∂
X
T
\frac {\partial f(X)}{\partial X^T}
∂XT∂f(X)。
定义实矩阵函数
F
(
X
)
F(X)
F(X)的微分:
d
F
(
X
)
=
[
d
f
11
(
X
)
d
f
12
(
X
)
…
d
f
1
n
(
X
)
d
f
21
(
X
)
d
f
22
(
X
)
…
d
f
2
n
(
X
)
…
…
…
…
d
f
n
1
(
X
)
d
f
n
2
(
X
)
…
d
f
n
n
(
X
)
]
dF(X)=\begin{bmatrix} df_{11}(X) & df_{12}(X) & \dots & df_{1n}(X) \\ df_{21}(X) & df_{22}(X) & \dots & df_{2n}(X) \\ \dots & \dots & \dots & \dots \\ df_{n1}(X) & df_{n2}(X) & \dots & df_{nn}(X) \\ \end{bmatrix}
dF(X)=⎣⎢⎢⎡df11(X)df21(X)…dfn1(X)df12(X)df22(X)…dfn2(X)…………df1n(X)df2n(X)…dfnn(X)⎦⎥⎥⎤
仍然是一个与
F
(
X
)
F(X)
F(X)同型的矩阵。引入矩阵函数的目的只是为了方便微分计算。
矩阵微分计算法则
矩阵微分的计算法则,与标量微分的计算法则相同,将标量变量替换为矩阵变量后,需要注意的只有乘积顺序不能改变。
常矩阵
d A m × n = 0 m × n dA^{m\times n}=0^{m\times n} dAm×n=0m×n
线性
d ( c 1 F ( X ) + c 2 G ( X ) ) = c 1 d F ( X ) + c 2 d G ( X ) d(c_1F(X)+c_2G(X))=c_1dF(X)+c_2dG(X) d(c1F(X)+c2G(X))=c1dF(X)+c2dG(X)
乘积
d ( F ( X ) G ( X ) ) = ( d F ( X ) ) G ( X ) + F ( X ) d ( G ( X ) ) d(F(X)G(X))=(dF(X))G(X)+F(X)d(G(X)) d(F(X)G(X))=(dF(X))G(X)+F(X)d(G(X))
转置
(
d
F
(
X
)
)
T
=
d
(
F
T
(
X
)
)
(dF(X))^T=d(F^T(X))
(dF(X))T=d(FT(X))
特例:
d
X
T
=
(
d
X
)
T
dX^T=(dX)^T
dXT=(dX)T
迹
d ( t r ( f ( X ) ) ) = d f ( X ) = t r ( d f ( X ) ) d ( t r ( F ( X ) ) ) = d ∑ i = 1 n f i i ( X ) = ∑ i = 1 n d f i i ( X ) = t r ( d F ( X ) ) d(tr(f(X)))=df(X)=tr(df(X)) \\ \quad \\ d(tr(F(X)))=d\sum_{i=1}^nf_{ii}(X)=\sum_{i=1}^ndf_{ii}(X)=tr(dF(X)) d(tr(f(X)))=df(X)=tr(df(X))d(tr(F(X)))=di=1∑nfii(X)=i=1∑ndfii(X)=tr(dF(X))
通过矩阵微分进行求导
例:
求
:
∂
t
r
(
X
T
X
)
∂
X
T
解
:
d
(
t
r
(
X
T
X
)
)
=
t
r
(
d
(
X
T
X
)
)
=
t
r
(
d
(
X
T
)
X
+
X
T
d
X
)
=
t
r
(
(
d
X
)
T
X
+
X
T
d
X
)
=
t
r
(
(
d
X
T
)
X
)
+
t
r
(
X
T
d
X
)
=
t
r
(
X
T
(
d
X
T
)
T
)
+
t
r
(
X
T
d
X
)
=
t
r
(
X
T
d
X
)
+
t
r
(
X
T
d
X
)
=
t
r
(
2
X
T
d
X
)
∂
t
r
(
X
T
X
)
∂
X
T
=
2
X
T
求:\\ \quad \\ \frac {\partial tr(X^TX)}{\partial X^T} \\ \quad \\ 解:\\ \quad \\ d(tr(X^TX))=tr(d(X^TX)) \\ = tr(d(X^T)X+X^TdX) \\ = tr((dX)^TX+X^TdX) \\ = tr((dX^T)X)+tr(X^TdX) \\ =tr(X^T(dX^T)^T)+tr(X^TdX) \\ = tr(X^TdX)+tr(X^TdX) \\ = tr(2X^TdX) \\ \quad \\ \frac {\partial tr(X^TX)}{\partial X^T} = 2X^T
求:∂XT∂tr(XTX)解:d(tr(XTX))=tr(d(XTX))=tr(d(XT)X+XTdX)=tr((dX)TX+XTdX)=tr((dXT)X)+tr(XTdX)=tr(XT(dXT)T)+tr(XTdX)=tr(XTdX)+tr(XTdX)=tr(2XTdX)∂XT∂tr(XTX)=2XT
实际上,所有的实值函数求导,包括标量对向量、矩阵求导,都能通过这样的求全微分、迹的交换、转置得到最终结果。
常用的矩阵微分
行列式:
d
∣
X
∣
=
t
r
(
∣
X
∣
X
−
1
d
X
)
d|X|=tr(|X|X^{-1}dX)
d∣X∣=tr(∣X∣X−1dX)
逆矩阵:
d
(
X
−
1
)
=
−
X
−
1
(
d
X
)
X
−
1
d(X^{-1})=-X^{-1}(dX)X^{-1}
d(X−1)=−X−1(dX)X−1
后记
把矩阵求导转换为求矩阵微分,可以有效降低求导的难度。
本节是矩阵求导的最后一个部分。SLAM中涉及矩阵求导的部分很多,后续碰到SLAM中的矩阵求导时,会加到这一篇的求导例子中。